blob: 2a269f597ed4baf2570118178762e09fa1ea6c70 [file] [log] [blame]
package org.eclipse.wst.xsd.ui.internal.common.properties.sections.appinfo;
import org.eclipse.gef.commands.Command;
import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery;
import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil;
import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateAttributeValueCommand;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
class DOMExtensionItem
{
Node node;
Element parent;
CMNode cmNode;
DOMExtensionItem(Node node)
{
this.node = node;
}
DOMExtensionItem(Element parent, CMElementDeclaration ed)
{
this.parent = parent;
this.cmNode = ed;
}
DOMExtensionItem(Element parent, CMAttributeDeclaration ad)
{
this.parent = parent;
this.cmNode = ad;
}
public String getName()
{
if (node instanceof Attr)
{
Attr attr = (Attr)node;
return attr.getName();
}
else if (cmNode instanceof CMAttributeDeclaration)
{
CMAttributeDeclaration ad = (CMAttributeDeclaration)cmNode;
return ad.getNodeName() + "*"; //$NON-NLS-1$
}
else if (cmNode instanceof CMDataType)
{
return "text()"; //$NON-NLS-1$
}
return ""; //$NON-NLS-1$
}
public String getValue()
{
if (node instanceof Attr)
{
Attr attr = (Attr)node;
return attr.getValue();
}
return ""; //$NON-NLS-1$
}
public String[] getPossibleValues()
{
String[] result = {};
if (node instanceof Attr)
{
Attr attr = (Attr)node;
ModelQuery modelQuery = ModelQueryUtil.getModelQuery(attr.getOwnerDocument());
if (modelQuery != null)
{
CMAttributeDeclaration ad = modelQuery.getCMAttributeDeclaration(attr);
if (ad != null)
{
result = modelQuery.getPossibleDataTypeValues(attr.getOwnerElement(), ad);
}
}
}
else if (parent != null)
{
if (cmNode == null || cmNode instanceof CMDataType)
{
// TODO
//
}
else if (cmNode instanceof CMAttributeDeclaration)
{
CMAttributeDeclaration ad = (CMAttributeDeclaration)cmNode;
ModelQuery modelQuery = ModelQueryUtil.getModelQuery(parent.getOwnerDocument());
if (modelQuery != null)
{
result = modelQuery.getPossibleDataTypeValues(parent, ad);
}
}
}
return result;
}
public Command getUpdateValueCommand(String newValue)
{
if (node instanceof Attr)
{
Attr attr = (Attr)node;
return new UpdateAttributeValueCommand(attr.getOwnerElement(), attr.getNodeName(), newValue);
}
else if (parent != null)
{
if (cmNode == null || cmNode instanceof CMDataType)
{
// in this case we need to update the parent's text
//
}
else if (cmNode instanceof CMAttributeDeclaration)
{
// TODO (cs) add namespace prefix to attribute name if req'd
//
CMAttributeDeclaration ad = (CMAttributeDeclaration)cmNode;
return new UpdateAttributeValueCommand(parent, ad.getAttrName(), newValue);
}
}
return null;
}
}