copy/paste of the same type in the same resource is possible, copy/paste of multiple model objects is possible
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 1f6b6c1..bee314c 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
@@ -77,39 +77,35 @@
 import org.eclipse.xsd.XSDTypeDefinition;
 import org.eclipse.xsd.util.XSDConstants;
 
-/**
- * 
- * 
- */
 public class CopyTypeCommand extends AbstractNotificationOperation {
 
-    private final XSDNamedComponent _sourceType;
-    private AbstractType _clone;
-    private final IModelObject _parent;
-    private Map<String, XSDSchema> _schemasUsed;
-    private final ISchema _targetSchema;
-    private final String _name;
+    private final XSDNamedComponent sourceType;
+    private AbstractType clone;
+    private final IModelObject parent;
+    private Map<String, XSDSchema> schemasUsed;
+    private final ISchema targetSchema;
+    private final String name;
 
     // List of all the components copied to targetschema
-    private final HashSet<XSDNamedComponent> _inconsistentClones = new HashSet<XSDNamedComponent>();
-    private XSDNamedComponent _clonedComponent;
+    private final HashSet<XSDNamedComponent> inconsistentClones = new HashSet<XSDNamedComponent>();
+    private XSDNamedComponent clonedComponent;
 
-    private IStatus _executionStatus;
+    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) {
         super(root, modelObject, Messages.CopyTypeCommand_copy_type_comand_label);
-        this._sourceType = typeToBeCopied;
-        this._parent = modelObject;
-        this._targetSchema = targetSchema;
-        this._name = name;
+        this.sourceType = typeToBeCopied;
+        this.parent = modelObject;
+        this.targetSchema = targetSchema;
+        this.name = name;
     }
 
     @Override
     public boolean canExecute() {
-        return null != getModelRoot() && null != _parent && null != _sourceType && _sourceType.eResource() != null;
+        return null != getModelRoot() && null != parent && null != sourceType && sourceType.eResource() != null;
     }
 
     @SuppressWarnings("unchecked")
@@ -144,33 +140,33 @@
         if (debug)
             Logger.getDebugTrace().traceEntry(""); //$NON-NLS-1$
 
-        _executionStatus = Status.OK_STATUS;
-        _schemasUsed = new HashMap<String, XSDSchema>();
-        final XSDNamedComponent component = _sourceType;
+        executionStatus = Status.OK_STATUS;
+        schemasUsed = new HashMap<String, XSDSchema>();
+        final XSDNamedComponent component = sourceType;
         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) {
             if (debug)
-                Logger.getDebugTrace().trace("", "Begin copy Element " + _sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
+                Logger.getDebugTrace().trace("", "Begin copy Element " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
             visitElementDeclaration((XSDElementDeclaration) component, schema);
             if (debug)
-                Logger.getDebugTrace().trace("", "End copy Element " + _sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
+                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$
+                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$
+                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$
+                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("", "End copy Attribute " + sourceType.getName()); //$NON-NLS-1$ //$NON-NLS-2$
         }
 
         // update all the references to the target schema components
@@ -185,22 +181,22 @@
             description.refreshSchemas();
         }
 
-        if (isGlobal && _clonedComponent != null) {
+        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());
+            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()));
+        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 executionStatus;
     }
 
     private boolean isGlobal(final XSDNamedComponent component) {
@@ -228,7 +224,7 @@
             Logger.getDebugTrace().traceEntry(""); //$NON-NLS-1$
         if (debug)
             Logger.getDebugTrace().traceExit(""); //$NON-NLS-1$
-        return _clone;
+        return clone;
     }
 
     private boolean visitAttributeGroup(final XSDAttributeGroupDefinition attributeGroup, final XSDSchema source) {
@@ -254,11 +250,11 @@
                 if (debug)
                     Logger.getDebugTrace().trace("", "component already exists"); //$NON-NLS-1$ //$NON-NLS-2$				
                 // return if source is null
-                if (null == source || (copyToTarget && source.equals(_targetSchema.getComponent()))) {
+                if (null == source || (copyToTarget && source.equals(targetSchema.getComponent()))) {
                     return needsUpdate;
                 } else {
                     // ensure import and return, no need to transverse type here
-                    ensureImport(source, copyToTarget ? _targetSchema.getNamespace() : attributeGroup.getTargetNamespace(), null);
+                    ensureImport(source, copyToTarget ? targetSchema.getNamespace() : attributeGroup.getTargetNamespace(), null);
                     return needsUpdate;
                 }
             } else {
@@ -285,7 +281,7 @@
             }
         } else {
             if (visitAttributeGroupContent(attributeGroup.getContents(), copiedTo))
-                _inconsistentClones.add(clone);
+                inconsistentClones.add(clone);
         }
 
         if (debug)
