diff options
author | kchong | 2007-08-24 19:30:46 +0000 |
---|---|---|
committer | kchong | 2007-08-24 19:30:46 +0000 |
commit | 412cffc40afc7096a4686dc9f8c30458a196707d (patch) | |
tree | 38778b08b593dbe65f6f4d121fe44fcd226352e9 | |
parent | e48a76dc29a5f200398f8a6a88ee8e48a1c5bdd9 (diff) | |
download | webtools.sourceediting-412cffc40afc7096a4686dc9f8c30458a196707d.tar.gz webtools.sourceediting-412cffc40afc7096a4686dc9f8c30458a196707d.tar.xz webtools.sourceediting-412cffc40afc7096a4686dc9f8c30458a196707d.zip |
[no bug] Prevent recursive model group references
2 files changed, 26 insertions, 3 deletions
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDModelGroupDefinitionCommand.java b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDModelGroupDefinitionCommand.java index 8e0596defc..7fa85eac9a 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDModelGroupDefinitionCommand.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/commands/AddXSDModelGroupDefinitionCommand.java @@ -61,11 +61,19 @@ public class AddXSDModelGroupDefinitionCommand extends BaseCommand XSDParticle particle = XSDFactory.eINSTANCE.createXSDParticle(); particle.setContent(def); List list = parent.getSchema().getModelGroupDefinitions(); - if (list.size() > 0) + int length = list.size(); + if (length > 1) { - def.setResolvedModelGroupDefinition((XSDModelGroupDefinition) list.get(0)); + for (int i = 0; i < length; i++) + { + XSDModelGroupDefinition gr = (XSDModelGroupDefinition) list.get(i); + if (gr.getModelGroup() != parent) + { + def.setResolvedModelGroupDefinition(gr); + } + } } - else + else if (length <= 1) { XSDModelGroupDefinition newGroupDef = createXSDModelGroupDefinition(); def.setResolvedModelGroupDefinition(newGroupDef); diff --git a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDModelGroupDefinitionSection.java b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDModelGroupDefinitionSection.java index 4e2a0557d6..fd989a19cc 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDModelGroupDefinitionSection.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDModelGroupDefinitionSection.java @@ -32,6 +32,7 @@ import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateNameCommand; import org.eclipse.wst.xsd.ui.internal.common.util.Messages; import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorCSHelpIds; import org.eclipse.wst.xsd.ui.internal.util.TypesHelper; +import org.eclipse.xsd.XSDConcreteComponent; import org.eclipse.xsd.XSDModelGroupDefinition; import org.eclipse.xsd.XSDNamedComponent; import org.eclipse.xsd.util.XSDConstants; @@ -220,6 +221,20 @@ public class XSDModelGroupDefinitionSection extends MultiplicitySection TypesHelper helper = new TypesHelper(xsdSchema); List items = new ArrayList(); items = helper.getModelGroups(); + if (input instanceof XSDModelGroupDefinition) + { + XSDModelGroupDefinition group = (XSDModelGroupDefinition) input; + XSDConcreteComponent parent = group.getContainer(); + while (parent != null) + { + if (parent instanceof XSDModelGroupDefinition) + { + items.remove(((XSDModelGroupDefinition)parent).getQName()); + break; + } + parent = parent.getContainer(); + } + } items.add(0, ""); //$NON-NLS-1$ componentNameCombo.setItems((String [])items.toArray(new String[0])); } |