[136942] improve the XML Schema 'extensions' view
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/appinfo/DOMExtensionDetailsContentProvider.java b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/appinfo/DOMExtensionDetailsContentProvider.java
new file mode 100644
index 0000000..b4568b3
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/appinfo/DOMExtensionDetailsContentProvider.java
@@ -0,0 +1,105 @@
+package org.eclipse.wst.xsd.ui.internal.common.properties.sections.appinfo;
+
+import java.util.Collection;
+import java.util.HashMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery;
+import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+
+
+public class DOMExtensionDetailsContentProvider implements ExtensionDetailsContentProvider
+{
+ private static Object[] EMPTY_ARRAY = {};
+ private static String[] EMPTY_STRING_ARRAY = {};
+ public Object[] getItems(Object input)
+ {
+ HashMap resultMap = new HashMap();
+ if (input instanceof Element)
+ {
+ Element element = (Element)input;
+ NamedNodeMap attributes = element.getAttributes();
+ for (int i = 0; i < attributes.getLength(); i++)
+ {
+ Attr attr = (Attr)attributes.item(i);
+ if (!"xmlns".equals(attr.getName()) && !"xmlns".equals(attr.getPrefix()))
+ {
+ resultMap.put(attr.getName(), new DOMExtensionItem(attr));
+ }
+ }
+ ModelQuery modelQuery = ModelQueryUtil.getModelQuery(element.getOwnerDocument());
+ if (modelQuery != null)
+ {
+ CMElementDeclaration ed = modelQuery.getCMElementDeclaration(element);
+ if (ed != null)
+ {
+ CMNamedNodeMap attrMap = ed.getAttributes();
+ if (attrMap != null)
+ {
+ int attrMapLength = attrMap.getLength();
+ for (int i = 0; i < attrMapLength; i++)
+ {
+ CMAttributeDeclaration ad = (CMAttributeDeclaration) attrMap.item(i);
+ if (resultMap.get(ad.getNodeName()) == null)
+ {
+ resultMap.put(ad.getNodeName(), new DOMExtensionItem(element, ad));
+ }
+ }
+ }
+ //
+ int contentType = ed.getContentType();
+ if ((contentType == CMElementDeclaration.PCDATA ||
+ contentType == CMElementDeclaration.PCDATA) &&
+ ed.getDataType() != null)
+ {
+ resultMap.put("text()", new DOMExtensionItem(element, ed));
+ }
+ }
+ }
+ Collection collection = resultMap.values();
+ DOMExtensionItem[] items = new DOMExtensionItem[collection.size()];
+ resultMap.values().toArray(items);
+ return items;
+ }
+ else if (input instanceof Attr)
+ {
+ Attr attr = (Attr)input;
+ DOMExtensionItem item = new DOMExtensionItem(attr);
+ DOMExtensionItem[] items = {item};
+ return items;
+ }
+ return EMPTY_ARRAY;
+ }
+
+
+ public String getName(Object item)
+ {
+ if (item instanceof DOMExtensionItem)
+ {
+ return ((DOMExtensionItem)item).getName();
+ }
+ return "";
+ }
+
+ public String getValue(Object item)
+ {
+ if (item instanceof DOMExtensionItem)
+ {
+ return ((DOMExtensionItem)item).getValue();
+ }
+ return "";
+ }
+
+ public String[] getPossibleValues(Object item)
+ {
+ if (item instanceof DOMExtensionItem)
+ {
+ return ((DOMExtensionItem)item).getPossibleValues();
+ }
+ return EMPTY_STRING_ARRAY;
+ }
+}