@@ -304,11 +300,11 @@
             final XSDAttributeDeclaration match = contains(attribute, XSDAttributeDeclaration.class, copyToTarget);
             if (null != match) {
                 // return if source is null
-                if (null == source || (copyToTarget && source.equals(_targetSchema.getComponent()))) {
+                if (null == source || (copyToTarget && source.equals(targetSchema.getComponent()))) {
                     return needsUpdate;
                 } else {
                     // ensure import and return, no need to transverse type here
-                    ensureImport(source, copyToTarget ? _targetSchema.getNamespace() : attribute.getTargetNamespace(), null);
+                    ensureImport(source, copyToTarget ? targetSchema.getNamespace() : attribute.getTargetNamespace(), null);
                     return needsUpdate;
                 }
             } else {
@@ -337,7 +333,7 @@
             // itself
             if ((!(null == typeDefinition || isSynthetic(typeDefinition))) && isTargetSchemaComponent(typeDefinition)) {
                 if (attribute.isGlobal()) {
-                    _inconsistentClones.add(clone);
+                    inconsistentClones.add(clone);
                     refersTargetComp = true;
                 } else
                     needsUpdate = true;
@@ -353,7 +349,7 @@
             // itself
             if (refersTargetComp && null != attribute.getAnonymousTypeDefinition()) {
                 if (attribute.isGlobal()) {
-                    _inconsistentClones.add(clone);
+                    inconsistentClones.add(clone);
                 } else
                     needsUpdate = true;
             }
@@ -384,16 +380,14 @@
             final XSDElementDeclaration match = contains(element, XSDElementDeclaration.class, copyToTarget);
             if (null != match) {
                 // return if source is null
-                if (null == source || (copyToTarget && source.equals(_targetSchema.getComponent()))) {
-                    return needsUpdate;
-                } else {
+                if (!(null == source || (copyToTarget && source.equals(targetSchema.getComponent())))) {
                     // ensure import and return, no need to transverse type here
-                    ensureImport(source, copyToTarget ? _targetSchema.getNamespace() : element.getTargetNamespace(), null);
-                    return needsUpdate;
+                    ensureImport(source, copyToTarget ? targetSchema.getNamespace() : element.getTargetNamespace(), null);
                 }
             } else {
-                if ((!copyToTarget) && ensureImport(source, element.getTargetNamespace(), element))
-                    return needsUpdate;
+                if (!copyToTarget) {
+                    ensureImport(source, element.getTargetNamespace(), element);
+                }
             }
             // copy and create reference in source
             copiedTo = createClone(element, copyToTarget);
@@ -418,7 +412,7 @@
             // element to add itself
             if ((!(null == typeDefinition || isSynthetic(typeDefinition))) && isTargetSchemaComponent(typeDefinition)) {
                 if (element.isGlobal()) {
-                    _inconsistentClones.add(clone);
+                    inconsistentClones.add(clone);
                     refersTargetComp = true;
                 } else
                     needsUpdate = true;
@@ -434,7 +428,7 @@
             // itself
             if (refersTargetComp && null != element.getAnonymousTypeDefinition()) {
                 if (element.isGlobal()) {
-                    _inconsistentClones.add(clone);
+                    inconsistentClones.add(clone);
                 } else
                     needsUpdate = true;
             }
@@ -464,11 +458,11 @@
             final XSDModelGroupDefinition match = contains(modelGroupDefinition, XSDModelGroupDefinition.class, copyToTarget);
             if (null != match) {
                 // return if source is null
-                if (null == source || (copyToTarget && source.equals(_targetSchema.getComponent()))) {
+                if (null == source || (copyToTarget && source.equals(targetSchema.getComponent()))) {
                     return needsUpdate;
                 } else {
                     // ensure import and return, no need to transverse type here
-                    ensureImport(source, copyToTarget ? _targetSchema.getNamespace() : modelGroupDefinition.getTargetNamespace(),
+                    ensureImport(source, copyToTarget ? targetSchema.getNamespace() : modelGroupDefinition.getTargetNamespace(),
                             null);
                     return needsUpdate;
                 }
@@ -496,7 +490,7 @@
         } else {
             final XSDModelGroup content = modelGroupDefinition.getModelGroup();
             if (null != content && visitModelGroup(content, copiedTo))
-                _inconsistentClones.add(clone);
+                inconsistentClones.add(clone);
         }
         return needsUpdate;
     }
@@ -528,16 +522,13 @@
             final XSDSimpleTypeDefinition match = contains(simpleType, XSDSimpleTypeDefinition.class, copyToTarget);
             if (null != match) {
                 // return if source is null
-                if (null == source || (copyToTarget && source.equals(_targetSchema.getComponent()))) {
-                    return needsUpdate;
-                } else {
-                    // ensure import and return, no need to transverse type here
-                    ensureImport(source, copyToTarget ? _targetSchema.getNamespace() : simpleType.getTargetNamespace(), null);
-                    return needsUpdate;
+                if (!(null == source || (copyToTarget && source.equals(targetSchema.getComponent())))) {
+                    ensureImport(source, copyToTarget ? targetSchema.getNamespace() : simpleType.getTargetNamespace(), null);
                 }
             } else {
-                if ((!copyToTarget) && ensureImport(source, simpleType.getTargetNamespace(), simpleType))
-                    return needsUpdate;
+                if (!copyToTarget) {
+                    ensureImport(source, simpleType.getTargetNamespace(), simpleType);
+                }
             }
             // copy and create reference in source
             copiedTo = createClone(simpleType, copyToTarget);
@@ -565,7 +556,7 @@
                 final boolean refersTargetComp = visitTypeDefinition(type, copiedTo);
                 final boolean isTargetComp = null == type.getName() ? false : isTargetSchemaComponent(type);
                 if (globalType && (isTargetComp || refersTargetComp)) {
-                    _inconsistentClones.add(clone);
+                    inconsistentClones.add(clone);
                 } else if (!globalType && (isTargetComp || refersTargetComp)) {
                     needsUpdate = true;
                 }
@@ -589,16 +580,14 @@
             final XSDComplexTypeDefinition match = contains(complexType, XSDComplexTypeDefinition.class, copyToTarget);
             if (null != match) {
                 // return if source is null
-                if (null == source || (copyToTarget && source.equals(_targetSchema.getComponent()))) {
-                    return needsUpdate;
-                } else {
+                if (!(null == source || (copyToTarget && source.equals(targetSchema.getComponent())))) {
                     // ensure import and return, no need to transverse type here
-                    ensureImport(source, copyToTarget ? _targetSchema.getNamespace() : complexType.getTargetNamespace(), null);
-                    return needsUpdate;
+                    ensureImport(source, copyToTarget ? targetSchema.getNamespace() : complexType.getTargetNamespace(), null);
                 }
             } else {
-                if ((!copyToTarget) && ensureImport(source, complexType.getTargetNamespace(), complexType))
-                    return needsUpdate;
+                if (!copyToTarget) {
+                    ensureImport(source, complexType.getTargetNamespace(), complexType);
+                }
             }
             // copy and create reference in source
             copiedTo = createClone(complexType, copyToTarget);
@@ -635,7 +624,7 @@
         refersTargetComp |= visitAttributeGroupContent(attributeContents, copiedTo);
 
         if (globalType && (isTargetComp || refersTargetComp)) {
-            _inconsistentClones.add(clone);
+            inconsistentClones.add(clone);
         } else if (!globalType && (isTargetComp || refersTargetComp)) {
             needsUpdate = true;
         }
@@ -695,20 +684,20 @@
      */
     private XSDSchema createClone(final XSDNamedComponent component, final boolean copyToTarget) {
         final XSDSchema schema;
-        schema = copyToTarget ? _targetSchema.getComponent() : ensureSchema(component.getTargetNamespace());
+        schema = copyToTarget ? targetSchema.getComponent() : ensureSchema(component.getTargetNamespace());
 
         final XSDNamedComponent clone = EmfXsdUtils.cloneWithAnnotation(component, schema);
 
-        clone.setTargetNamespace(copyToTarget ? _targetSchema.getNamespace() : component.getTargetNamespace());
+        clone.setTargetNamespace(copyToTarget ? targetSchema.getNamespace() : component.getTargetNamespace());
 
         if (copyToTarget)
-            _inconsistentClones.add(clone);
+            inconsistentClones.add(clone);
 
         // Set new name to the cloned component if its a source component
-        if (copyToTarget && component == _sourceType) {
-            Assert.isTrue(null == _clonedComponent);
-            _clonedComponent = clone;
-            (clone).setName(_name);
+        if (copyToTarget && component == sourceType) {
+            Assert.isTrue(null == clonedComponent);
+            clonedComponent = clone;
+            (clone).setName(name);
         }
         _recentClone = clone;
         return schema;
@@ -721,7 +710,7 @@
         final Collection<XSDSchema> schemas;
         if (copyToTarget) {
             schemas = new ArrayList<XSDSchema>(1);
-            schemas.add(_targetSchema.getComponent());
+            schemas.add(targetSchema.getComponent());
         } else {
             // Get schemas with same namespace
             schemas = CollectionTypeUtils.findAll(getInlineSchemas(), new Condition<XSDSchema>() {
@@ -752,9 +741,9 @@
         // 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;
+        if (copyToTarget && (null != sourceType.getName() && sourceType.getName().equals(name))
+                && metaClass.isInstance(sourceType)) {
+            name = name;
         }
 
         final EList<XSDSchemaContent> contents = schema.getContents();
@@ -841,8 +830,8 @@
                 directive.setSchemaLocation(schemaRelativePath);
 
                 XSDSchema resolvedSchema = directive.getResolvedSchema();
-                if (resolvedSchema == null && _parent instanceof Description) {
-                    final List<Schema> resolvedSchemas = ((Description) _parent).getSchemaResolver().resolveSchema(nameSpace,
+                if (resolvedSchema == null && this.parent instanceof Description) {
+                    final List<Schema> resolvedSchemas = ((Description) this.parent).getSchemaResolver().resolveSchema(nameSpace,
                             null);
                     if (!resolvedSchemas.isEmpty()) {
                         resolvedSchema = resolvedSchemas.get(0).getComponent();
@@ -874,7 +863,7 @@
 
     @SuppressWarnings("unchecked")
     private XSDSchema ensureSchema(final String namespace) {
-        XSDSchema schema = _schemasUsed.get(namespace);
+        XSDSchema schema = schemasUsed.get(namespace);
 
         if (null == schema) {
             final Collection<XSDSchema> schemas = CollectionTypeUtils.findAll(getInlineSchemas(), new Condition<XSDSchema>() {
@@ -926,7 +915,7 @@
                 definition.addNamespace(wsdlXmlnsPrefix, namespace);
             }
 
-            _schemasUsed.put(namespace, schema);
+            schemasUsed.put(namespace, schema);
         }
         return schema;
     }
@@ -935,7 +924,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 = sourceType.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())
@@ -963,7 +952,7 @@
 
     private void updateComponents() {
         // DOIT fix cyclic reference for name change
-        for (final XSDNamedComponent component : _inconsistentClones) {
+        for (final XSDNamedComponent component : inconsistentClones) {
             if (component instanceof XSDTypeDefinition)
                 updateComponent((XSDTypeDefinition) component);
             else if (component instanceof XSDElementDeclaration)
@@ -1125,8 +1114,8 @@
             return null;
         final String name = component.getName();
         final String namespace = component.getTargetNamespace();
-        if (null != namespace && namespace.equals(_sourceType.getSchema().getTargetNamespace())) {
-            final XSDSchema schema = _targetSchema.getComponent();
+        if (null != namespace && namespace.equals(sourceType.getSchema().getTargetNamespace())) {
+            final XSDSchema schema = targetSchema.getComponent();
             for (final XSDSchemaContent content : schema.getContents()) {
                 if (componentType.isInstance(content) && name.equals(((XSDNamedComponent) content).getName())) {
                     return (T) content;
@@ -1137,7 +1126,7 @@
     }
 
     public void updateReferences(final XSDNamedComponent component) {
-        _inconsistentClones.add(component);
+        inconsistentClones.add(component);
     }
 
     @Override
diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/Messages.java b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/Messages.java
index 6d6577d..3874506 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/Messages.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/Messages.java
@@ -14,6 +14,7 @@
 
 public class Messages extends NLS {
     private static final String BUNDLE_NAME = "org.eclipse.wst.sse.sieditor.search.i18n.messages"; //$NON-NLS-1$
+    public static String AbstractSearchQueryOperation_pregressMonitorMessagePrefix;
     public static String AllCategoriesXsdDestination_DisplayName;
     public static String AllInterfacesDestination_Name;
     public static String CopyAction_Label;
diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/messages.properties b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/messages.properties
index c99d70e..2a94a4a 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/messages.properties
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/i18n/messages.properties
@@ -8,6 +8,7 @@
 # Contributors:

 #     Georgi Konstantinov - initial API and implementation.

 ###############################################################################

+AbstractSearchQueryOperation_pregressMonitorMessagePrefix=Searching in 

 AllCategoriesXsdDestination_DisplayName=All Categories
 AllInterfacesDestination_Name=All Interfaces

 CopyAction_Label=Copy

diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java
index 2f3a088..ae56048 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java
@@ -32,6 +32,7 @@
 import org.eclipse.wst.sse.sieditor.core.common.Logger;
 import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
 import org.eclipse.wst.sse.sieditor.model.impl.WSDLFactory;
+import org.eclipse.wst.sse.sieditor.search.i18n.Messages;
 import org.eclipse.wst.sse.sieditor.search.ui.tree.FileNode;
 import org.eclipse.wst.sse.sieditor.search.ui.tree.NamespaceNode;
 import org.eclipse.wst.sse.sieditor.search.ui.tree.RootTreeNode;
@@ -55,7 +56,7 @@
     @Override
     public ITreeNode run(IProgressMonitor progressMonitor) throws LongOpCanceledException, CoreException {
         Set<IFile> files = getFilesFromWorkspace();
-        progressMonitor.beginTask("", files.size());
+        progressMonitor.beginTask("", files.size()); //$NON-NLS-1$
         return getRootTreeNode(files, progressMonitor);
     }
 
@@ -67,7 +68,7 @@
                 progressMonitor.done();
                 return rootTreeNode;
             }
-            progressMonitor.subTask("Searching in " + file.getName());
+            progressMonitor.subTask(Messages.AbstractSearchQueryOperation_pregressMonitorMessagePrefix + file.getName());
             progressMonitor.worked(1);
 
             FileNode fileNode = new FileNode(file, rootTreeNode, isXsdFileExtension(file.getFileExtension()));
diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/ui/actions/CopyAction.java b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/ui/actions/CopyAction.java
index 9f3e0e0..2c35568 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/ui/actions/CopyAction.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/ui/actions/CopyAction.java
@@ -10,35 +10,36 @@
  *******************************************************************************/
 package org.eclipse.wst.sse.sieditor.search.ui.actions;
 
+import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.sse.sieditor.search.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 CopyAction extends AbstractActiveOnSingleSelectionAction {
+public class CopyAction extends Action {
+
+    private ISelection selection;
 
     public CopyAction(ISelection selection) {
-        super(selection);
+        this.selection = selection;
     }
 
     @Override
     public void run() {
-        final Object firstElementFromSelection = getStructuredSelectionFirstElement();
-
-        IModelObject modelObject = ((ITreeNode) firstElementFromSelection).getModelObject();
-
-        ClipboardService.copyModelObjectToClipboard(modelObject);
+        ClipboardService.copyModelObjectsToClipboard(((IStructuredSelection) selection).toArray());
     }
 
     @Override
     public boolean isEnabled() {
+        if (!(selection instanceof IStructuredSelection)) {
+            return false;
+        }
+
         if (!super.isEnabled()) {
             return false;
         }
 
-        Object firstElement = getStructuredSelectionFirstElement();
-        return ClipboardService.isCopyEnabled(firstElement);
+        return ClipboardService.isCopyEnabled(((IStructuredSelection) selection).toArray());
     }
 
     @Override
diff --git a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerJUnitTest.java b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerJUnitTest.java
index 719fb55..33f0cb0 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerJUnitTest.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerJUnitTest.java
@@ -1848,8 +1848,8 @@
 

         final DataTypesFormPageController controller = new DataTypesFormPageController(modelRoot, true);

 

-        assertTrue(controller.isCopyEnabled(selectedNode));

-        assertFalse(controller.isCopyEnabled(null));

+        assertTrue(controller.isCopyEnabled(new Object[] { selectedNode }));

+        assertFalse(controller.isCopyEnabled(new Object[] { null }));

 

     }

 

diff --git a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerPlugInTest.java b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerPlugInTest.java
index 26b7e89..8cd851c 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerPlugInTest.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/DataTypesFormPageControllerPlugInTest.java
@@ -538,9 +538,9 @@
         expect(selectedTreeNode.getModelObject()).andReturn(typeToCopy).anyTimes();

         replay(selectedTreeNode);

 

-        assertTrue(controller.isCopyEnabled(selectedTreeNode));

+        assertTrue(controller.isCopyEnabled(new Object[] { selectedTreeNode }));

 

-        controller.handleCopyTypeAction(selectedTreeNode);

+        controller.handleCopyTypeAction(new Object[] { selectedTreeNode });

 

         final INamespaceNode targetTreeNode = createNiceMock(INamespaceNode.class);

         expect(targetTreeNode.getModelObject()).andReturn(targetSchemas[0]).anyTimes();

diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DTTreeContextMenuListener.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DTTreeContextMenuListener.java
index 708c793..fe8ffa5 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DTTreeContextMenuListener.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/DTTreeContextMenuListener.java
@@ -338,8 +338,7 @@
             copyTypeAction = new Action(Messages.DTTreeContextMenuListener_0, Action.AS_PUSH_BUTTON) {
                 @Override
                 public void run() {
-                    getController().handleCopyTypeAction(
-                            (ITreeNode) ((IStructuredSelection) treeViewer.getSelection()).getFirstElement());
+                    getController().handleCopyTypeAction(((IStructuredSelection) treeViewer.getSelection()).toArray());
                 }
             };
             copyTypeAction.setId(ContextMenuConstants.COPY_TYPE_ACTION_ID);
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 8da63b8..408d2f4 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
@@ -1466,7 +1466,7 @@
         return isAddTypeEnabled(selectedTreeNode);
     }
 
-    public boolean isCopyEnabled(final IDataTypesTreeNode selectedNode) {
+    public boolean isCopyEnabled(Object[] selectedNode) {
         return ClipboardService.isCopyEnabled(selectedNode);
     }
 
@@ -1501,7 +1501,7 @@
         }
     }
 
-    public boolean handleDropTypeIntoEditor(AbstractModelRoot modelRoot, INamedObject typeToBeCopied, ITreeNode dropTarget) {
+    public boolean handleDropTypeIntoEditor(AbstractModelRoot modelRoot, Object[] typesToBeCopied, ITreeNode dropTarget) {
         ISchema targetSchema = null;
 
         if (modelRoot instanceof IXSDModelRoot) {
@@ -1515,11 +1515,12 @@
             targetSchema = (ISchema) namespaceNode.getModelObject();
         }
 
-        if (typeToBeCopied.getParent() == targetSchema) {
+        if (typesToBeCopied.length > 1 && typesToBeCopied[0] instanceof IModelObject
+                && ((IModelObject) typesToBeCopied[0]).getParent() == targetSchema) {
             return true;
         }
 
-        copyTypeAndSelectItOnTree(targetSchema, typeToBeCopied);
+        copyTypeAndSelectItOnTree(targetSchema, typesToBeCopied);
 
         return true;
     }
@@ -1533,13 +1534,16 @@
         return getNamespaceNode(parent);
     }
 
-    public void handleCopyTypeAction(final ITreeNode selectedTreeNode) {
-        final IModelObject selectionModelObject = selectedTreeNode.getModelObject();
-        if (selectionModelObject == null || !(selectionModelObject instanceof IType)) {
-            throw new IllegalArgumentException("Tree node selection must be IType but was:" + selectionModelObject); //$NON-NLS-1$
+    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.copyModelObjectToClipboard((INamedObject) selectionModelObject);
+        ClipboardService.copyModelObjectsToClipboard(modelObjectsToBeCopied.toArray());
     }
 
     public void handlePasteTypeAction(final ITreeNode selectedTreeNode) {
@@ -1556,7 +1560,7 @@
             return;
         }
 
-        INamedObject sourceModelObject = (INamedObject) ClipboardService.getModelObjectFromClipboard();
+        Object[] sourceModelObject = ClipboardService.getModelObjectsFromClipboard();
         if (sourceModelObject == null) {
             return;
         }
@@ -1579,15 +1583,20 @@
         return targetSchema;
     }
 
-    private void copyTypeAndSelectItOnTree(ISchema targetSchema, INamedObject sourceModelObject) {
+    private void copyTypeAndSelectItOnTree(ISchema targetSchema, Object[] sourceModelObjects) {
         IType copiedType = null;
 
-        final CopyTypeCommand copyCommand = new CopyTypeCommand(model, targetSchema,
-                (XSDNamedComponent) sourceModelObject.getComponent(), targetSchema, sourceModelObject.getName());
+        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);
+                IStatus status = executeCommand(copyCommand);
+                copiedType = copyCommand.getCopiedType();
+                getDialogManager().showStatusDialog(Messages.DataTypesFormPageController_1, status);
+            }
+        }
 
         if (copiedType != null) {
             fireTreeNodeSelectionEvent(copiedType);
@@ -1595,18 +1604,23 @@
     }
 
     public boolean isPasteEnabled(final IDataTypesTreeNode selectedNode) {
-        IModelObject sourceModelObject = ClipboardService.getModelObjectFromClipboard();
+        Object[] sourceModelObjects = ClipboardService.getModelObjectsFromClipboard();
 
         if (selectedNode == null && !(model instanceof XSDModelRoot)) {
             return false;
         }
 
-        if (sourceModelObject == null) {
+        if (sourceModelObjects == null || sourceModelObjects.length == 0) {
             return false;
         }
 
-        if (sourceModelObject.getComponent().eResource() == null) {
-            return false;
+        for (Object object : sourceModelObjects) {
+            if (object instanceof IModelObject) {
+                IModelObject modelObject = (IModelObject) object;
+                if (modelObject.getComponent().eResource() == null) {
+                    return false;
+                }
+            }
         }
 
         if ((selectedNode != null && selectedNode.isReadOnly()) || isResourceReadOnly()) {
@@ -1614,6 +1628,7 @@
         }
 
         return true;
+
     }
 
     public void editItemNameTriggered(final ITreeNode treeNode, final String newName) {
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/IDataTypesFormPageController.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/IDataTypesFormPageController.java
index 80a24ca..c05e5d9 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/IDataTypesFormPageController.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/IDataTypesFormPageController.java
@@ -22,9 +22,9 @@
 import org.eclipse.wst.sse.sieditor.model.xsd.api.IFacet;
 import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
 import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType;
+import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType.Whitespace;
 import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
 import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
-import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType.Whitespace;
 import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema;
 import org.eclipse.wst.sse.sieditor.model.xsd.impl.StructureType;
 import org.eclipse.wst.sse.sieditor.ui.v2.IFormPageController;
@@ -217,7 +217,7 @@
     public void deleteSimpleTypeEnumFacet(ISimpleType type, IFacet facet);
 
     public void setStructureTypeContent(IStructureType structure, IType type);
-    
+
     public void setStructureType(IStructureType structure, IType type);
 
     public void setGlobalElementNillable(IStructureType structure, boolean nillable);
@@ -258,9 +258,9 @@
 
     public boolean isAddGlobalElementEnabled(IDataTypesTreeNode selectedTreeNode);
 
-    public boolean isCopyEnabled(IDataTypesTreeNode treeNode);
+    public boolean isCopyEnabled(Object[] treeNode);
 
-    public void handleCopyTypeAction(ITreeNode firstElement);
+    public void handleCopyTypeAction(Object[] firstElement);
 
     public void handlePasteTypeAction(ITreeNode firstElement);
 
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/actionenablement/DataTypesEditorActionEnablementForSelectionManager.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/actionenablement/DataTypesEditorActionEnablementForSelectionManager.java
index dbf8de7..e971cfe 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/actionenablement/DataTypesEditorActionEnablementForSelectionManager.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/actionenablement/DataTypesEditorActionEnablementForSelectionManager.java
@@ -174,7 +174,7 @@
     }
 
     protected boolean isCopyEnabled(final IStructuredSelection selection) {
-        return controller.isCopyEnabled((IDataTypesTreeNode) selection.getFirstElement());
+        return controller.isCopyEnabled(selection.toArray());
     }
 
     protected boolean isPasteEnabled(final IStructuredSelection selection) {
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 09640aa..6c2bd97 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
@@ -2,6 +2,8 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
@@ -29,12 +31,21 @@
 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 copyModelObjectToClipboard(IModelObject modelObject) {
+    public static void copyModelObjectsToClipboard(Object[] objects) {
         Clipboard clipboard = new Clipboard(Display.getCurrent());
+        List<IModelObject> modelObjectsToCopy = new ArrayList<IModelObject>();
 
-        String modelObjectAsText = getModelObjectAsText(modelObject);
-        clipboard.setContents(new Object[] { modelObject, modelObjectAsText }, new Transfer[] { SiEditorTransfer.getInstance(),
-                TextTransfer.getInstance() });
+        String modelObjectAsText = ""; //$NON-NLS-1$
+        for (Object object : objects) {
+            if (object instanceof IModelObject) {
+                IModelObject modelObject = (IModelObject) object;
+                modelObjectAsText += getModelObjectAsText(modelObject);
+                modelObjectsToCopy.add(modelObject);
+            }
+        }
+
+        clipboard.setContents(new Object[] { modelObjectsToCopy.toArray(), modelObjectAsText },
+                new Transfer[] { SiEditorTransfer.getInstance(), TextTransfer.getInstance() });
     }
 
     private static String getModelObjectAsText(IModelObject modelObject) {
@@ -81,18 +92,27 @@
         return null;
     }
 
-    public static IModelObject getModelObjectFromClipboard() {
+    public static Object[] getModelObjectsFromClipboard() {
         Clipboard clipboard = new Clipboard(Display.getCurrent());
-        return (IModelObject) clipboard.getContents(SiEditorTransfer.getInstance());
+        return (Object[]) clipboard.getContents(SiEditorTransfer.getInstance());
     }
 
-    public static boolean isCopyEnabled(Object selectedNode) {
-        if (!(selectedNode instanceof IDataTypesTreeNode)) {
+    public static boolean isCopyEnabled(Object[] selectedNodes) {
+        if (selectedNodes == null || selectedNodes.length == 0) {
             return false;
         }
 
-        final IModelObject modelObject = ((IDataTypesTreeNode) selectedNode).getModelObject();
-        return modelObject instanceof IType;
+        for (Object selectedNode : selectedNodes) {
+            if (!(selectedNode instanceof IDataTypesTreeNode)) {
+                return false;
+            }
+
+            final IModelObject modelObject = ((IDataTypesTreeNode) selectedNode).getModelObject();
+            if (!(modelObject instanceof IType)) {
+                return false;
+            }
+        }
+        return true;
     }
 
 }
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 5b7a681..aafdf3e 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
@@ -11,43 +11,31 @@
 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.dt.nodes.IDataTypesTreeNode;
-import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
 
 public class CopyHandler extends AbstractHandler {
 
     @Override
     public Object execute(ExecutionEvent event) throws ExecutionException {
-        ITreeNode selectedTreeNode = getSelectedTreeNode();
+        TreeItem[] selectedTreeNodes = getSelectedTreeNode();
 
-        if (!ClipboardService.isCopyEnabled((IDataTypesTreeNode) selectedTreeNode)) {
+        if (!ClipboardService.isCopyEnabled(selectedTreeNodes)) {
             showNotPosibleDialog();
             return null;
         }
 
-        ClipboardService.copyModelObjectToClipboard(selectedTreeNode.getModelObject());
+        ClipboardService.copyModelObjectsToClipboard(selectedTreeNodes);
 
         return null;
     }
 
-    private ITreeNode getSelectedTreeNode() {
+    private TreeItem[] getSelectedTreeNode() {
         Control focusControl = Display.getCurrent().getFocusControl();
         if (!(focusControl instanceof Tree)) {
             return null;
         }
 
         Tree tree = (Tree) focusControl;
-        TreeItem[] selection = tree.getSelection();
-        if (selection.length != 1) {
-            return null;
-        }
-
-        Object selectionData = selection[0].getData();
-        if (selectionData instanceof ITreeNode) {
-            return (ITreeNode) selectionData;
-        }
-
-        return null;
+        return tree.getSelection();
     }
 
     private void showNotPosibleDialog() {
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/SiEditorTransfer.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/SiEditorTransfer.java
index 6d79e63..b310a5b 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/SiEditorTransfer.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/SiEditorTransfer.java
@@ -9,17 +9,13 @@
 import org.eclipse.jface.util.Policy;

 import org.eclipse.swt.dnd.ByteArrayTransfer;

 import org.eclipse.swt.dnd.TransferData;

-import org.eclipse.wst.sse.sieditor.model.api.INamedObject;

 

-/**

- * Class for serializing gadgets to/from a byte array

- */

 public class SiEditorTransfer extends ByteArrayTransfer {

     private static SiEditorTransfer instance = new SiEditorTransfer();

     private static final String TYPE_NAME = "sie-transfer-format"; //$NON-NLS-1$

     private static final int TYPEID = registerType(TYPE_NAME);

 

-    private WeakReference<INamedObject> modelObject;

+    private WeakReference<Object[]> modelObject;

 

     public static SiEditorTransfer getInstance() {

         return instance;

@@ -32,9 +28,6 @@
         return new int[] { TYPEID };

     }

 

-    /*

-     * Method declared on Transfer.

-     */

     protected String[] getTypeNames() {

         return new String[] { TYPE_NAME };

     }

@@ -51,7 +44,7 @@
     public void javaToNative(Object object, TransferData transferData) {

         byte[] check = TYPE_NAME.getBytes(Charset.forName("UTF-8")); //$NON-NLS-1$

         super.javaToNative(check, transferData);

-        modelObject = new WeakReference<INamedObject>((INamedObject) object);

+        modelObject = new WeakReference<Object[]>((Object[]) object);

     }

 

     public Object nativeToJava(TransferData transferData) {

diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDragAdapter.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDragAdapter.java
new file mode 100644
index 0000000..3dea376
--- /dev/null
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDragAdapter.java
@@ -0,0 +1,45 @@
+package org.eclipse.wst.sse.sieditor.ui.v2.dt.dnd;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.swt.dnd.DragSourceAdapter;

+import org.eclipse.swt.dnd.DragSourceEvent;

+import org.eclipse.wst.sse.sieditor.model.api.IModelObject;

+import org.eclipse.wst.sse.sieditor.ui.v2.dt.clipboard.ClipboardService;

+import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;

+

+public class TreeViewerDragAdapter extends DragSourceAdapter {

+    private StructuredViewer viewer;

+

+    public TreeViewerDragAdapter(StructuredViewer viewer) {

+        this.viewer = viewer;

+    }

+

+    public void dragSetData(DragSourceEvent event) {

+        if (!SiEditorTransfer.getInstance().isSupportedType(event.dataType)) {

+            return;

+        }

+        IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();

+        List<IModelObject> modelObjects = new ArrayList<IModelObject>();

+        for (Object selectedObject : selection.toArray()) {

+            if (selectedObject instanceof ITreeNode) {

+                modelObjects.add(((ITreeNode) selectedObject).getModelObject());

+            }

+        }

+        event.data = modelObjects.toArray();

+    }

+

+    public void dragStart(DragSourceEvent event) {

+        ISelection selection = viewer.getSelection();

+        if (selection instanceof IStructuredSelection) {

+            IStructuredSelection structuredSelection = (IStructuredSelection) selection;

+            event.doit = ClipboardService.isCopyEnabled(structuredSelection.toArray());

+        } else {

+            event.doit = !selection.isEmpty();

+        }

+    }

+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDropAdapter.java b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDropAdapter.java
index 6ec663e..cfc71dc 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDropAdapter.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.ui/api/org/eclipse/wst/sse/sieditor/ui/v2/dt/dnd/TreeViewerDropAdapter.java
@@ -3,7 +3,6 @@
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.wst.sse.sieditor.model.api.INamedObject;
 import org.eclipse.wst.sse.sieditor.model.impl.AbstractModelRoot;
 import org.eclipse.wst.sse.sieditor.ui.v2.AbstractFormPageController;
 import org.eclipse.wst.sse.sieditor.ui.v2.dt.DataTypesFormPageController;
@@ -20,7 +19,7 @@
 
     @Override
     public boolean performDrop(Object data) {
-        if (!(data instanceof INamedObject)) {
+        if (!(data instanceof Object[])) {
             return false;
         }
 
@@ -38,9 +37,8 @@
         }
 
         AbstractModelRoot modelRoot = (AbstractModelRoot) viewerInput;
-        INamedObject typeToBeCopied = (INamedObject) data;
 
-        ((DataTypesFormPageController) controller).handleDropTypeIntoEditor(modelRoot, typeToBeCopied, (ITreeNode) dropTarget);
+        ((DataTypesFormPageController) controller).handleDropTypeIntoEditor(modelRoot, (Object[]) data, (ITreeNode) dropTarget);
 
         return true;
     }