### Eclipse Workspace Patch 1.0
#P org.eclipse.pde.ui
Index: src/org/eclipse/pde/internal/ui/util/PDELabelUtility.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/PDELabelUtility.java,v
retrieving revision 1.3
diff -u -r1.3 PDELabelUtility.java
--- src/org/eclipse/pde/internal/ui/util/PDELabelUtility.java 25 Jun 2007 20:48:16 -0000 1.3
+++ src/org/eclipse/pde/internal/ui/util/PDELabelUtility.java 17 Jul 2007 15:44:47 -0000
@@ -96,7 +96,7 @@
* @param base
* @param set
*/
- private static void addNumberToBase(StringBuffer base, HashSet set) {
+ private static void addNumberToBase(StringBuffer base, boolean bracketed, HashSet set) {
if (set.size() > 0) {
// Limit on the number of auto-generated item numbers to check for
int limit = 100;
@@ -109,9 +109,11 @@
// Check if the number was already used to auto-generate an
// existing item
if (set.contains(new Integer(x)) == false) {
- base.append(" ("); //$NON-NLS-1$
+ if (bracketed)
+ base.append(" ("); //$NON-NLS-1$
base.append(x);
- base.append(")"); //$NON-NLS-1$
+ if (bracketed)
+ base.append(")"); //$NON-NLS-1$
break;
}
}
@@ -124,34 +126,60 @@
* @param set
* @param title
*/
- private static void compareTitleWithBase(String base, HashSet set, String title) {
- // Check to see it the name starts with the base
+ private static void compareTitleWithBase(String base, boolean bracketed, HashSet set, String title) {
+ // Check to see it the name starts with the prefix
if (title.startsWith(base)) {
- // space, (, number, )
- int minSizeNumAddOn = 4;
+ // with brackets add on is: space, (, #, )
+ int minSizeNumAddOn = 4;
+ if (!bracketed)
+ // without brackets and space add on is just number
+ minSizeNumAddOn = 1;
// We found a possible auto-generated name
// Determine number
if (title.length() >= (base.length() + minSizeNumAddOn)) {
- // We skipped the space
- String numPart = title.substring(base.length() + 1);
+ String numPart;
+ if (bracketed && title.charAt(base.length()) == ' ') {
+ // We skipped the space since we already checked
+ numPart = title.substring(base.length() + 1);
+ } else if (!bracketed) {
+ // without brackets, the numPart is everything after the prefix
+ numPart = title.substring(base.length());
+ } else {
+ // We are using brackets and there was no space
+ return;
+ }
+ if (bracketed) {
+ if (numPart.charAt(0) == '(') {
+ // We are using brackets and confirmed that the open bracket exists
+ // move on to just the number part
+ numPart = numPart.substring(1);
+ }
+ else {
+ // We are using brackets and there is no opening bracket
+ return;
+ }
+ }
// We found an auto-generated name
- if (numPart.charAt(0) == '(') {
- StringBuffer buffer = new StringBuffer();
- // Parse the number between the brackets
- for (int j = 1; j < numPart.length(); j++) {
- char current = numPart.charAt(j);
- // Make sure its a digit
- if (Character.isDigit(current)) {
- buffer.append(current);
- } else {
- // Break on non digits including ')'
- break;
+ StringBuffer buffer = new StringBuffer();
+ // Parse the number between the brackets
+ for (int j = 0; j < numPart.length(); j++) {
+ char current = numPart.charAt(j);
+ // Make sure its a digit
+ if (Character.isDigit(current)) {
+ buffer.append(current);
+ } else {
+ if (!bracketed || numPart.charAt(j) != ')' || j != numPart.length() - 1) {
+ // without brackets, a non digits means this will not conflict
+ // with brackets, anything other than a ')' means this will not conflict
+ // with brackets, if this is not the last character it will not conflict
+ return;
}
+ // if all conditions passed, this is the last loop, no need to break
}
- // Convert the number we found into an actual number
- if (buffer.length() > 0) {
- set.add(new Integer(buffer.toString()));
- }
+ }
+ // Convert the number we found into an actual number
+ if (buffer.length() > 0) {
+ set.add(new Integer(buffer.toString()));
}
} else {
@@ -166,6 +194,24 @@
* @return
*/
public static String generateName(String[] names, String base) {
+ return generateName(names, base, true);
+ }
+
+ /**
+ *
Generates a name that does not conflict with any of the given names with one of two forms:
+ *
- "<base> (#)"
- "<base>#"
+ * The number will be omitted if the base name alone is available.
+ *
+ * @param names
+ * the existing names that should not be conflicted
+ * @param base
+ * the base name to add numbers to
+ * @param bracketed
+ * if true use the first form, otherwise use the second
+ * @return
+ * the non-conflicting name
+ */
+ public static String generateName(String[] names, String base, boolean bracketed){
StringBuffer result = new StringBuffer(base);
// Used to track auto-generated numbers used
HashSet set = new HashSet();
@@ -174,11 +220,12 @@
// Performance hit unnoticeable because number of items per cheatsheet
// should be minimal.
for (int i = 0; i < names.length; i++) {
- PDELabelUtility.compareTitleWithBase(base, set, names[i]);
+ PDELabelUtility.compareTitleWithBase(base, bracketed, set, names[i]);
}
// Add an auto-generated number
- PDELabelUtility.addNumberToBase(result, set);
+ PDELabelUtility.addNumberToBase(result, bracketed, set);
return result.toString();
+
}
}
Index: src/org/eclipse/pde/internal/ui/pderesources.properties
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties,v
retrieving revision 1.888
diff -u -r1.888 pderesources.properties
--- src/org/eclipse/pde/internal/ui/pderesources.properties 17 Jul 2007 13:50:43 -0000 1.888
+++ src/org/eclipse/pde/internal/ui/pderesources.properties 17 Jul 2007 15:44:47 -0000
@@ -395,7 +395,7 @@
SchemaElementDetails_description= Properties for the "{0}" element.
SchemaEditor_NewElement_tooltip = New Global Element
SchemaIncludesSection_addButton=Add...
-SchemaEditor_NewElement_initialName = new_element{0}
+SchemaEditor_NewElement_initialName = new_element
SchemaIncludesSection_dialogMessage=Select an extension point schema file:
SchemaIncludesSection_missingWarningTitle=Missing Schema Include
SchemaIncludesSection_missingWarningMessage={0} could not be found.
Index: src/org/eclipse/pde/internal/ui/editor/schema/NewElementAction.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/NewElementAction.java,v
retrieving revision 1.13
diff -u -r1.13 NewElementAction.java
--- src/org/eclipse/pde/internal/ui/editor/schema/NewElementAction.java 3 Apr 2006 19:47:22 -0000 1.13
+++ src/org/eclipse/pde/internal/ui/editor/schema/NewElementAction.java 17 Jul 2007 15:44:47 -0000
@@ -10,37 +10,35 @@
*******************************************************************************/
package org.eclipse.pde.internal.ui.editor.schema;
-import java.util.Hashtable;
-
import org.eclipse.jface.action.Action;
-import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.internal.core.ischema.ISchema;
+import org.eclipse.pde.internal.core.ischema.ISchemaElement;
import org.eclipse.pde.internal.core.schema.Schema;
import org.eclipse.pde.internal.core.schema.SchemaElement;
import org.eclipse.pde.internal.core.schema.SchemaRootElement;
import org.eclipse.pde.internal.core.schema.SchemaSimpleType;
-import org.eclipse.pde.internal.ui.PDEPlugin;
import org.eclipse.pde.internal.ui.PDEPluginImages;
import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.util.PDELabelUtility;
public class NewElementAction extends Action {
private Schema schema;
- private static final String NAME_COUNTER_KEY = "__schema_element_name"; //$NON-NLS-1$
public NewElementAction() {
setText(PDEUIMessages.SchemaEditor_NewElement_label);
setImageDescriptor(PDEPluginImages.DESC_GEL_SC_OBJ);
setToolTipText(PDEUIMessages.SchemaEditor_NewElement_tooltip);
}
private String getInitialName() {
- Hashtable counters = PDEPlugin.getDefault().getDefaultNameCounters();
- Integer counter = (Integer) counters.get(NAME_COUNTER_KEY);
- if (counter == null) {
- counter = new Integer(1);
- } else {
- counter = new Integer(counter.intValue() + 1);
- }
- counters.put(NAME_COUNTER_KEY, counter);
- return NLS.bind(PDEUIMessages.SchemaEditor_NewElement_initialName, counter.intValue() + ""); //$NON-NLS-1$
+ return PDELabelUtility.generateName(getElementNames(), PDEUIMessages.SchemaEditor_NewElement_initialName, false);
+ }
+ private String[] getElementNames() {
+ if (schema == null)
+ return new String[0];
+ ISchemaElement[] elements = schema.getElements();
+ String[] names = new String[elements.length];
+ for (int i = 0; i < elements.length; i++)
+ names[i] = elements[i].getName();
+ return names;
}
public org.eclipse.pde.internal.core.schema.Schema getSchema() {
return schema;