| package org.eclipse.wst.xsd.ui.internal.commands; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IFileEditorInput; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin; |
| import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionDialog; |
| import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider; |
| import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDSetTypeHelper; |
| import org.eclipse.xsd.XSDCompositor; |
| import org.eclipse.xsd.XSDConcreteComponent; |
| import org.eclipse.xsd.XSDElementDeclaration; |
| import org.eclipse.xsd.XSDSchema; |
| import org.eclipse.xsd.XSDSimpleTypeDefinition; |
| import org.eclipse.xsd.util.XSDConstants; |
| |
| public class SetTypeCommand extends AbstractCommand |
| { |
| protected int typeKind = XSDConstants.COMPLEXTYPE_ELEMENT; |
| |
| public SetTypeCommand(XSDConcreteComponent parent) |
| { |
| super(parent); |
| } |
| |
| public void setTypeKind(int type) |
| { |
| this.typeKind = type; |
| } |
| |
| public void run() |
| { |
| XSDConcreteComponent parent = getParent(); |
| if (parent instanceof XSDElementDeclaration) |
| { |
| XSDElementDeclaration element = (XSDElementDeclaration)parent; |
| XSDSchema schema = element.getSchema(); |
| if (typeKind == XSDConstants.COMPLEXTYPE_ELEMENT) |
| { |
| AddComplexTypeDefinitionCommand ctCommand = new AddComplexTypeDefinitionCommand(element, null); |
| // ctCommand.run(); |
| AddModelGroupCommand sequenceCommand = new AddModelGroupCommand(element, XSDCompositor.SEQUENCE_LITERAL); |
| sequenceCommand.run(); |
| } |
| else if (typeKind == XSDConstants.SIMPLETYPE_ELEMENT) |
| { |
| AddSimpleTypeDefinitionCommand stCommand = new AddSimpleTypeDefinitionCommand(element, null); |
| stCommand.run(); |
| XSDSimpleTypeDefinition st = (XSDSimpleTypeDefinition)stCommand.getModelObject(); |
| XSDSimpleTypeDefinition base = schema.resolveSimpleTypeDefinition(schema.getSchemaForSchemaNamespace(), "string"); |
| st.setBaseTypeDefinition(base); |
| } |
| else |
| { |
| Shell shell = Display.getCurrent().getActiveShell(); |
| IFile currentIFile = ((IFileEditorInput)getActiveEditor().getEditorInput()).getFile(); |
| |
| XSDComponentSelectionProvider provider = new XSDComponentSelectionProvider(currentIFile, schema); |
| XSDComponentSelectionDialog dialog = new XSDComponentSelectionDialog(shell, XSDEditorPlugin.getXSDString("_UI_LABEL_SET_TYPE"), provider); |
| provider.setDialog(dialog); |
| |
| dialog.setBlockOnOpen(true); |
| dialog.create(); |
| |
| if (dialog.open() == Window.OK) { |
| XSDSetTypeHelper helper = new XSDSetTypeHelper(currentIFile, schema); |
| helper.setType(element.getElement(), "type", dialog.getSelection()); |
| } |
| } |
| formatChild(element.getElement()); |
| } |
| |
| } |
| |
| private IEditorPart getActiveEditor() |
| { |
| IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench(); |
| IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); |
| IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor(); |
| // IEditorPart editorPart = part.getSite().getWorkbenchWindow().getActivePage().getActiveEditor(); |
| |
| return editorPart; |
| } |
| |
| protected boolean adopt(XSDConcreteComponent model) |
| { |
| return false; |
| } |
| |
| } |