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;
}