[no bug] Should create unique names for model group definition elements
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDElementCommand.java b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDElementCommand.java
index d520ec0..448f738 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDElementCommand.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDElementCommand.java
@@ -117,7 +117,7 @@
xsdSchema = xsdModelGroupDefinition.getSchema();
if (!isReference)
{
- xsdModelGroup.getContents().add(createXSDElementDeclaration());
+ xsdModelGroup.getContents().add(createXSDElementDeclarationForModelGroupDefinitions());
}
else
{
@@ -125,7 +125,7 @@
}
formatChild(xsdModelGroupDefinition.getElement());
}
- else if (xsdComplexTypeDefinition == null && xsdModelGroup != null)
+ else if (xsdModelGroup != null && (xsdComplexTypeDefinition == null || xsdModelGroupDefinition == null) )
{
xsdSchema = xsdModelGroup.getSchema();
beginRecording(xsdSchema.getElement());
@@ -175,10 +175,26 @@
XSDElementDeclaration element = XSDFactory.eINSTANCE.createXSDElementDeclaration();
+ XSDConcreteComponent comp = xsdModelGroup.getContainer();
ArrayList usedAttributeNames = new ArrayList();
- usedAttributeNames.addAll(XSDCommonUIUtils.getChildElements(xsdModelGroup));
+ usedAttributeNames.addAll(XSDCommonUIUtils.getChildElements(xsdModelGroup));
+ while (comp != null)
+ {
+ if (comp instanceof XSDModelGroupDefinition)
+ {
+ usedAttributeNames.addAll(XSDCommonUIUtils.getAllAttributes((XSDModelGroupDefinition)comp));
+ break;
+ }
+ else if (comp instanceof XSDComplexTypeDefinition)
+ {
+ usedAttributeNames.addAll(XSDCommonUIUtils.getAllAttributes((XSDComplexTypeDefinition)comp));
+ usedAttributeNames.addAll(XSDCommonUIUtils.getInheritedAttributes((XSDComplexTypeDefinition)comp));
+ break;
+ }
+ comp = comp.getContainer();
+ }
element.setName(XSDCommonUIUtils.createUniqueElementName(
- nameToAdd == null ? "NewElement" : nameToAdd , xsdSchema.getElementDeclarations())); //$NON-NLS-1$
+ nameToAdd == null ? "NewElement" : nameToAdd , usedAttributeNames)); //$NON-NLS-1$
element.setTypeDefinition(type);
XSDParticle particle = XSDFactory.eINSTANCE.createXSDParticle();
@@ -230,6 +246,24 @@
addedXSDConcreteComponent = element;
return particle;
}
+
+ protected XSDParticle createXSDElementDeclarationForModelGroupDefinitions()
+ {
+ XSDSimpleTypeDefinition type = xsdModelGroup.getSchema().getSchemaForSchema().resolveSimpleTypeDefinition("string"); //$NON-NLS-1$
+
+ XSDElementDeclaration element = XSDFactory.eINSTANCE.createXSDElementDeclaration();
+
+ ArrayList usedAttributeNames = new ArrayList();
+ usedAttributeNames.addAll(XSDCommonUIUtils.getAllAttributes(xsdModelGroupDefinition));
+ element.setName(XSDCommonUIUtils.createUniqueElementName(
+ nameToAdd == null ? "NewElement" : nameToAdd , usedAttributeNames)); //$NON-NLS-1$
+ element.setTypeDefinition(type);
+
+ XSDParticle particle = XSDFactory.eINSTANCE.createXSDParticle();
+ particle.setContent(element);
+ addedXSDConcreteComponent = element;
+ return particle;
+ }
protected XSDElementDeclaration createGlobalXSDElementDeclaration()
{
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/util/XSDCommonUIUtils.java b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/util/XSDCommonUIUtils.java
index 9267805..88b497f 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/util/XSDCommonUIUtils.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/util/XSDCommonUIUtils.java
@@ -411,6 +411,13 @@
return attributes;
}
+ public static List getAllAttributes(XSDModelGroupDefinition xsdModelGroupDefinition)
+ {
+ List attributes = getChildElements(xsdModelGroupDefinition);
+
+ return attributes;
+ }
+
public static List getInheritedAttributes(XSDComplexTypeDefinition ct)
{
List attrs = new ArrayList();
@@ -428,7 +435,12 @@
{
return getChildElements(getModelGroup(ct));
}
-
+
+ public static List getChildElements(XSDModelGroupDefinition xsdModelGroupDefinition)
+ {
+ return getChildElements(xsdModelGroupDefinition.getModelGroup());
+ }
+
public static XSDModelGroup getModelGroup(XSDComplexTypeDefinition cType)
{
XSDParticle particle = cType.getComplexType();