fixed copy/paste of multiple projects
diff --git a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/wsdl/MakeResolvableCommand.java b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/wsdl/MakeResolvableCommand.java
index 38b6c5c..e9225ad 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/wsdl/MakeResolvableCommand.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/wsdl/MakeResolvableCommand.java
@@ -19,9 +19,6 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.xsd.XSDElementDeclaration;
-import org.eclipse.xsd.XSDNamedComponent;
-
import org.eclipse.wst.sse.sieditor.command.common.AbstractWSDLNotificationOperation;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.CopyTypeCommand;
import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
@@ -34,6 +31,8 @@
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.UnresolvedType;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDNamedComponent;
public class MakeResolvableCommand extends AbstractWSDLNotificationOperation {
@@ -73,8 +72,7 @@
if (null != oldType) {
resolvedType = oldType;
} else {
- final CopyTypeCommand command = new CopyTypeCommand(getModelRoot(), description, eType, schema, type
- .getName());
+ final CopyTypeCommand command = new CopyTypeCommand(getModelRoot(), description, eType, schema);
IStatus status = getModelRoot().getEnv().execute(command);
if (!StatusUtils.canContinue(status)) {
return status;
diff --git a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyElementCommand.java b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyElementCommand.java
index 1449634..68d009c 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyElementCommand.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyElementCommand.java
@@ -22,6 +22,19 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.sse.sieditor.command.common.AbstractXSDNotificationOperation;
+import org.eclipse.wst.sse.sieditor.model.Activator;
+import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
+import org.eclipse.wst.sse.sieditor.model.api.IXSDModelRoot;
+import org.eclipse.wst.sse.sieditor.model.i18n.Messages;
+import org.eclipse.wst.sse.sieditor.model.impl.XSDFactory;
+import org.eclipse.wst.sse.sieditor.model.utils.StatusUtils;
+import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement;
+import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
+import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
+import org.eclipse.wst.sse.sieditor.model.xsd.impl.Element;
+import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema;
+import org.eclipse.wst.sse.sieditor.model.xsd.impl.StructureType;
import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDAttributeUse;
import org.eclipse.xsd.XSDComplexTypeContent;
@@ -36,21 +49,6 @@
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.eclipse.xsd.XSDTypeDefinition;
-import org.eclipse.wst.sse.sieditor.command.common.AbstractXSDNotificationOperation;
-import org.eclipse.wst.sse.sieditor.model.Activator;
-import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
-import org.eclipse.wst.sse.sieditor.model.api.IXSDModelRoot;
-import org.eclipse.wst.sse.sieditor.model.i18n.Messages;
-import org.eclipse.wst.sse.sieditor.model.impl.XSDFactory;
-import org.eclipse.wst.sse.sieditor.model.utils.StatusUtils;
-import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement;
-import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
-import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
-import org.eclipse.wst.sse.sieditor.model.xsd.impl.AbstractXSDComponent;
-import org.eclipse.wst.sse.sieditor.model.xsd.impl.Element;
-import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema;
-import org.eclipse.wst.sse.sieditor.model.xsd.impl.StructureType;
-
/**
* Command for copying a local ElementDeclaration or an AttributeDeclaration
*
@@ -85,8 +83,8 @@
final EnsureElementAnonymousTypeCommand command = new EnsureElementAnonymousTypeCommand(getModelRoot(), element);
IStatus status = getModelRoot().getEnv().execute(command);
- if(!StatusUtils.canContinue(status)) {
- return status;
+ if (!StatusUtils.canContinue(status)) {
+ return status;
}
type = command.getAnonymousType();
} else {
@@ -142,15 +140,15 @@
IXSDModelRoot xsdModelRoot = XSDFactory.getInstance().createXSDModelRoot(type.getSchema());
_copiedElement = new Element(xsdModelRoot, copiedComponent, modelGroup, structureType, schema);
-
- IModelObject modelObject = ((IXSDModelRoot) getModelRoot()).getSchema();
-
+
+ IModelObject modelObject = ((IXSDModelRoot) getModelRoot()).getSchema();
+
final CopyTypeCommand command = new CopyTypeCommand(getModelRoot(), modelObject,
(XSDNamedComponent) (component instanceof XSDParticle ? ((XSDParticle) component).getContent() : component),
- _targetSchema, _element.getName());
+ _targetSchema);
command.updateReferences(namedComponent);
IStatus status = getModelRoot().getEnv().execute(command);
- if (!StatusUtils.canContinue(status)) {
+ if (!StatusUtils.canContinue(status)) {
return status;
}
diff --git a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyTypeCommand.java b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyTypeCommand.java
index bee314c..14c785e 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyTypeCommand.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/command/emf/xsd/CopyTypeCommand.java
@@ -17,13 +17,14 @@
import java.net.URI;
import java.net.URISyntaxException;
-import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.Assert;
@@ -38,7 +39,6 @@
import org.eclipse.wst.sse.sieditor.core.common.CollectionTypeUtils;
import org.eclipse.wst.sse.sieditor.core.common.Condition;
import org.eclipse.wst.sse.sieditor.core.common.Logger;
-import org.eclipse.wst.sse.sieditor.model.Activator;
import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
import org.eclipse.wst.sse.sieditor.model.api.IModelRoot;
import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
@@ -60,6 +60,7 @@
import org.eclipse.xsd.XSDAttributeUse;
import org.eclipse.xsd.XSDComplexTypeContent;
import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDConcreteComponent;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDForm;
@@ -79,33 +80,38 @@
public class CopyTypeCommand extends AbstractNotificationOperation {
- private final XSDNamedComponent sourceType;
+ private XSDNamedComponent typeForCopyThatIsUnderAnalysis;
private AbstractType clone;
private final IModelObject parent;
private Map<String, XSDSchema> schemasUsed;
private final ISchema targetSchema;
- private final String name;
+ private List<XSDNamedComponent> objectsToBeCopied;
+ private Set<XSDConcreteComponent> copiedComponents;
// List of all the components copied to targetschema
private final HashSet<XSDNamedComponent> inconsistentClones = new HashSet<XSDNamedComponent>();
private XSDNamedComponent clonedComponent;
- private IStatus executionStatus;
-
private static final String XMLNS_PREFIX_BASE = "imp"; //$NON-NLS-1$
- public CopyTypeCommand(final IModelRoot root, final IModelObject modelObject, final XSDNamedComponent typeToBeCopied,
- final ISchema targetSchema, final String name) {
+ public CopyTypeCommand(final IModelRoot root, final IModelObject modelObject, final List<XSDNamedComponent> typesToBeCopied,
+ final ISchema targetSchema) {
super(root, modelObject, Messages.CopyTypeCommand_copy_type_comand_label);
- this.sourceType = typeToBeCopied;
this.parent = modelObject;
this.targetSchema = targetSchema;
- this.name = name;
+ this.objectsToBeCopied = typesToBeCopied;
+ this.copiedComponents = new HashSet<XSDConcreteComponent>();
+ }
+
+ public CopyTypeCommand(final IModelRoot root, final IModelObject modelObject, final XSDNamedComponent typeToBeCopied,
+ final ISchema targetSchema) {
+ this(root, modelObject, Arrays.asList(new XSDNamedComponent[] { typeToBeCopied }), targetSchema);
}
@Override
public boolean canExecute() {
- return null != getModelRoot() && null != parent && null != sourceType && sourceType.eResource() != null;
+ return null != getModelRoot() && null != parent && !objectsToBeCopied.isEmpty()
+ && objectsToBeCopied.get(0).eResource() != null;
}
@SuppressWarnings("unchecked")
@@ -140,63 +146,57 @@
if (debug)
Logger.getDebugTrace().traceEntry(""); //$NON-NLS-1$
- executionStatus = Status.OK_STATUS;
schemasUsed = new HashMap<String, XSDSchema>();
- final XSDNamedComponent component = sourceType;
- final boolean isGlobal = isGlobal(component);
+ for (XSDNamedComponent component : objectsToBeCopied) {
+ this.typeForCopyThatIsUnderAnalysis = component;
+ final boolean isGlobal = isGlobal(component);
- final XSDSchema schema = isGlobal ? null : targetSchema.getComponent();
+ final XSDSchema schema = isGlobal ? null : targetSchema.getComponent();
- // source in visit methods can be null only when call is from this
- // method
- if (component instanceof XSDElementDeclaration) {
+ // source in visit methods can be null only when call is from this
+ // method
+ String componenetName = component.getName();
+ if (component instanceof XSDElementDeclaration) {
+ if (debug)
+ Logger.getDebugTrace().trace("", "Begin copy Element " + componenetName); //$NON-NLS-1$ //$NON-NLS-2$
+ visitElementDeclaration((XSDElementDeclaration) component, schema);
+ if (debug)
+ Logger.getDebugTrace().trace("", "End copy Element " + componenetName); //$NON-NLS-1$ //$NON-NLS-2$
+ } else if (component instanceof XSDTypeDefinition) {
+ if (debug)
+ Logger.getDebugTrace().trace("", "Begin copy Type " + componenetName); //$NON-NLS-1$ //$NON-NLS-2$
+ visitTypeDefinition((XSDTypeDefinition) component, schema);
+ if (debug)
+ Logger.getDebugTrace().trace("", "End copy Type " + componenetName); //$NON-NLS-1$ //$NON-NLS-2$
+ } else if (component instanceof XSDAttributeDeclaration) {
+ if (debug)
+ Logger.getDebugTrace().trace("", "Begin copy Attribute " + componenetName); //$NON-NLS-1$ //$NON-NLS-2$
+ visitAttributeDeclaration((XSDAttributeDeclaration) component, schema);
+ if (debug)
+ Logger.getDebugTrace().trace("", "End copy Attribute " + componenetName); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ // update all the references to the target schema components
if (debug)
- Logger.getDebugTrace().trace("", "Begin copy Element " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
- visitElementDeclaration((XSDElementDeclaration) component, schema);
+ Logger.getDebugTrace().trace("", "Update references"); //$NON-NLS-1$ //$NON-NLS-2$
+ updateComponents();
+
if (debug)
- Logger.getDebugTrace().trace("", "End copy Element " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
- } else if (component instanceof XSDTypeDefinition) {
- if (debug)
- Logger.getDebugTrace().trace("", "Begin copy Type " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
- visitTypeDefinition((XSDTypeDefinition) component, schema);
- if (debug)
- Logger.getDebugTrace().trace("", "End copy Type " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
- } else if (component instanceof XSDAttributeDeclaration) {
- if (debug)
- Logger.getDebugTrace().trace("", "Begin copy Attribute " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
- visitAttributeDeclaration((XSDAttributeDeclaration) component, schema);
- if (debug)
- Logger.getDebugTrace().trace("", "End copy Attribute " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
+ Logger.getDebugTrace().trace("", "Refresh Schemas"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (getModelRoot() instanceof IWsdlModelRoot) {
+ final Description description = (Description) ((IWsdlModelRoot) getModelRoot()).getDescription();
+ description.refreshSchemas();
+ }
+
+ if (isGlobal && clonedComponent != null) {
+ if (debug)
+ Logger.getDebugTrace().trace("", "Get the copied Type"); //$NON-NLS-1$ //$NON-NLS-2$
+ clone = (AbstractType) targetSchema.getType(clonedComponent instanceof XSDElementDeclaration,
+ clonedComponent.getName());
+ }
}
- // update all the references to the target schema components
- if (debug)
- Logger.getDebugTrace().trace("", "Update references"); //$NON-NLS-1$ //$NON-NLS-2$
- updateComponents();
-
- if (debug)
- Logger.getDebugTrace().trace("", "Refresh Schemas"); //$NON-NLS-1$ //$NON-NLS-2$
- if (getModelRoot() instanceof IWsdlModelRoot) {
- final Description description = (Description) ((IWsdlModelRoot) getModelRoot()).getDescription();
- description.refreshSchemas();
- }
-
- if (isGlobal && clonedComponent != null) {
- if (debug)
- Logger.getDebugTrace().trace("", "Get the copied Type"); //$NON-NLS-1$ //$NON-NLS-2$
- clone = (AbstractType) targetSchema.getType(clonedComponent instanceof XSDElementDeclaration,
- clonedComponent.getName());
- }
-
- if (debug)
- Logger.getDebugTrace().traceExit(""); //$NON-NLS-1$
-
- if (executionStatus.isOK() && null == clone && isGlobal) {
- executionStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, MessageFormat.format(
- Messages.CopyTypeCommand_msg_can_not_copy_type_X, sourceType.getName()));
- }
-
- return executionStatus;
+ return Status.OK_STATUS;
}
private boolean isGlobal(final XSDNamedComponent component) {
@@ -520,6 +520,7 @@
// check if element already exists
final boolean copyToTarget = isTargetSchemaComponent(simpleType);
final XSDSimpleTypeDefinition match = contains(simpleType, XSDSimpleTypeDefinition.class, copyToTarget);
+
if (null != match) {
// return if source is null
if (!(null == source || (copyToTarget && source.equals(targetSchema.getComponent())))) {
@@ -683,8 +684,10 @@
* @return
*/
private XSDSchema createClone(final XSDNamedComponent component, final boolean copyToTarget) {
- final XSDSchema schema;
- schema = copyToTarget ? targetSchema.getComponent() : ensureSchema(component.getTargetNamespace());
+ final XSDSchema schema = copyToTarget ? targetSchema.getComponent() : ensureSchema(component.getTargetNamespace());
+ if (copiedComponents.contains(component)) {
+ return schema;
+ }
final XSDNamedComponent clone = EmfXsdUtils.cloneWithAnnotation(component, schema);
@@ -694,12 +697,13 @@
inconsistentClones.add(clone);
// Set new name to the cloned component if its a source component
- if (copyToTarget && component == sourceType) {
+ if (copyToTarget && component == objectsToBeCopied.get(0)) {
Assert.isTrue(null == clonedComponent);
clonedComponent = clone;
- (clone).setName(name);
}
_recentClone = clone;
+ copiedComponents.add(component);
+
return schema;
}
@@ -738,13 +742,6 @@
private <T extends XSDNamedComponent> T contains(final XSDSchema schema, final XSDNamedComponent component,
final Collection<String> locations, final Class<T> metaClass, final boolean copyToTarget) {
String name = component.getName();
- // After copy the component name will be @field(_name) and not the old
- // name
- // handle this special case case.
- if (copyToTarget && (null != sourceType.getName() && sourceType.getName().equals(name))
- && metaClass.isInstance(sourceType)) {
- name = name;
- }
final EList<XSDSchemaContent> contents = schema.getContents();
final ArrayList<XSDInclude> includes = new ArrayList<XSDInclude>();
@@ -924,7 +921,7 @@
boolean copy = true;
final XSDSchema schema = component.getSchema();
Assert.isTrue(null != schema, "Components schema is null"); //$NON-NLS-1$
- final XSDSchema sourceSchema = sourceType.getSchema();
+ final XSDSchema sourceSchema = typeForCopyThatIsUnderAnalysis.getSchema();
Assert.isTrue(null != schema, "Source schema is null"); //$NON-NLS-1$
copy = schema.getSchemaLocation().equals(sourceSchema.getSchemaLocation());
copy &= (null == component.getTargetNamespace() && null == sourceSchema.getTargetNamespace())
@@ -1114,7 +1111,7 @@
return null;
final String name = component.getName();
final String namespace = component.getTargetNamespace();
- if (null != namespace && namespace.equals(sourceType.getSchema().getTargetNamespace())) {
+ if (null != namespace && namespace.equals(typeForCopyThatIsUnderAnalysis.getSchema().getTargetNamespace())) {
final XSDSchema schema = targetSchema.getComponent();
for (final XSDSchemaContent content : schema.getContents()) {
if (componentType.isInstance(content) && name.equals(((XSDNamedComponent) content).getName())) {
diff --git a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/write/xsd/api/ISchema.java b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/write/xsd/api/ISchema.java
index 5c2a3f6..bb0ed63 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/write/xsd/api/ISchema.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/write/xsd/api/ISchema.java
@@ -16,7 +16,6 @@
package org.eclipse.wst.sse.sieditor.model.write.xsd.api;
import org.eclipse.core.commands.ExecutionException;
-
import org.eclipse.wst.sse.sieditor.model.generic.DuplicateException;
import org.eclipse.wst.sse.sieditor.model.generic.IllegalInputException;
import org.eclipse.wst.sse.sieditor.model.write.api.INamespacedObject;
@@ -32,12 +31,11 @@
ISimpleType addSimpleType(String name) throws DuplicateException, IllegalInputException, ExecutionException;
- IStructureType addStructureType(String name, boolean element) throws DuplicateException, IllegalInputException, ExecutionException;
+ IStructureType addStructureType(String name, boolean element) throws DuplicateException, IllegalInputException,
+ ExecutionException;
void removeType(IType type) throws ExecutionException;
- IType copyType(IType type, String newName) throws DuplicateException, ExecutionException;
-
IType createGlobalTypeFromAnonymous(org.eclipse.wst.sse.sieditor.model.xsd.api.IElement element, String newName)
throws DuplicateException, ExecutionException;
diff --git a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/wsdl/impl/Description.java b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/wsdl/impl/Description.java
index c9d8f3c..a1a4f24 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/wsdl/impl/Description.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/wsdl/impl/Description.java
@@ -364,7 +364,7 @@
if (null != oldType)
return oldType;
- final CopyTypeCommand command = new CopyTypeCommand(getModelRoot(), this, eType, schema, type.getName());
+ final CopyTypeCommand command = new CopyTypeCommand(getModelRoot(), this, eType, schema);
getModelRoot().getEnv().execute(command);
return command.getCopiedType();
diff --git a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/xsd/impl/Schema.java b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/xsd/impl/Schema.java
index 120e701..11a2864 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/xsd/impl/Schema.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.model/api/org/eclipse/wst/sse/sieditor/model/xsd/impl/Schema.java
@@ -31,25 +31,8 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.wst.wsdl.Definition;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDElementDeclaration;
-import org.eclipse.xsd.XSDImport;
-import org.eclipse.xsd.XSDInclude;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDRedefine;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSchemaContent;
-import org.eclipse.xsd.XSDSchemaDirective;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.eclipse.xsd.impl.XSDImportImpl;
-import org.eclipse.xsd.util.XSDConstants;
-import org.w3c.dom.Element;
-
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddSimpleTypeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddStructureTypeCommand;
-import org.eclipse.wst.sse.sieditor.command.emf.xsd.CopyTypeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.CreateGlobalTypeFromAnonymousCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.ImportSchemaCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.RemoveTypeCommand;
@@ -78,6 +61,21 @@
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
+import org.eclipse.wst.wsdl.Definition;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDImport;
+import org.eclipse.xsd.XSDInclude;
+import org.eclipse.xsd.XSDNamedComponent;
+import org.eclipse.xsd.XSDRedefine;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSchemaContent;
+import org.eclipse.xsd.XSDSchemaDirective;
+import org.eclipse.xsd.XSDSimpleTypeDefinition;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.eclipse.xsd.impl.XSDImportImpl;
+import org.eclipse.xsd.util.XSDConstants;
+import org.w3c.dom.Element;
/**
* Wrapper for {@link XSDSchema} for providing simplified API
@@ -316,8 +314,8 @@
for (final XSDSchemaDirective importObj : imports) {
if (importObj instanceof XSDImport) {
if (null != _resolver) {
- schemas.addAll(_resolver.resolveSchema(((XSDImport) importObj).getNamespace(), importObj
- .getSchemaLocation()));
+ schemas.addAll(_resolver.resolveSchema(((XSDImport) importObj).getNamespace(),
+ importObj.getSchemaLocation()));
}
}
}
@@ -406,26 +404,6 @@
return addStructureType(name, element, null);
}
- public IType copyType(final IType type, final String newName) throws DuplicateException, ExecutionException {
- Nil.checkNil(newName, "newName"); //$NON-NLS-1$
- Nil.checkNil(type, "type"); //$NON-NLS-1$
-
- if (type instanceof AbstractType && null != type.getName()) {
- final XSDNamedComponent component = type.getComponent();
-
- final IType[] resolvedTypes = getAllTypes(newName);
- if (resolvedTypes != null) {
- throw new DuplicateException("Type with name '" + newName + "' already exists"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- final CopyTypeCommand command = new CopyTypeCommand(getModelRoot(), this, component, this, newName);
- getModelRoot().getEnv().execute(command);
- return command.getCopiedType();
- }
-
- return null;
- }
-
public static IType getDefaultSimpleType() {
return Schema.getSchemaForSchema().getType(false, DEFAULT_SIMPLE_BASETYPE);
}
diff --git a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/commands/xsd/CopyTypeCommandTest.java b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/commands/xsd/CopyTypeCommandTest.java
index f1841f2..148980a 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/commands/xsd/CopyTypeCommandTest.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/commands/xsd/CopyTypeCommandTest.java
@@ -15,7 +15,6 @@
package org.eclipse.wst.sse.sieditor.test.model.commands.xsd;
import org.eclipse.core.runtime.IStatus;
-
import org.eclipse.wst.sse.sieditor.command.common.AbstractNotificationOperation;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.CopyTypeCommand;
import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
@@ -24,7 +23,9 @@
import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema;
import org.eclipse.wst.sse.sieditor.test.model.commands.AbstractCommandTest;
+@SuppressWarnings("nls")
public class CopyTypeCommandTest extends AbstractCommandTest {
+
@Override
protected String getWsdlFilename() {
return "ECC_IMAPPROPRIATIONREQREJRC.wsdl";
@@ -44,12 +45,12 @@
@Override
protected void assertPostRedoState(final IStatus redoStatus, final IWsdlModelRoot modelRoot) {
- assertTrue(targetSchema.getType(false, "MyTypeCopy") instanceof IStructureType);
+ assertTrue(targetSchema.getType(false, "AppropriationRequestID") instanceof IStructureType);
}
@Override
protected void assertPostUndoState(final IStatus undoStatus, final IWsdlModelRoot modelRoot) {
- assertNull(targetSchema.getType(false, "MyTypeCopy"));
+ assertNull(targetSchema.getType(false, "AppropriationRequestID"));
}
@Override
@@ -60,10 +61,9 @@
schemas = modelRoot.getDescription().getSchema(TARGET_TARGET_NAMESPACE);
targetSchema = (Schema) schemas[0];
-
+
assertNull(targetSchema.getType(false, "MyTypeCopy"));
- return new CopyTypeCommand(targetSchema.getModelRoot(), targetSchema, typeToCopy.getComponent(), targetSchema,
- "MyTypeCopy");
+ return new CopyTypeCommand(targetSchema.getModelRoot(), targetSchema, typeToCopy.getComponent(), targetSchema);
}
}
diff --git a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/xsd/XSDModelRootTest.java b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/xsd/XSDModelRootTest.java
index d44c082..1e452de 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/xsd/XSDModelRootTest.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/model/xsd/XSDModelRootTest.java
@@ -25,12 +25,6 @@
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.common.util.EList;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.junit.Assert;
-import org.junit.Test;
-
import org.eclipse.wst.sse.sieditor.command.emf.xsd.CopyTypeCommand;
import org.eclipse.wst.sse.sieditor.model.api.IChangeListener;
import org.eclipse.wst.sse.sieditor.model.api.IModelChangeEvent;
@@ -44,6 +38,11 @@
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema;
+import org.eclipse.xsd.XSDNamedComponent;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.junit.Assert;
+import org.junit.Test;
public class XSDModelRootTest extends XSDBaseProjectTest {
@@ -66,26 +65,13 @@
XSDNamedComponent typeToBeCopied = typeDefinitions.get(0);
int typesNumber = schema.getAllContainedTypes().size();
- CopyTypeCommand copyCommand = new CopyTypeCommand(xsdModelRoot, schema, typeToBeCopied, (Schema) schema, "HelloName");
+ CopyTypeCommand copyCommand = new CopyTypeCommand(xsdModelRoot, schema, typeToBeCopied, (Schema) schema);
xsdModelRoot.getEnv().execute(copyCommand);
assertEquals(typesNumber + 1, schema.getAllContainedTypes().size());
}
@Test
- public void testSchemaCopyTypeCommand() throws IOException, CoreException, ExecutionException, DuplicateException {
- IXSDModelRoot xsdModelRoot = getXSDModelRoot("pub/xsd/example.xsd", "example.xsd");
- ISchema schema = xsdModelRoot.getSchema();
- IType type = schema.getAllContainedTypes().iterator().next();
- int typesNumber = schema.getAllContainedTypes().size();
-
- assertNotNull(((Schema) schema).copyType(type, "HelloName"));
-
- assertEquals(typesNumber + 1, schema.getAllContainedTypes().size());
-
- }
-
- @Test
public void testGetExistingISchemaFromAdaptable() throws IOException, CoreException {
IXSDModelRoot xsdModelRoot = getXSDModelRoot("pub/xsd/example.xsd", "example.xsd");
XSDSchema xsdSchema = xsdModelRoot.getSchema().getComponent();
@@ -127,7 +113,7 @@
assertEquals(1, targetSchema.length);
CopyTypeCommand copyCommand = new CopyTypeCommand(targetSchema[0].getModelRoot(), wsdlModelRoot.getDescription(),
- sourceType.getComponent(), targetSchema[0], sourceType.getName());
+ sourceType.getComponent(), targetSchema[0]);
IStatus status = wsdlModelRoot.getEnv().execute(copyCommand);
assertTrue(status.toString(), status.isOK());
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DataTypesFormPageController.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DataTypesFormPageController.java
index 408d2f4..557272d 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DataTypesFormPageController.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DataTypesFormPageController.java
@@ -1535,15 +1535,7 @@
}
public void handleCopyTypeAction(final Object[] selectedTreeNodes) {
- List<IModelObject> modelObjectsToBeCopied = new ArrayList<IModelObject>();
- for (Object object : selectedTreeNodes) {
- if (object instanceof IDataTypesTreeNode) {
- IDataTypesTreeNode datatypesTreeNode = (IDataTypesTreeNode) object;
- modelObjectsToBeCopied.add(datatypesTreeNode.getModelObject());
- }
- }
-
- ClipboardService.copyModelObjectsToClipboard(modelObjectsToBeCopied.toArray());
+ ClipboardService.copyModelObjectsToClipboard(selectedTreeNodes);
}
public void handlePasteTypeAction(final ITreeNode selectedTreeNode) {
@@ -1585,19 +1577,22 @@
private void copyTypeAndSelectItOnTree(ISchema targetSchema, Object[] sourceModelObjects) {
IType copiedType = null;
+ List<XSDNamedComponent> xsdComponentsForCopy = new ArrayList<XSDNamedComponent>();
for (Object object : sourceModelObjects) {
+
if (object instanceof INamedObject) {
INamedObject sourceModelObject = (INamedObject) object;
- final CopyTypeCommand copyCommand = new CopyTypeCommand(model, targetSchema,
- (XSDNamedComponent) sourceModelObject.getComponent(), targetSchema, sourceModelObject.getName());
-
- IStatus status = executeCommand(copyCommand);
- copiedType = copyCommand.getCopiedType();
- getDialogManager().showStatusDialog(Messages.DataTypesFormPageController_1, status);
+ xsdComponentsForCopy.add((XSDNamedComponent) sourceModelObject.getComponent());
}
}
+ final CopyTypeCommand copyCommand = new CopyTypeCommand(model, targetSchema, xsdComponentsForCopy, targetSchema);
+
+ IStatus status = executeCommand(copyCommand);
+ copiedType = copyCommand.getCopiedType();
+ getDialogManager().showStatusDialog(Messages.DataTypesFormPageController_1, status);
+
if (copiedType != null) {
fireTreeNodeSelectionEvent(copiedType);
}
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/ClipboardService.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/ClipboardService.java
index 6c2bd97..0c26362 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/ClipboardService.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/ClipboardService.java
@@ -31,21 +31,22 @@
public class ClipboardService {
private static final String ERROR_ON_DOM_TRANSFORMATION = "Cannot get text resentation of model object. Paste of clipboard content as text will not be possible"; //$NON-NLS-1$
- public static void copyModelObjectsToClipboard(Object[] objects) {
+ public static void copyModelObjectsToClipboard(Object[] selectedObjects) {
Clipboard clipboard = new Clipboard(Display.getCurrent());
- List<IModelObject> modelObjectsToCopy = new ArrayList<IModelObject>();
String modelObjectAsText = ""; //$NON-NLS-1$
- for (Object object : objects) {
- if (object instanceof IModelObject) {
- IModelObject modelObject = (IModelObject) object;
+ List<IModelObject> modelObjectsToBeCopied = new ArrayList<IModelObject>();
+ for (Object object : selectedObjects) {
+ if (object instanceof IDataTypesTreeNode) {
+ IDataTypesTreeNode datatypesTreeNode = (IDataTypesTreeNode) object;
+ IModelObject modelObject = datatypesTreeNode.getModelObject();
+ modelObjectsToBeCopied.add(modelObject);
modelObjectAsText += getModelObjectAsText(modelObject);
- modelObjectsToCopy.add(modelObject);
}
}
- clipboard.setContents(new Object[] { modelObjectsToCopy.toArray(), modelObjectAsText },
- new Transfer[] { SiEditorTransfer.getInstance(), TextTransfer.getInstance() });
+ clipboard.setContents(new Object[] { modelObjectsToBeCopied.toArray(), modelObjectAsText }, new Transfer[] {
+ SiEditorTransfer.getInstance(), TextTransfer.getInstance() });
}
private static String getModelObjectAsText(IModelObject modelObject) {
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/handlers/CopyHandler.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/handlers/CopyHandler.java
index aafdf3e..8ef98f5 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/handlers/CopyHandler.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/clipboard/handlers/CopyHandler.java
@@ -1,5 +1,8 @@
package org.eclipse.wst.sse.sieditor.ui.v2.dt.clipboard.handlers;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
@@ -11,12 +14,13 @@
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.wst.sse.sieditor.ui.i18n.Messages;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.clipboard.ClipboardService;
+import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
public class CopyHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
- TreeItem[] selectedTreeNodes = getSelectedTreeNode();
+ ITreeNode[] selectedTreeNodes = getSelectedTreeNode();
if (!ClipboardService.isCopyEnabled(selectedTreeNodes)) {
showNotPosibleDialog();
@@ -28,14 +32,23 @@
return null;
}
- private TreeItem[] getSelectedTreeNode() {
+ private ITreeNode[] getSelectedTreeNode() {
Control focusControl = Display.getCurrent().getFocusControl();
if (!(focusControl instanceof Tree)) {
return null;
}
+ List<ITreeNode> result = new ArrayList<ITreeNode>();
+
Tree tree = (Tree) focusControl;
- return tree.getSelection();
+ for (TreeItem treeItem : tree.getSelection()) {
+ Object data = treeItem.getData();
+ if (data instanceof ITreeNode) {
+ result.add((ITreeNode) data);
+ }
+ }
+
+ return result.toArray(new ITreeNode[0]);
}
private void showNotPosibleDialog() {