/******************************************************************************* * Copyright (c) 2001, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.wst.xsd.ui.internal; import java.util.ArrayList; import java.util.List; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.ui.parts.AbstractEditPartViewer; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.actions.ActionContext; import org.eclipse.wst.xsd.ui.internal.actions.AddEnumsAction; import org.eclipse.wst.xsd.ui.internal.actions.AddModelGroupAction; import org.eclipse.wst.xsd.ui.internal.actions.BackAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateAnnotationAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateElementAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateGroupAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateIdentityConstraintsAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateLocalComplexTypeAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateLocalSimpleTypeAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateSimpleContentAction; import org.eclipse.wst.xsd.ui.internal.actions.CreateSimpleTypeAction; import org.eclipse.wst.xsd.ui.internal.actions.DOMAttribute; import org.eclipse.wst.xsd.ui.internal.actions.DeleteAction; import org.eclipse.wst.xsd.ui.internal.actions.OpenSchemaAction; import org.eclipse.wst.xsd.ui.internal.actions.SetBaseTypeAction; import org.eclipse.wst.xsd.ui.internal.actions.SetMultiplicityAction; import org.eclipse.wst.xsd.ui.internal.actions.SetTypeAction; import org.eclipse.wst.xsd.ui.internal.actions.XSDEditNamespacesAction; import org.eclipse.wst.xsd.ui.internal.graph.editparts.ComplexTypeDefinitionEditPart; import org.eclipse.wst.xsd.ui.internal.graph.editparts.ElementDeclarationEditPart; import org.eclipse.wst.xsd.ui.internal.graph.editparts.ModelGroupDefinitionEditPart; import org.eclipse.wst.xsd.ui.internal.graph.editparts.TopLevelComponentEditPart; import org.eclipse.wst.xsd.ui.internal.graph.model.Category; import org.eclipse.wst.xsd.ui.internal.provider.CategoryAdapter; import org.eclipse.wst.xsd.ui.internal.refactor.actions.RefactorActionGroup; import org.eclipse.wst.xsd.ui.internal.util.TypesHelper; import org.eclipse.wst.xsd.ui.internal.util.XSDDOMHelper; import org.eclipse.xsd.XSDComplexTypeDefinition; import org.eclipse.xsd.XSDCompositor; import org.eclipse.xsd.XSDConcreteComponent; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDModelGroupDefinition; import org.eclipse.xsd.XSDNamedComponent; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.XSDSchemaDirective; import org.eclipse.xsd.util.XSDConstants; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XSDMenuListener implements IMenuListener { protected ISelectionProvider selectionProvider; //protected XSDTextEditor textEditor; protected DeleteAction deleteAction; // protected IAction undoAction, redoAction; protected CreateElementAction addComplexTypeAction; protected XSDSchema xsdSchema; protected boolean isReadOnly; protected Object sourceContext; private RefactorActionGroup fRefactorMenuGroup; /** * Constructor for XSDMenuListener. */ public XSDMenuListener(ISelectionProvider selectionProvider) { super(); this.selectionProvider = selectionProvider; deleteAction = new DeleteAction(XSDEditorPlugin.getXSDString("_UI_ACTION_DELETE"), null, getXSDSchema()); deleteAction.setSelectionProvider(selectionProvider); selectionProvider.addSelectionChangedListener(deleteAction); } public void setSourceContext(Object sourceContext) { this.sourceContext = sourceContext; } public void setSelectionProvider(ISelectionProvider selectionProvider) { this.selectionProvider = selectionProvider; } protected XSDSchema getXSDSchema() { return xsdSchema; } protected Object getSelectedElement() { ISelection selection = selectionProvider.getSelection(); if (selection.isEmpty()) { return null; } return ((IStructuredSelection) selection).getFirstElement(); } protected void updateXSDSchema() { Object object = getSelectedElement(); if (object instanceof XSDConcreteComponent) { xsdSchema = ((XSDConcreteComponent)object).getSchema(); boolean flag = true; isReadOnly = false; if (xsdSchema == null) { return; } while (flag) { List list = xsdSchema.getReferencingDirectives(); if (list.size() > 0) { isReadOnly = true; XSDSchemaDirective xsdSchemaDirective = (XSDSchemaDirective)list.get(0); XSDSchema refSchema = xsdSchemaDirective.getSchema(); // check if included schema is the same as the current - don't want cycle if (refSchema != null && refSchema != xsdSchema) { xsdSchema = xsdSchemaDirective.getSchema(); } else { if (refSchema == xsdSchema) { // if it includes itself, then we should still be able to edit it isReadOnly = false; } flag = false; } } else { flag = false; } } } else if (object instanceof Category) { Category cg = (Category)object; xsdSchema = cg.getXSDSchema(); } else if (object instanceof CategoryAdapter) { CategoryAdapter category = (CategoryAdapter)object; xsdSchema = category.getXSDSchema(); } } /* * @see IMenuListener#menuAboutToShow(IMenuManager) */ public void menuAboutToShow(IMenuManager manager) { isReadOnly = false; updateXSDSchema(); if (xsdSchema == null) { return; } deleteAction.setXSDSchema(xsdSchema); deleteAction.setEnabled(!isReadOnly); BackAction backAction = new BackAction(XSDEditorPlugin.getXSDString("_UI_ACTION_BACK_TO_SCHEMA_VIEW")); //$NON-NLS-1$ backAction.setXSDSchema(getXSDSchema()); backAction.setSelectionProvider(selectionProvider); Object selectedElementObj = getSelectedElement(); if (selectedElementObj instanceof XSDSchema || selectedElementObj instanceof Category || selectedElementObj instanceof CategoryAdapter) { backAction.setEnabled(false); } manager.add(backAction); manager.add(new Separator()); // if (undoAction == null && textEditor != null) // { // undoAction = textEditor.getAction(org.eclipse.ui.texteditor.ITextEditorActionConstants.UNDO); // redoAction = textEditor.getAction(org.eclipse.ui.texteditor.ITextEditorActionConstants.REDO); // } // Element selectedElement = getSelectedElement(); Element selectedElement = null; if (selectedElementObj instanceof Element) { selectedElement = (Element) selectedElementObj; } else if (selectedElementObj instanceof XSDConcreteComponent) { selectedElement = ((XSDConcreteComponent) selectedElementObj).getElement(); } else if (selectedElementObj instanceof Category || selectedElementObj instanceof CategoryAdapter) { int groupType = -1; if (selectedElementObj instanceof Category) { Category category = (Category) selectedElementObj; groupType = category.getGroupType(); } // todo... We need to ensure we eliminate the need for // this case. The XSDMenuListener class should not have // view dependant code. We need to do some work to ensure all // views utilize the 'Category' model object else if (selectedElementObj instanceof CategoryAdapter) { CategoryAdapter categoryAdapter = (CategoryAdapter) selectedElementObj; groupType = categoryAdapter.getGroupType(); } ArrayList attributes = null; Element parent = getXSDSchema().getElement(); if (parent == null) { return; } Node relativeNode = null; switch (groupType) { case Category.TYPES : { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("ComplexType"))); Action action = addCreateElementAction(manager, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_TYPE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("SimpleType"))); Action action2 = addCreateSimpleTypeAction(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SIMPLE_TYPE"), attributes, parent, relativeNode); ((CreateElementAction) action2).setIsGlobal(true); break; } case Category.ELEMENTS : { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.ELEMENT_ELEMENT_TAG, "GlobalElement"))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); Action action = addCreateElementAction(manager, XSDConstants.ELEMENT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ELEMENT"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); break; } case Category.GROUPS : { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.GROUP_ELEMENT_TAG, "Group"))); CreateGroupAction groupAction = addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GROUP"), attributes, parent, relativeNode); groupAction.setIsGlobal(true); break; } case Category.ATTRIBUTES : { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.ATTRIBUTE_ELEMENT_TAG, "GlobalAttribute"))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); Action action = addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GLOBAL_ATTRIBUTE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); break; } case Category.ATTRIBUTE_GROUPS : { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, "AttributeGroup"))); Action action = addCreateElementAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); break; } case Category.NOTATIONS : { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.NOTATION_ELEMENT_TAG, "Notation"))); attributes.add(new DOMAttribute(XSDConstants.PUBLIC_ATTRIBUTE, "")); Action action = addCreateElementAction(manager, XSDConstants.NOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_NOTATION"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); break; } case Category.DIRECTIVES : { boolean b = true; NodeList children = parent.getChildNodes(); int length = children.getLength(); Node effectiveRelativeNode = parent.getFirstChild(); for (int i = 0; i < length && b; i++) { Node child = children.item(i); if (child != null && child instanceof Element) { if (XSDDOMHelper.inputEquals((Element) child, XSDConstants.INCLUDE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.IMPORT_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.REDEFINE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.ANNOTATION_ELEMENT_TAG, false)) { effectiveRelativeNode = child; } else { b = false; } } } relativeNode = effectiveRelativeNode != null ? XSDDOMHelper.getNextElementNode(effectiveRelativeNode) : null; attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, "")); Action action = addCreateElementAction(manager, XSDConstants.INCLUDE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_INCLUDE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); action = addCreateElementAction(manager, XSDConstants.IMPORT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_IMPORT"), null, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); action = addCreateElementAction(manager, XSDConstants.REDEFINE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_REDEFINE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); break; } case Category.ANNOTATIONS : { Action action = addCreateElementAction(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), null, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); break; } } // manager.add(new Separator()); // if (undoAction != null) // { // manager.add(undoAction); // manager.add(redoAction); // } // insertion point for popupMenus extension manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); return; } if (selectedElement != null) { // Add context menu items for selected element addContextItems(manager, selectedElement, null); manager.add(new Separator()); //else // if (textEditor != null) // { // Document document = getXSDSchema().getDocument(); // if (document != null) // { // Element docElement = getXSDSchema().getDocument().getDocumentElement(); // if (!XSDDOMHelper.inputEquals(docElement, XSDConstants.SCHEMA_ELEMENT_TAG, false)) // // if (list.getLength() == 0) // { // // no schema tag. Enable the Add Schema action // AddSchemaNodeAction action = new AddSchemaNodeAction(XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SCHEMA_NODE")); // action.setEditor((XSDEditor) textEditor.getEditorPart()); // manager.add(action); // } // } // } } // manager.add(new Separator()); // if (undoAction != null) // { // manager.add(undoAction); // manager.add(redoAction); // } manager.add(new Separator()); if (deleteAction != null) { manager.add(deleteAction); } // insertion point for popupMenus extension manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } protected String getBuiltInStringQName() { String stringName = "string"; if (getXSDSchema() != null) { String schemaForSchemaPrefix = getXSDSchema().getSchemaForSchemaQNamePrefix(); if (schemaForSchemaPrefix != null && schemaForSchemaPrefix.length() > 0) { String prefix = getXSDSchema().getSchemaForSchemaQNamePrefix(); if (prefix != null && prefix.length() > 0) { stringName = prefix + ":" + stringName; } } } return stringName; } /** * Method addContextItems. * * @param manager * @param parent - * menu items should be context sensitive to this node * @param relativeNode - * anything inserted, should be inserted before this node (which is a * child of the parent node. A value of null means add to the end */ protected void addContextItems(IMenuManager manager, Element parent, Node relativeNode) { ArrayList attributes = null; if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { // addSchemaElementItems(manager, parent, relativeNode); manager.add(new Separator()); boolean b = true; NodeList children = parent.getChildNodes(); Node effectiveRelativeNode = parent.getFirstChild(); for (int i = 0; i < children.getLength() && b; i++) { Node child = children.item(i); if (child != null && child instanceof Element) { if (XSDDOMHelper.inputEquals((Element) child, XSDConstants.INCLUDE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.IMPORT_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.REDEFINE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.ANNOTATION_ELEMENT_TAG, false)) { effectiveRelativeNode = child; } else { b = false; } } } relativeNode = effectiveRelativeNode != null ? effectiveRelativeNode.getNextSibling() : null; attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, "")); addCreateElementAction(manager, XSDConstants.INCLUDE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_INCLUDE"), attributes, parent, relativeNode); addCreateElementAction(manager, XSDConstants.IMPORT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_IMPORT"), null, parent, relativeNode); addCreateElementAction(manager, XSDConstants.REDEFINE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_REDEFINE"), attributes, parent, relativeNode); attributes = null; addCreateAnnotationAction(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), null, parent, relativeNode); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false)) { // addCreateElementAction(manager, XSDConstants.DOCUMENTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_DOC"), attributes, parent, null); addCreateElementAction(manager, XSDConstants.APPINFO_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_APP_INFO"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ELEMENT_ELEMENT_TAG, false)) { XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); Element parentNode = (Element) parent.getParentNode(); boolean isGlobalElement = false; if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { isGlobalElement = true; } boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); boolean simpleTypeExists = elementExists(XSDConstants.SIMPLETYPE_ELEMENT_TAG, parent); boolean complexTypeExists = elementExists(XSDConstants.COMPLEXTYPE_ELEMENT_TAG, parent); manager.add(new Separator()); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); if (!(simpleTypeExists || complexTypeExists) && annotationNode != null) { //addCreateLocalSimpleTypeActionIfNotExist(manager, // XSDConstants.SIMPLETYPE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), // attributes, parent, annotationNode.getNextSibling()); //addCreateLocalComplexTypeActionIfNotExist(manager, // XSDConstants.COMPLEXTYPE_ELEMENT_TAG, "Add Local Complex Type", // attributes, parent, annotationNode.getNextSibling()); manager.add(new Separator()); } } else { // Should still be able to add the content models if the anonymous type // exists, // ie. with attributes // if (!(simpleTypeExists || complexTypeExists)) // { //addCreateLocalSimpleTypeActionIfNotExist(manager, // XSDConstants.SIMPLETYPE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), // attributes, parent, parent.getFirstChild()); //addCreateLocalComplexTypeActionIfNotExist(manager, // XSDConstants.COMPLEXTYPE_ELEMENT_TAG, "Add Local Complex Type", // attributes, parent, parent.getFirstChild()); if (concreteComponent != null) { AddModelGroupAction addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.SEQUENCE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.CHOICE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.ALL_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); manager.add(new Separator()); } // } } // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, "New_Unique")); // addCreateIdentityConstraintsAction(manager, XSDConstants.UNIQUE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_UNIQUE"), attributes, parent, null); // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, "New_Key")); // addCreateIdentityConstraintsAction(manager, XSDConstants.KEY_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_KEY"), attributes, parent, null); // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, "New_KeyRef")); // addCreateIdentityConstraintsAction(manager, XSDConstants.KEYREF_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_KEY_REF"), attributes, parent, null); XSDDOMHelper domHelper = new XSDDOMHelper(); Element anonymousType = (Element) domHelper.getChildNode(parent, XSDConstants.COMPLEXTYPE_ELEMENT_TAG); if (anonymousType != null) { manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("ComplexType"))); addMoveAnonymousGlobal(manager, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_MAKE_ANONYMOUS_TYPE_GLOBAL"), attributes, anonymousType, null); attributes = null; } anonymousType = (Element) domHelper.getChildNode(parent, XSDConstants.SIMPLETYPE_ELEMENT_TAG); if (anonymousType != null) { manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("SimpleType"))); addMoveAnonymousGlobal(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_MAKE_ANONYMOUS_TYPE_GLOBAL"), attributes, anonymousType, null); attributes = null; } manager.add(new Separator()); MenuManager setTypeCascadeMenu = new MenuManager("Set Type"); manager.add(setTypeCascadeMenu); SetTypeAction setNewComplexTypeAction = new SetTypeAction("New Complex Type", ImageDescriptor.createFromFile(XSDEditorPlugin.class, "icons/XSDComplexType.gif"), concreteComponent); setNewComplexTypeAction.setTypeKind(XSDConstants.COMPLEXTYPE_ELEMENT); setNewComplexTypeAction.setEnabled(!isReadOnly); setTypeCascadeMenu.add(setNewComplexTypeAction); SetTypeAction setNewSimpleTypeAction = new SetTypeAction("New Simple Type", ImageDescriptor.createFromFile(XSDEditorPlugin.class, "icons/XSDSimpleType.gif"), concreteComponent); setNewSimpleTypeAction.setTypeKind(XSDConstants.SIMPLETYPE_ELEMENT); setNewSimpleTypeAction.setEnabled(!isReadOnly); setTypeCascadeMenu.add(setNewSimpleTypeAction); SetTypeAction setExistingTypeAction = new SetTypeAction("Set Existing Type...", concreteComponent); setExistingTypeAction.setTypeKind(0); setExistingTypeAction.setEnabled(!isReadOnly); setTypeCascadeMenu.add(setExistingTypeAction); manager.add(new Separator()); if (!isGlobalElement) { addMultiplicityMenu(concreteComponent, manager); } } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.SEQUENCE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals(parent, XSDConstants.CHOICE_ELEMENT_TAG, false)) { // XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); addCreateElementAction(manager, XSDConstants.CHOICE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CHOICE"), attributes, parent, null); addCreateElementAction(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SEQUENCE"), attributes, parent, null); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, null); manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ELEMENT_ELEMENT_TAG, "Element", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ELEMENT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ELEMENT"), attributes, parent, null); addCreateElementRefAction(manager, XSDConstants.ELEMENT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ELEMENT_REF"), parent, null); manager.add(new Separator()); attributes = null; addCreateElementAction(manager, XSDConstants.ANY_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ELEMENT"), attributes, parent, null); addMultiplicityMenu(concreteComponent, manager); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ALL_ELEMENT_TAG, false)) { // XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ELEMENT_ELEMENT_TAG, "Element", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ELEMENT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ELEMENT"), attributes, parent, null); addCreateElementRefAction(manager, XSDConstants.ELEMENT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ELEMENT_REF"), parent, null); addMultiplicityMenu(concreteComponent, manager); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, false)) { // boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); boolean anyAttributeExists = elementExists(XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, parent); Node anyAttributeNode = null; manager.add(new Separator()); if (anyAttributeExists) { anyAttributeNode = getFirstChildNodeIfExists(parent, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, anyAttributeNode); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, anyAttributeNode); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, anyAttributeNode); } else { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, parent.getLastChild()); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, parent.getLastChild()); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, parent.getLastChild()); } attributes = null; addCreateElementActionIfNotExist(manager, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ATTRIBUTE"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.NOTATION_ELEMENT_TAG, false)) { // addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.SIMPLETYPE_ELEMENT_TAG, false)) { // addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); boolean restrictionExists = elementExists(XSDConstants.RESTRICTION_ELEMENT_TAG, parent); boolean unionExists = elementExists(XSDConstants.UNION_ELEMENT_TAG, parent); boolean listExists = elementExists(XSDConstants.LIST_ELEMENT_TAG, parent); if (!(restrictionExists || unionExists || listExists)) { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.BASE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementActionIfNotExist(manager, XSDConstants.RESTRICTION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_RESTRICTION"), attributes, parent, null); attributes = null; attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.MEMBERTYPES_ATTRIBUTE, getBuiltInStringQName())); addCreateElementActionIfNotExist(manager, XSDConstants.UNION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_UNION"), attributes, parent, null); attributes = null; attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.ITEMTYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementActionIfNotExist(manager, XSDConstants.LIST_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LIST"), attributes, parent, null); attributes = null; } if (XSDDOMHelper.inputEquals(parent.getParentNode(), XSDConstants.ELEMENT_ELEMENT_TAG, false)) { manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("SimpleType"))); addMoveAnonymousGlobal(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_MAKE_ANONYMOUS_TYPE_GLOBAL"), attributes, parent, null); attributes = null; } } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.GROUP_ELEMENT_TAG, false)) { // addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); addCreateElementActionIfNotExist(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, false)) { // boolean annotationExists = false; boolean contentExists = false; boolean complexOrSimpleContentExists = false; boolean anyAttributeExists = false; Node annotationNode = null; Node contentNode = null; Node anyAttributeNode = null; NodeList children = parent.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); if (child != null && child instanceof Element) { if (XSDDOMHelper.inputEquals((Element) child, XSDConstants.ANNOTATION_ELEMENT_TAG, false)) { annotationNode = child; annotationExists = true; } else if (XSDDOMHelper.inputEquals((Element) child, XSDConstants.SEQUENCE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.ALL_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.CHOICE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.GROUP_ELEMENT_TAG, true) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.SIMPLECONTENT_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, false)) { contentExists = true; contentNode = child; if (XSDDOMHelper.inputEquals((Element) child, XSDConstants.SIMPLECONTENT_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals((Element) child, XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, false)) { complexOrSimpleContentExists = true; } } else if (XSDDOMHelper.inputEquals((Element) child, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false)) { anyAttributeExists = true; anyAttributeNode = child; } } } addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); addSetBaseTypeAction(manager, parent); XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); if (annotationExists) { if (!contentExists) { // Add content model // addCreateElementAction(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), // attributes, parent, annotationNode.getNextSibling()); if (concreteComponent != null) { AddModelGroupAction addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.SEQUENCE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.CHOICE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.ALL_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); } // Temporarily remove this until we provide a graphical rep of these // components // addCreateSimpleContentAction(manager, // XSDConstants.SIMPLECONTENT_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SIMPLE_CONTENT"), // attributes, // parent, annotationNode.getNextSibling()); // addCreateSimpleContentAction(manager, // XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_CONTENT"), // attributes, // parent, annotationNode.getNextSibling()); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, annotationNode.getNextSibling()); attributes = null; } } else { if (!contentExists) { // Add content model // addCreateElementAction(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), // attributes, parent, parent.getFirstChild()); if (concreteComponent != null) { AddModelGroupAction addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.SEQUENCE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.CHOICE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.ALL_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); } // Temporarily remove this until we provide a graphical rep of these // components // addCreateSimpleContentAction(manager, // XSDConstants.SIMPLECONTENT_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SIMPLE_CONTENT"), // attributes, // parent, parent.getFirstChild()); // addCreateSimpleContentAction(manager, // XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_CONTENT"), // attributes, // parent, parent.getFirstChild()); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, parent.getFirstChild()); attributes = null; } } manager.add(new Separator()); if (anyAttributeExists) { if (!complexOrSimpleContentExists) { // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); // attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); // addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, anyAttributeNode); // attributes = null; // // ARE ATTRIBUTE GROUPS ALLOWED ? // // addCreateElementAction(manager, // // XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, // // "_UI_ACTION_ADD_ATTRIBUTE_GROUP", attributes, parent, // // anyAttributeNode); // addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, anyAttributeNode); // addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, anyAttributeNode); } } else { if (!complexOrSimpleContentExists) { // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); // attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); // addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, parent.getLastChild()); // attributes = null; // // ARE ATTRIBUTE GROUPS ALLOWED ? // // addCreateElementAction(manager, // // XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, // // "_UI_ACTION_ADD_ATTRIBUTE_GROUP", attributes, parent, // // parent.getLastChild()); // addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, parent.getLastChild()); // addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, parent.getLastChild()); // attributes = null; // addCreateElementActionIfNotExist(manager, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ATTRIBUTE"), attributes, parent, parent.getLastChild()); } } if (XSDDOMHelper.inputEquals(parent.getParentNode(), XSDConstants.ELEMENT_ELEMENT_TAG, false)) { manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("ComplexType"))); addMoveAnonymousGlobal(manager, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_MAKE_ANONYMOUS_TYPE_GLOBAL"), attributes, parent, null); attributes = null; } } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, false)) { // XSDDOMHelper xsdDOMHelper = new XSDDOMHelper(); Element derivedByNode = xsdDOMHelper.getDerivedByElement(parent); String derivedByName = xsdDOMHelper.getDerivedByName(parent); boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); if (derivedByNode == null) { TypesHelper typesHelper = new TypesHelper(getXSDSchema()); String firstType = ""; List listOfCT = typesHelper.getUserComplexTypeNamesList(); if (listOfCT.size() > 0) { firstType = (String) (listOfCT).get(0); } attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.BASE_ATTRIBUTE, firstType)); addCreateElementActionIfNotExist(manager, XSDConstants.RESTRICTION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_RESTRICTION"), attributes, parent, null); addCreateElementActionIfNotExist(manager, XSDConstants.EXTENSION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_EXTENSION"), attributes, parent, null); } } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.SIMPLECONTENT_ELEMENT_TAG, false)) { // XSDDOMHelper xsdDOMHelper = new XSDDOMHelper(); Element derivedByNode = xsdDOMHelper.getDerivedByElement(parent); String derivedByName = xsdDOMHelper.getDerivedByName(parent); boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); if (derivedByNode == null) { TypesHelper typesHelper = new TypesHelper(getXSDSchema()); String firstType = ""; List listOfCT = typesHelper.getUserComplexTypeNamesList(); if (listOfCT.size() > 0) { firstType = (String) (listOfCT).get(0); } attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.BASE_ATTRIBUTE, firstType)); addCreateElementActionIfNotExist(manager, XSDConstants.RESTRICTION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_RESTRICTION"), attributes, parent, null); addCreateElementActionIfNotExist(manager, XSDConstants.EXTENSION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_EXTENSION"), attributes, parent, null); } /* * for combined SimpleContent and derivedBy nodes (but without * restrictions) XSDDOMHelper xsdDOMHelper = new XSDDOMHelper(); Element * derivedByNode = xsdDOMHelper.getDerivedByElement(parent); String * derivedByName = xsdDOMHelper.getDerivedByName(parent); * * if (derivedByNode != null) { if (derivedByName.equals("restriction")) { * addCreateElementActionIfNotExist(manager, * XSDConstants.SIMPLETYPE_ELEMENT_TAG, "_UI_ACTION_ADD_SIMPLE_TYPE", * attributes, derivedByNode, relativeNode); } * addCreateElementActionIfNotExist(manager, * XSDConstants.ANNOTATION_ELEMENT_TAG, "_UI_ACTION_ADD_ANNOTATION", * attributes, derivedByNode, relativeNode); * addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, * "_UI_ACTION_ADD_ATTRIBUTE", attributes, derivedByNode, relativeNode); * attributes = new ArrayList(); attributes.add(new * DOMAttribute(XSDConstants.REF_ATTRIBUTE, "")); * addCreateElementAction(manager, * XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, * "_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF", attributes, derivedByNode, * relativeNode); attributes = new ArrayList(); * addCreateElementActionIfNotExist(manager, * XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, "_UI_ACTION_ADD_ANY_ATTRIBUTE", * attributes, derivedByNode, relativeNode); } else { TypesHelper * typesHelper = new TypesHelper(getXSDSchema()); String firstType = * (String)(typesHelper.getBuiltInTypeNamesList()).get(0); attributes = * new ArrayList(); attributes.add(new * DOMAttribute(XSDConstants.BASE_ATTRIBUTE, firstType)); * * addCreateElementActionIfNotExist(manager, * XSDConstants.ANNOTATION_ELEMENT_TAG, "_UI_ACTION_ADD_ANNOTATION", * attributes, parent, relativeNode); * addCreateElementActionIfNotExist(manager, * XSDConstants.RESTRICTION_ELEMENT_TAG, "_UI_ACTION_ADD_RESTRICTION", * attributes, parent, relativeNode); * addCreateElementActionIfNotExist(manager, * XSDConstants.EXTENSION_ELEMENT_TAG, "_UI_ACTION_ADD_EXTENSION", * attributes, parent, relativeNode); } */ // addCreateElementActionIfNotExist(manager, // XSDConstants.SEQUENCE_ELEMENT_TAG, // "_UI_ACTION_ADD_CONTENT_MODEL", attributes, parent, relativeNode); // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.REF_ATTRIBUTE, "")); // addCreateElementActionIfNotExist(manager, // XSDConstants.GROUP_ELEMENT_TAG, // "_UI_ADD_GROUP_REF", attributes, parent, relativeNode); // addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, // "_UI_ACTION_ADD_ATTRIBUTE", attributes, parent, relativeNode); // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.REF_ATTRIBUTE, "")); // addCreateElementAction(manager, // XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, // "_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF", attributes, parent, // relativeNode); // addCreateElementActionIfNotExist(manager, // XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, "_UI_ACTION_ADD_ANY_ATTRIBUTE", // attributes, parent, relativeNode); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.RESTRICTION_ELEMENT_TAG, false)) { Element parentNode = (Element) parent.getParentNode(); // // // ... if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.SIMPLECONTENT_ELEMENT_TAG, false)) { boolean annotationExists = false; boolean anyAttributeExists = false; Node anyAttributeNode = null; anyAttributeExists = elementExists(XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, parent); annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent .getFirstChild()); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); //addCreateLocalSimpleTypeActionIfNotExist(manager, // XSDConstants.SIMPLETYPE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), // attributes, parent, annotationNode.getNextSibling()); } else { //addCreateLocalSimpleTypeActionIfNotExist(manager, // XSDConstants.SIMPLETYPE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), // attributes, parent, parent.getFirstChild()); } /* * addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, * "_UI_ACTION_ADD_ATTRIBUTE", attributes, parent, relativeNode); * attributes = new ArrayList(); attributes.add(new * DOMAttribute(XSDConstants.REF_ATTRIBUTE, "")); * addCreateElementAction(manager, * XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, * "_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF", attributes, parent, * relativeNode); attributes = new ArrayList(); * addCreateElementActionIfNotExist(manager, * XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, * "_UI_ACTION_ADD_ANY_ATTRIBUTE", attributes, parent, relativeNode); */ manager.add(new Separator()); if (anyAttributeExists) { anyAttributeNode = getFirstChildNodeIfExists(parent, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, anyAttributeNode); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, anyAttributeNode); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, anyAttributeNode); } else { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, parent.getLastChild()); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, parent.getLastChild()); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, parent.getLastChild()); } attributes = null; addCreateElementActionIfNotExist(manager, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ATTRIBUTE"), attributes, parent, parent.getLastChild()); } // // // ... else if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.SIMPLETYPE_ELEMENT_TAG, false)) { boolean annotationExists = false; attributes = null; annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent .getFirstChild()); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); addCreateLocalSimpleTypeActionIfNotExist(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), attributes, parent, annotationNode .getNextSibling()); } else { addCreateLocalSimpleTypeActionIfNotExist(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), attributes, parent, parent .getFirstChild()); } manager.add(new Separator()); addCreateElementAction(manager, XSDConstants.PATTERN_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_PATTERN"), attributes, parent, null); addCreateElementAction(manager, XSDConstants.ENUMERATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ENUM"), attributes, parent, null); addEnumsAction(manager, XSDConstants.ENUMERATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ENUMS"), attributes, parent, null); } // // // ... else if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, false)) { boolean annotationExists = false; boolean anyAttributeExists = false; Node anyAttributeNode = null; boolean sequenceExists = elementExists(XSDConstants.SEQUENCE_ELEMENT_TAG, parent); boolean choiceExists = elementExists(XSDConstants.CHOICE_ELEMENT_TAG, parent); boolean allExists = elementExists(XSDConstants.ALL_ELEMENT_TAG, parent); boolean groupExists = elementExists(XSDConstants.GROUP_ELEMENT_TAG, parent); anyAttributeExists = elementExists(XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, parent); annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent .getFirstChild()); manager.add(new Separator()); if (annotationExists) { if (!(sequenceExists || choiceExists || allExists || groupExists)) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); addCreateElementActionIfNotExist(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), attributes, parent, annotationNode .getNextSibling()); // addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, // "_UI_ACTION_ADD_GROUP", attributes, parent, // annotationNode.getNextSibling()); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, annotationNode.getNextSibling()); } } else { if (!(sequenceExists || choiceExists || allExists || groupExists)) { addCreateElementActionIfNotExist(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), attributes, parent, parent.getFirstChild()); // addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, // "_UI_ACTION_ADD_GROUP", attributes, parent, // parent.getFirstChild()); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, parent.getFirstChild()); } } manager.add(new Separator()); if (anyAttributeExists) { anyAttributeNode = getFirstChildNodeIfExists(parent, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, anyAttributeNode); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, anyAttributeNode); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, anyAttributeNode); } else { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, parent.getLastChild()); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, parent.getLastChild()); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, parent.getLastChild()); } attributes = null; addCreateElementActionIfNotExist(manager, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ATTRIBUTE"), attributes, parent, parent.getLastChild()); } } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.EXTENSION_ELEMENT_TAG, false)) { // Element parentNode = (Element) parent.getParentNode(); // // // ... if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.SIMPLECONTENT_ELEMENT_TAG, false)) { boolean annotationExists = false; boolean anyAttributeExists = false; Node anyAttributeNode = null; anyAttributeExists = elementExists(XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, parent); annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent .getFirstChild()); manager.add(new Separator()); if (anyAttributeExists) { anyAttributeNode = getFirstChildNodeIfExists(parent, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, anyAttributeNode); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, anyAttributeNode); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, anyAttributeNode); } else { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, parent.getLastChild()); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, parent.getLastChild()); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, parent.getLastChild()); } attributes = null; addCreateElementActionIfNotExist(manager, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ATTRIBUTE"), attributes, parent, parent.getLastChild()); } // // // ... else if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.COMPLEXCONTENT_ELEMENT_TAG, false)) { boolean annotationExists = false; boolean anyAttributeExists = false; Node anyAttributeNode = null; boolean sequenceExists = elementExists(XSDConstants.SEQUENCE_ELEMENT_TAG, parent); boolean choiceExists = elementExists(XSDConstants.CHOICE_ELEMENT_TAG, parent); boolean allExists = elementExists(XSDConstants.ALL_ELEMENT_TAG, parent); boolean groupExists = elementExists(XSDConstants.GROUP_ELEMENT_TAG, parent); anyAttributeExists = elementExists(XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, parent); annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent .getFirstChild()); manager.add(new Separator()); if (annotationExists) { if (!(sequenceExists || choiceExists || allExists || groupExists)) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); addCreateElementActionIfNotExist(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), attributes, parent, annotationNode .getNextSibling()); // addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GROUP"), attributes, // parent, // annotationNode.getNextSibling()); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, annotationNode.getNextSibling()); } } else { if (!(sequenceExists || choiceExists || allExists || groupExists)) { addCreateElementActionIfNotExist(manager, XSDConstants.SEQUENCE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_CONTENT_MODEL"), attributes, parent, parent.getFirstChild()); // addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GROUP"), attributes, // parent, // parent.getFirstChild()); addCreateElementRefAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ADD_GROUP_REF"), parent, parent.getFirstChild()); } } manager.add(new Separator()); if (anyAttributeExists) { anyAttributeNode = getFirstChildNodeIfExists(parent, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, anyAttributeNode); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, anyAttributeNode); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, anyAttributeNode); } else { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewName(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, "Attribute", false))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE"), attributes, parent, parent.getLastChild()); attributes = null; addCreateElementRefAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_REFERENCE"), parent, parent.getLastChild()); addCreateElementRefAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP_REF"), parent, parent.getLastChild()); } attributes = null; addCreateElementActionIfNotExist(manager, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANY_ATTRIBUTE"), attributes, parent, parent.getLastChild()); } } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.REDEFINE_ELEMENT_TAG, false)) { // addCreateElementAction(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, null); addCreateElementAction(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SIMPLE_TYPE"), attributes, parent, null); addCreateElementAction(manager, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_TYPE"), attributes, parent, null); addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GROUP"), attributes, parent, null); addCreateElementAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP"), attributes, parent, null); manager.add(new Separator()); addOpenSchemaAction(manager, XSDEditorPlugin.getXSDString("_UI_ACTION_OPEN_SCHEMA"), parent); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.LIST_ELEMENT_TAG, false)) { // boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); addCreateLocalSimpleTypeActionIfNotExist(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.UNION_ELEMENT_TAG, false)) { // boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); addCreateLocalSimpleTypeAction(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.UNIQUE_ELEMENT_TAG, false)) { // boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.XPATH_ATTRIBUTE, "")); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); addCreateElementActionIfNotExist(manager, XSDConstants.SELECTOR_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SELECTOR"), attributes, parent, annotationNode.getNextSibling()); } else { addCreateElementActionIfNotExist(manager, XSDConstants.SELECTOR_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SELECTOR"), attributes, parent, parent.getFirstChild()); } attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.XPATH_ATTRIBUTE, "")); addCreateElementAction(manager, XSDConstants.FIELD_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_FIELD"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.KEYREF_ELEMENT_TAG, false)) { // boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.XPATH_ATTRIBUTE, "")); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); addCreateElementActionIfNotExist(manager, XSDConstants.SELECTOR_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SELECTOR"), attributes, parent, annotationNode.getNextSibling()); } else { addCreateElementActionIfNotExist(manager, XSDConstants.SELECTOR_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SELECTOR"), attributes, parent, parent.getFirstChild()); } attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.XPATH_ATTRIBUTE, "")); addCreateElementAction(manager, XSDConstants.FIELD_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_FIELD"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.KEY_ELEMENT_TAG, false)) { // boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.XPATH_ATTRIBUTE, "")); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); addCreateElementActionIfNotExist(manager, XSDConstants.SELECTOR_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SELECTOR"), attributes, parent, annotationNode.getNextSibling()); } else { addCreateElementActionIfNotExist(manager, XSDConstants.SELECTOR_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SELECTOR"), attributes, parent, parent.getFirstChild()); } attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.XPATH_ATTRIBUTE, "")); addCreateElementAction(manager, XSDConstants.FIELD_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_FIELD"), attributes, parent, null); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.IMPORT_ELEMENT_TAG, false)) { addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); addOpenSchemaAction(manager, XSDEditorPlugin.getXSDString("_UI_ACTION_OPEN_SCHEMA"), parent); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.SELECTOR_ELEMENT_TAG, false)) { addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.FIELD_ELEMENT_TAG, false)) { addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.INCLUDE_ELEMENT_TAG, false)) { addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); manager.add(new Separator()); addOpenSchemaAction(manager, XSDEditorPlugin.getXSDString("_UI_ACTION_OPEN_SCHEMA"), parent); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ANY_ELEMENT_TAG, false)) { XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); // need to add adapters for the ANY element. I'd rather not provide this menu // and let users see that the graph view doesn't update // addMultiplicityMenu(concreteComponent, manager); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ANYATTRIBUTE_ELEMENT_TAG, false)) { addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, false)) { addCreateElementActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); addCreateLocalSimpleTypeActionIfNotExist(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), attributes, parent, null); } // Facets all have optional annotation nodes else if (XSDDOMHelper.inputEquals(parent, XSDConstants.MINEXCLUSIVE_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.MININCLUSIVE_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.MAXEXCLUSIVE_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.MAXINCLUSIVE_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.TOTALDIGITS_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.FRACTIONDIGITS_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.LENGTH_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.MINLENGTH_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.MAXLENGTH_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ENUMERATION_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.WHITESPACE_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.PATTERN_ELEMENT_TAG, false)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, true)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ATTRIBUTE_ELEMENT_TAG, true)) { addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.ELEMENT_ELEMENT_TAG, true)) { // TODO common this up with the non-ref case // addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); XSDConcreteComponent xsdConcreteComponent = (XSDConcreteComponent)getXSDSchema().getCorrespondingComponent(parent); if (xsdConcreteComponent instanceof XSDElementDeclaration) { XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)xsdConcreteComponent; XSDElementDeclaration resolvedElementDeclaration = xsdElementDeclaration.getResolvedElementDeclaration(); if (resolvedElementDeclaration.getRootContainer() == xsdSchema) { parent = resolvedElementDeclaration.getElement(); Element parentNode = (Element) parent.getParentNode(); boolean isGlobalElement = false; if (XSDDOMHelper.inputEquals(parentNode, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { isGlobalElement = true; } boolean annotationExists = addCreateAnnotationActionIfNotExist(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), attributes, parent, parent.getFirstChild()); boolean simpleTypeExists = elementExists(XSDConstants.SIMPLETYPE_ELEMENT_TAG, parent); boolean complexTypeExists = elementExists(XSDConstants.COMPLEXTYPE_ELEMENT_TAG, parent); manager.add(new Separator()); if (annotationExists) { Node annotationNode = getFirstChildNodeIfExists(parent, XSDConstants.ANNOTATION_ELEMENT_TAG, false); if (!(simpleTypeExists || complexTypeExists) && annotationNode != null) { //addCreateLocalSimpleTypeActionIfNotExist(manager, // XSDConstants.SIMPLETYPE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), // attributes, parent, annotationNode.getNextSibling()); //addCreateLocalComplexTypeActionIfNotExist(manager, // XSDConstants.COMPLEXTYPE_ELEMENT_TAG, "Add Local Complex Type", // attributes, parent, annotationNode.getNextSibling()); manager.add(new Separator()); } } else { // Should still be able to add the content models if the anonymous type // exists, // ie. with attributes // if (!(simpleTypeExists || complexTypeExists)) // { //addCreateLocalSimpleTypeActionIfNotExist(manager, // XSDConstants.SIMPLETYPE_ELEMENT_TAG, // XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), // attributes, parent, parent.getFirstChild()); //addCreateLocalComplexTypeActionIfNotExist(manager, // XSDConstants.COMPLEXTYPE_ELEMENT_TAG, "Add Local Complex Type", // attributes, parent, parent.getFirstChild()); XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); if (concreteComponent != null) { AddModelGroupAction addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.SEQUENCE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.CHOICE_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); addModelGroupAction = new AddModelGroupAction(concreteComponent, XSDCompositor.ALL_LITERAL); addModelGroupAction.setEnabled(!isReadOnly); manager.add(addModelGroupAction); manager.add(new Separator()); } // } } // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, "New_Unique")); // addCreateIdentityConstraintsAction(manager, XSDConstants.UNIQUE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_UNIQUE"), attributes, parent, null); // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, "New_Key")); // addCreateIdentityConstraintsAction(manager, XSDConstants.KEY_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_KEY"), attributes, parent, null); // attributes = new ArrayList(); // attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, "New_KeyRef")); // addCreateIdentityConstraintsAction(manager, XSDConstants.KEYREF_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_KEY_REF"), attributes, parent, null); XSDDOMHelper domHelper = new XSDDOMHelper(); Element anonymousType = (Element) domHelper.getChildNode(parent, XSDConstants.COMPLEXTYPE_ELEMENT_TAG); if (anonymousType != null) { manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("ComplexType"))); addMoveAnonymousGlobal(manager, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_MAKE_ANONYMOUS_TYPE_GLOBAL"), attributes, anonymousType, null); attributes = null; } anonymousType = (Element) domHelper.getChildNode(parent, XSDConstants.SIMPLETYPE_ELEMENT_TAG); if (anonymousType != null) { manager.add(new Separator()); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("SimpleType"))); addMoveAnonymousGlobal(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_MAKE_ANONYMOUS_TYPE_GLOBAL"), attributes, anonymousType, null); attributes = null; } } addMultiplicityMenu(xsdConcreteComponent, manager); } } /* * These have none else if (XSDDOMHelper.inputEquals(parent, * XSDConstants.DOCUMENTATION_ELEMENT_TAG, false)) { } else if * (XSDDOMHelper.inputEquals(parent, XSDConstants.APPINFO_ELEMENT_TAG, * false)) { } */ XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent); if (concreteComponent instanceof XSDNamedComponent) { addRefactorMenuGroup(manager); if (selectionProvider instanceof XSDSelectionManager) { if (sourceContext instanceof AbstractEditPartViewer) { AbstractEditPartViewer viewer = (AbstractEditPartViewer)sourceContext; Object obj = viewer.getSelectedEditParts().get(0); if (obj instanceof GraphicalEditPart) { boolean canEdit = true; if (obj instanceof ElementDeclarationEditPart) { XSDElementDeclaration elem = ((ElementDeclarationEditPart)obj).getXSDElementDeclaration(); if (elem.isElementDeclarationReference()) { canEdit = false; } } else if (obj instanceof ModelGroupDefinitionEditPart) { XSDModelGroupDefinition group = ((ModelGroupDefinitionEditPart)obj).getXSDModelGroupDefinition(); if (group.isModelGroupDefinitionReference()) { canEdit = false; } } else if (obj instanceof ComplexTypeDefinitionEditPart) { XSDComplexTypeDefinition ct = ((ComplexTypeDefinitionEditPart)obj).getXSDComplexTypeDefinition(); if (ct.getName() == null) // anonymous { canEdit = false; } } else if (obj instanceof TopLevelComponentEditPart) { canEdit = true; } else { canEdit = false; } //if (canEdit) { // GraphRenameAction graphRenameAction = new GraphRenameAction((XSDNamedComponent)concreteComponent, (GraphicalEditPart)obj); // manager.add(graphRenameAction); } } } } } } protected void addContextInsertItems(IMenuManager manager, Element parent, Element currentElement, Node relativeNode) { ArrayList attributes = null; if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.INCLUDE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals(currentElement, XSDConstants.IMPORT_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals(currentElement, XSDConstants.REDEFINE_ELEMENT_TAG, false) || XSDDOMHelper.inputEquals(currentElement, XSDConstants.ANNOTATION_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, "")); addCreateElementAction(manager, XSDConstants.INCLUDE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_INCLUDE"), attributes, parent, relativeNode); addCreateElementAction(manager, XSDConstants.IMPORT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_IMPORT"), null, parent, relativeNode); addCreateElementAction(manager, XSDConstants.REDEFINE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_REDEFINE"), attributes, parent, relativeNode); attributes = null; addCreateElementAction(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), null, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.SIMPLETYPE_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } // else if (XSDDOMHelper.inputEquals(parent, // XSDConstants.LIST_ELEMENT_TAG, // false)) // { // addCreateElementAction(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, // "_UI_ACTION_ADD_SIMPLE_TYPE", attributes, parent, relativeNode); // } else if (XSDDOMHelper.inputEquals(parent, XSDConstants.UNION_ELEMENT_TAG, false)) { addCreateLocalSimpleTypeAction(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_LOCAL_SIMPLE_TYPE"), attributes, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.GROUP_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.ELEMENT_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.ATTRIBUTE_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.NOTATION_ELEMENT_TAG, false)) { if (XSDDOMHelper.inputEquals(parent, XSDConstants.SCHEMA_ELEMENT_TAG, false)) { addSchemaElementItems(manager, parent, relativeNode); } } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.DOCUMENTATION_ELEMENT_TAG, false)) { addCreateElementAction(manager, XSDConstants.DOCUMENTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_DOC"), attributes, parent, relativeNode); addCreateElementAction(manager, XSDConstants.APPINFO_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_APP_INFO"), attributes, parent, relativeNode); } else if (XSDDOMHelper.inputEquals(currentElement, XSDConstants.APPINFO_ELEMENT_TAG, false)) { addCreateElementAction(manager, XSDConstants.DOCUMENTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_DOC"), attributes, parent, relativeNode); addCreateElementAction(manager, XSDConstants.APPINFO_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_APP_INFO"), attributes, parent, relativeNode); } } protected String getNewGlobalName(String elementTag, String description) { return getNewGlobalName(elementTag, description, false); } protected String getNewGlobalTypeName(String description) { return getNewGlobalName(null, description, true); } protected String getNewGlobalName(String elementTag, String description, boolean isSimpleOrComplexType) { return getNewName(getXSDSchema().getDocument(), elementTag, description, isSimpleOrComplexType); } // TODO.. .we need to rewrite this code to me model driven... not document driven // protected String getNewName(Node parentNode, String elementTag, String description, boolean isSimpleOrComplexType) { NodeList list = null; NodeList typeList2 = null; // if the global name is for a simple or complex type, we ignore the // elementTag and populate 2 lists // one to look for all simple types and the other to look for all complex // types if (isSimpleOrComplexType) { if (parentNode instanceof Document) { list = ((Document) parentNode).getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, XSDConstants.COMPLEXTYPE_ELEMENT_TAG); typeList2 = ((Document) parentNode).getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, XSDConstants.SIMPLETYPE_ELEMENT_TAG); } else if (parentNode instanceof Element) { list = ((Element) parentNode).getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, XSDConstants.COMPLEXTYPE_ELEMENT_TAG); typeList2 = ((Element) parentNode).getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, XSDConstants.SIMPLETYPE_ELEMENT_TAG); } } else { if (parentNode instanceof Document) { list = ((Document) parentNode).getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, elementTag); } else if (parentNode instanceof Element) { list = ((Element) parentNode).getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, elementTag); } } String name = "New" + description; if (list == null || list.getLength() == 0 && (typeList2 != null && typeList2.getLength() == 0)) { return name; } for (int i = 1; i < 100; i++) { boolean newName = false; for (int j = 0; j < list.getLength(); j++) { String currName = ((Element) list.item(j)).getAttribute(XSDConstants.NAME_ATTRIBUTE); if (currName == null || currName.length() == 0) { continue; } if (currName.equals(name)) { name = "New" + description + String.valueOf(i); newName = true; break; } } // if there is another type list and we haven't created a new name, then // check the type list if (typeList2 != null && !newName) { for (int j = 0; j < typeList2.getLength(); j++) { String currName = ((Element) typeList2.item(j)).getAttribute(XSDConstants.NAME_ATTRIBUTE); if (currName == null || currName.length() == 0) { continue; } if (currName.equals(name)) { name = "New" + description + String.valueOf(i); break; } } } } return name; } protected String getFirstGlobalElementTagName(String elementTag) { //XMLModel model = getXMLModel(); //if (model != null) { String targetNamespace = ""; XSDSchema schema = getXSDSchema(); TypesHelper helper = new TypesHelper(schema); String prefix = ""; if (schema != null) { prefix = helper.getPrefix(schema.getTargetNamespace(), true); } // get the schema node NodeList slist = schema.getDocument().getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, XSDConstants.SCHEMA_ELEMENT_TAG); Node schemaNode = null; if (slist != null && slist.getLength() > 0) { schemaNode = slist.item(0); } NodeList list = null; // get the schema's direct children - hence, globals if (schemaNode != null) { list = schemaNode.getChildNodes(); } String name = null; if (list != null) { // Performance issue perhaps? for (int i = 0; i < list.getLength(); i++) { if (list.item(i) instanceof Element) { if (list.item(i).getLocalName().equals(elementTag)) { name = ((Element) list.item(i)).getAttribute(XSDConstants.NAME_ATTRIBUTE); if (name != null && name.length() > 0) { return prefix + name; } } } } } if (elementTag.equals(XSDConstants.ELEMENT_ELEMENT_TAG)) { return helper.getGlobalElement(schema); } else if (elementTag.equals(XSDConstants.ATTRIBUTE_ELEMENT_TAG)) { return helper.getGlobalAttribute(schema); } else if (elementTag.equals(XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG)) { return helper.getGlobalAttributeGroup(schema); } else if (elementTag.equals(XSDConstants.GROUP_ELEMENT_TAG)) { return helper.getModelGroup(schema); } } return null; } protected void addSchemaElementItems(IMenuManager manager, Element parent, Node relativeNode) { ArrayList attributes = null; // Add Edit Namespaces menu action //////////////// Externalize String below!!!!! XSDEditNamespacesAction nsAction = new XSDEditNamespacesAction(XSDEditorPlugin.getXSDString("_UI_ACTION_EDIT_NAMESPACES"), parent, relativeNode, getXSDSchema()); manager.add(nsAction); manager.add(new Separator()); DOMAttribute nameAttribute = new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("ComplexType")); attributes = new ArrayList(); attributes.add(nameAttribute); Action action = addCreateElementAction(manager, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_TYPE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalTypeName("SimpleType"))); action = addCreateElementAction(manager, XSDConstants.SIMPLETYPE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_SIMPLE_TYPE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.ELEMENT_ELEMENT_TAG, "GlobalElement"))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); action = addCreateElementAction(manager, XSDConstants.ELEMENT_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GLOBAL_ELEMENT"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.ATTRIBUTE_ELEMENT_TAG, "GlobalAttribute"))); attributes.add(new DOMAttribute(XSDConstants.TYPE_ATTRIBUTE, getBuiltInStringQName())); action = addCreateElementAction(manager, XSDConstants.ATTRIBUTE_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GLOBAL_ATTRIBUTE"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, "AttributeGroup"))); action = addCreateElementAction(manager, XSDConstants.ATTRIBUTEGROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ATTRIBUTE_GROUP"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.GROUP_ELEMENT_TAG, "Group"))); CreateGroupAction groupAction = addCreateGroupAction(manager, XSDConstants.GROUP_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_GROUP"), attributes, parent, relativeNode); groupAction.setIsGlobal(true); attributes = new ArrayList(); attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, getNewGlobalName(XSDConstants.NOTATION_ELEMENT_TAG, "Notation"))); attributes.add(new DOMAttribute(XSDConstants.PUBLIC_ATTRIBUTE, "")); action = addCreateElementAction(manager, XSDConstants.NOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_NOTATION"), attributes, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); action = addCreateElementAction(manager, XSDConstants.ANNOTATION_ELEMENT_TAG, XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_ANNOTATION"), null, parent, relativeNode); ((CreateElementAction) action).setIsGlobal(true); } // returns whether element exists already protected boolean addCreateElementActionIfNotExist(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { // if // (!(parent.getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, // elementTag).getLength() > 0)) // XSDDOMHelper helper = new XSDDOMHelper(); // if (helper.getChildNode(parent, elementTag) == null) if (getFirstChildNodeIfExists(parent, elementTag, false) == null) { addCreateElementAction(manager, elementTag, label, attributes, parent, relativeNode); return false; } return true; } protected Action addCreateElementAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateElementAction action = new CreateElementAction(label); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setXSDSchema(getXSDSchema()); action.setSelectionProvider(selectionProvider); action.setEnabled(!isReadOnly); action.setSourceContext(sourceContext); manager.add(action); return action; } protected void addCreateElementAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode, boolean isEnabled) { Action action = addCreateElementAction(manager, elementTag, label, attributes, parent, relativeNode); action.setEnabled(isEnabled); } protected void addCreateElementRefAction(IMenuManager manager, String elementTag, String label, Element parent, Node relativeNode) { ArrayList attributes = new ArrayList(); String ref = getFirstGlobalElementTagName(elementTag); attributes.add(new DOMAttribute(XSDConstants.REF_ATTRIBUTE, ref)); Action action = addCreateElementAction(manager, elementTag, label, attributes, parent, relativeNode); action.setEnabled(ref != null && !isReadOnly); } protected void addCreateSimpleContentAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { // if // (!(parent.getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, // elementTag).getLength() > 0)) if (getFirstChildNodeIfExists(parent, elementTag, false) == null) { CreateSimpleContentAction action = new CreateSimpleContentAction(label, getXSDSchema()); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setEnabled(!isReadOnly); manager.add(action); } } protected CreateGroupAction addCreateGroupAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateGroupAction action = new CreateGroupAction(label, getXSDSchema()); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setXSDSchema(getXSDSchema()); action.setSelectionProvider(selectionProvider); action.setEnabled(!isReadOnly); action.setSourceContext(sourceContext); manager.add(action); return action; } protected void addCreateIdentityConstraintsAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateIdentityConstraintsAction action = new CreateIdentityConstraintsAction(label, getXSDSchema()); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setXSDSchema(getXSDSchema()); action.setSelectionProvider(selectionProvider); action.setEnabled(!isReadOnly); manager.add(action); } protected void addEnumsAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { AddEnumsAction action = new AddEnumsAction(label); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setDescription(XSDEditorPlugin.getXSDString("_UI_ENUMERATIONS_DIALOG_TITLE")); action.setEnabled(!isReadOnly); manager.add(action); } protected Action addCreateSimpleTypeAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateSimpleTypeAction action = new CreateSimpleTypeAction(label); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setXSDSchema(getXSDSchema()); action.setSelectionProvider(selectionProvider); action.setEnabled(!isReadOnly); action.setSourceContext(sourceContext); manager.add(action); return action; } protected boolean addCreateLocalSimpleTypeActionIfNotExist(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { // if // (!(parent.getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, // elementTag).getLength() > 0)) // XSDDOMHelper helper = new XSDDOMHelper(); // if (helper.getChildNode(parent, elementTag) == null) if (getFirstChildNodeIfExists(parent, elementTag, false) == null) { addCreateLocalSimpleTypeAction(manager, elementTag, label, attributes, parent, relativeNode); return false; } return true; } protected void addSetBaseTypeAction(IMenuManager manager, Element element) { SetBaseTypeAction action = new SetBaseTypeAction(XSDEditorPlugin.getXSDString("_UI_ACTION_SET_BASE_TYPE"));// + // "..."); action.setComplexTypeElement(element); action.setXSDSchema(getXSDSchema()); action.setEnabled(!isReadOnly); manager.add(action); } protected void addCreateLocalSimpleTypeAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateLocalSimpleTypeAction action = new CreateLocalSimpleTypeAction(label); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setXSDSchema(getXSDSchema()); action.setSelectionProvider(selectionProvider); action.setEnabled(!isReadOnly); manager.add(action); } protected boolean addCreateLocalComplexTypeActionIfNotExist(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { if (getFirstChildNodeIfExists(parent, elementTag, false) == null) { addCreateLocalComplexTypeAction(manager, elementTag, label, attributes, parent, relativeNode); return false; } return true; } protected void addCreateLocalComplexTypeAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateLocalComplexTypeAction action = new CreateLocalComplexTypeAction(label); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setXSDSchema(getXSDSchema()); action.setSelectionProvider(selectionProvider); action.setEnabled(!isReadOnly); manager.add(action); } protected boolean addCreateAnnotationActionIfNotExist(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { // if // (!(parent.getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, // elementTag).getLength() > 0)) // XSDDOMHelper helper = new XSDDOMHelper(); // if (helper.getChildNode(parent, elementTag) == null) // CS... I comment the // //if (getFirstChildNodeIfExists(parent, elementTag, false) == null) //{ // addCreateAnnotationAction(manager,elementTag,label,attributes,parent,relativeNode); // return false; //} //return true; return false; } protected void addOpenSchemaAction(IMenuManager manager, String label, Element parent) { OpenSchemaAction openAction = new OpenSchemaAction(label, getXSDSchema().getCorrespondingComponent(parent)); manager.add(openAction); } protected void addMoveAnonymousGlobal(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { // MakeAnonymousGlobal action = new MakeAnonymousGlobal(label, parent, getXSDSchema()); // action.setElementTag(elementTag); // action.setAttributes(attributes); // action.setParentNode(getXSDSchema().getElement()); // action.setRelativeNode(relativeNode); // action.setEnabled(!isReadOnly); // //manager.add(action); // addRefactorMenuGroup(manager); // fRefactorMenuGroup.addAction(action); } protected void addRefactorMenuGroup(IMenuManager manager){ fRefactorMenuGroup = new RefactorActionGroup(selectionProvider, getXSDSchema()); ActionContext context= new ActionContext(selectionProvider.getSelection()); fRefactorMenuGroup.setContext(context); fRefactorMenuGroup.fillContextMenu(manager); fRefactorMenuGroup.setContext(null); } protected void addCreateAnnotationAction(IMenuManager manager, String elementTag, String label, List attributes, Element parent, Node relativeNode) { CreateAnnotationAction action = new CreateAnnotationAction(label); action.setElementTag(elementTag); action.setAttributes(attributes); action.setParentNode(parent); action.setRelativeNode(relativeNode); action.setEnabled(!isReadOnly); manager.add(action); } protected Node getFirstChildNodeIfExists(Node parent, String elementTag, boolean isRef) { if (parent == null) return null; NodeList children = parent.getChildNodes(); Node targetNode = null; for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); if (child != null && child instanceof Element) { if (XSDDOMHelper.inputEquals((Element) child, elementTag, isRef)) { targetNode = child; break; } } } return targetNode; } protected boolean elementExists(String elementTag, Element parent) { if (!(parent.getElementsByTagNameNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, elementTag).getLength() > 0)) { return false; } return true; } /** * Returns the deleteAction. * * @return DeleteAction */ public DeleteAction getDeleteAction() { return deleteAction; } protected void addMultiplicityMenu(XSDConcreteComponent concreteComponent, IMenuManager manager) { SetMultiplicityAction oneMultiplicity = new SetMultiplicityAction(concreteComponent, "1"); oneMultiplicity.setMaxOccurs(1); oneMultiplicity.setMinOccurs(1); oneMultiplicity.setEnabled(!isReadOnly); SetMultiplicityAction zeroOrMoreMultiplicity = new SetMultiplicityAction(concreteComponent, "0..* (Zero or More)"); zeroOrMoreMultiplicity.setMaxOccurs(-1); zeroOrMoreMultiplicity.setMinOccurs(0); zeroOrMoreMultiplicity.setEnabled(!isReadOnly); SetMultiplicityAction zeroOrOneMultiplicity = new SetMultiplicityAction(concreteComponent, "0..1 (Zero or One)"); zeroOrOneMultiplicity.setMaxOccurs(1); zeroOrOneMultiplicity.setMinOccurs(0); zeroOrOneMultiplicity.setEnabled(!isReadOnly); SetMultiplicityAction oneOrMoreMultiplicity = new SetMultiplicityAction(concreteComponent, "1..* (One or More)"); oneOrMoreMultiplicity.setMaxOccurs(-1); oneOrMoreMultiplicity.setMinOccurs(1); oneOrMoreMultiplicity.setEnabled(!isReadOnly); MenuManager multiplicityMenu = new MenuManager("Set Multiplicity"); manager.add(multiplicityMenu); multiplicityMenu.add(oneMultiplicity); multiplicityMenu.add(zeroOrOneMultiplicity); multiplicityMenu.add(zeroOrMoreMultiplicity); multiplicityMenu.add(oneOrMoreMultiplicity); } }