[143517] WSDL Editor: add checking to ensure user enters an 'unused' name when creating a new type or element.
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java index 8dafd39..3190691 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java
@@ -145,7 +145,7 @@ Iterator iterator = usedNames.iterator(); while (iterator.hasNext()) { if (name.equalsIgnoreCase((String) iterator.next())) { - return "_UI_LABEL_WARNING_DUPLICATE_NAME_EXISTS"; //$NON-NLS-1$ + return org.eclipse.wst.xsd.ui.internal.common.util.Messages._UI_ERROR_NAME_ALREADY_USED; //$NON-NLS-1$ } } @@ -165,7 +165,7 @@ errorMessage = ""; //$NON-NLS-1$ } errorMessageLabel.setText(errorMessage != null ? errorMessage : ""); //$NON-NLS-1$ -// okButton.setEnabled(errorMessage == null); + okButton.setEnabled(errorMessage == null); } protected void buttonPressed(int buttonId) @@ -181,5 +181,13 @@ { return name; } + + public void setUsedNames(List usedNames) { + this.usedNames = usedNames; + } + + public void setDefaultName(String name) { + this.name = name; + } }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java index d923235..2a0619b 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java
@@ -10,15 +10,23 @@ *******************************************************************************/ package org.eclipse.wst.xsd.ui.internal.dialogs; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + import org.eclipse.emf.common.notify.Adapter; import org.eclipse.swt.widgets.Display; import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification; import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog; +import org.eclipse.wst.xsd.ui.internal.common.util.XSDCommonUIUtils; import org.eclipse.wst.xsd.ui.internal.editor.Messages; import org.eclipse.wst.xsd.ui.internal.search.IXSDSearchConstants; +import org.eclipse.xsd.XSDElementDeclaration; +import org.eclipse.xsd.XSDSchema; public class NewElementDialog extends NewComponentDialog implements IComponentDialog { + protected XSDSchema schema; protected Object setObject; protected int typeKind; protected Object selection; @@ -27,9 +35,24 @@ { super(Display.getCurrent().getActiveShell(), Messages._UI_LABEL_NEW_ELEMENT, "NewElement"); //$NON-NLS-1$ } + + public NewElementDialog(XSDSchema schema) + { + super(Display.getCurrent().getActiveShell(), Messages._UI_LABEL_NEW_ELEMENT, "NewElement"); //$NON-NLS-1$ + this.schema = schema; + } + + private void setup() { + if (schema != null) { + List usedNames = getUsedElementNames(); + setUsedNames(usedNames); + setDefaultName(XSDCommonUIUtils.createUniqueElementName("NewElement", schema.getElementDeclarations())); + } + } public int createAndOpen() { + setup(); int returnCode = super.createAndOpen(); if (returnCode == 0) { @@ -53,4 +76,17 @@ { // TODO Auto-generated method stub } + + private List getUsedElementNames() { + List usedNames = new ArrayList(); + if (schema != null ) { + List elementsList = schema.getElementDeclarations(); + Iterator elements = elementsList.iterator(); + while (elements.hasNext()) { + usedNames.add(((XSDElementDeclaration) elements.next()).getName()); + } + } + + return usedNames; + } }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java index 32b4cef..2c303bb 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java
@@ -11,6 +11,9 @@ package org.eclipse.wst.xsd.ui.internal.dialogs; import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import org.eclipse.core.runtime.FileLocator; import org.eclipse.emf.common.notify.Adapter; @@ -24,11 +27,15 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification; import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog; +import org.eclipse.wst.xsd.ui.internal.common.util.XSDCommonUIUtils; import org.eclipse.wst.xsd.ui.internal.editor.Messages; import org.eclipse.wst.xsd.ui.internal.search.IXSDSearchConstants; +import org.eclipse.xsd.XSDSchema; +import org.eclipse.xsd.XSDTypeDefinition; public class NewTypeDialog extends NewComponentDialog implements IComponentDialog { + protected XSDSchema schema; protected static int SIMPLE_TYPE = 0; protected static int COMPLEX_TYPE = 1; protected Object setObject; @@ -40,9 +47,24 @@ { super(Display.getCurrent().getActiveShell(), Messages._UI_LABEL_NEW_TYPE, "NewType"); //$NON-NLS-1$ } + + public NewTypeDialog(XSDSchema schema) + { + super(Display.getCurrent().getActiveShell(), Messages._UI_LABEL_NEW_TYPE, "NewType"); //$NON-NLS-1$ + this.schema = schema; + } + + private void setup() { + if (schema != null) { + List usedNames = getUsedTypeNames(); + setUsedNames(usedNames); + setDefaultName(XSDCommonUIUtils.createUniqueElementName("NewType", schema.getTypeDefinitions())); + } + } public int createAndOpen() { + setup(); int returnCode = super.createAndOpen(); if (returnCode == 0) { @@ -128,4 +150,18 @@ { this.allowComplexType= value; } + + private List getUsedTypeNames() { + List usedNames = new ArrayList(); + + if (schema != null) { + List typesList = schema.getTypeDefinitions(); + Iterator types = typesList.iterator(); + while (types.hasNext()) { + usedNames.add(((XSDTypeDefinition) types.next()).getName()); + } + } + + return usedNames; + } }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java index 8ebc015..0f6904d 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
@@ -64,7 +64,12 @@ public IComponentDialog getNewDialog() { - return new NewElementDialog(); + if (schemas.length > 0) { + return new NewElementDialog(schemas[0]); + } + else { + return new NewElementDialog(); + } } public ComponentSpecification[] getQuickPicks()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java index d0cc8e2..c0df995 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java
@@ -77,7 +77,12 @@ public IComponentDialog getNewDialog() { - return new NewTypeDialog(); + if (schemas.length > 0) { + return new NewTypeDialog(schemas[0]); + } + else { + return new NewTypeDialog(); + } } public ComponentSpecification[] getQuickPicks()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java index bc79957..8bbc6ab 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java
@@ -18,8 +18,6 @@ import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification; import org.eclipse.wst.common.ui.internal.search.dialogs.ScopedComponentSearchListDialog; import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog; -import org.eclipse.wst.xsd.ui.internal.dialogs.NewElementButtonHandler; -import org.eclipse.wst.xsd.ui.internal.dialogs.NewTypeButtonHandler; import org.eclipse.wst.xsd.ui.internal.editor.Messages; import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin; import org.eclipse.xsd.XSDSchema; @@ -82,7 +80,7 @@ configuration.setSearchListProvider(searchListProvider); configuration.setFilterLabelText(Messages._UI_LABEL_NAME_SEARCH_FILTER_TEXT); configuration.setListLabelText(Messages._UI_LABEL_ELEMENTS_COLON); - configuration.setNewComponentHandler(new NewElementButtonHandler()); +// configuration.setNewComponentHandler(new NewElementButtonHandler()); //TODO externalize string dialog = new ScopedComponentSearchListDialog(shell, Messages._UI_LABEL_SET_ELEMENT_REFERENCE, configuration); } @@ -96,7 +94,7 @@ ComponentSearchListDialogConfiguration configuration = new ComponentSearchListDialogConfiguration(); configuration.setDescriptionProvider(descriptionProvider); configuration.setSearchListProvider(searchListProvider); - configuration.setNewComponentHandler(new NewTypeButtonHandler()); +// configuration.setNewComponentHandler(new NewTypeButtonHandler()); configuration.setFilterLabelText(Messages._UI_LABEL_NAME_SEARCH_FILTER_TEXT); configuration.setListLabelText(Messages._UI_LABEL_TYPES_COLON); dialog = new ScopedComponentSearchListDialog(shell, Messages._UI_LABEL_SET_TYPE, configuration); //$NON-NLS-1$
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 c2a6b3d..d931c78 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
@@ -277,7 +277,7 @@ } int i = 1; - String testName = prefix + i++; + String testName = prefix; while (usedNames.contains(testName)) { testName = prefix + i++;