Skip to content

Package: ModelExplorerDropAdapter$1

ModelExplorerDropAdapter$1

nameinstructionbranchcomplexitylinemethod
doExecute()
M: 28 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
{...}
M: 16 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2012 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eugen Neufeld - initial API and implementation
13: *
14: *******************************************************************************/
15:
16: package org.eclipse.emf.ecp.ui.common.dnd;
17:
18: import org.eclipse.emf.ecore.EObject;
19: import org.eclipse.emf.ecore.util.EcoreUtil;
20: import org.eclipse.emf.ecp.core.ECPProject;
21: import org.eclipse.emf.ecp.core.util.ECPUtil;
22: import org.eclipse.emf.edit.command.ChangeCommand;
23: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
24: import org.eclipse.emf.edit.domain.EditingDomain;
25: import org.eclipse.jface.viewers.ISelection;
26: import org.eclipse.jface.viewers.IStructuredSelection;
27: import org.eclipse.jface.viewers.Viewer;
28: import org.eclipse.swt.dnd.DND;
29: import org.eclipse.swt.dnd.DropTargetEvent;
30:
31: /**
32: * @author Eugen Neufeld
33: */
34: public class ModelExplorerDropAdapter extends ECPDropAdapter {
35:
36:         /**
37:          * Default constructor.
38:          *
39:          * @param viewer the viewer, the drop adapter is responsible for
40:          */
41:         public ModelExplorerDropAdapter(Viewer viewer) {
42:                 super(null, viewer);
43:         }
44:
45:         /*
46:          * (non-Javadoc)
47:          * @see org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
48:          */
49:         @Override
50:         public void dragEnter(DropTargetEvent event) {
51:                 if (domain == null) {
52:                         return;
53:                 }
54:                 super.dragEnter(event);
55:         }
56:
57:         /*
58:          * (non-Javadoc)
59:          * @see org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
60:          */
61:         @Override
62:         public void dragOver(DropTargetEvent event) {
63:                 final Object target = extractDropTarget(event.item);
64:                 if (target == null) {
65:                         return;
66:                 }
67:                 source = getDragSource(event);
68:
69:                 Object sourceObject = null;
70:
71:                 if (source == null) {
72:                         final ISelection selection = viewer.getSelection();
73:                         if (selection instanceof IStructuredSelection) {
74:                                 sourceObject = ((IStructuredSelection) viewer.getSelection()).getFirstElement();
75:                         }
76:
77:                 } else {
78:                         sourceObject = source.iterator().next();
79:                 }
80:
81:                 final EditingDomain sourceProjectDomain = getProjectDomain(sourceObject);
82:                 final EditingDomain targetProjectDomain = getProjectDomain(target);
83:                 EditingDomain newDomain = null;
84:
85:                 if (target instanceof ECPProject) {
86:                         newDomain = ((ECPProject) target).getEditingDomain();
87:                 } else {
88:                         newDomain = AdapterFactoryEditingDomain.getEditingDomainFor(target);
89:                 }
90:
91:                 if (domain == null || newDomain != null && sourceProjectDomain == targetProjectDomain) {
92:                         domain = newDomain;
93:                 }
94:
95:                 if (target instanceof ECPProject) {
96:
97:                         final ECPProject project = (ECPProject) target;
98:                         if (sourceObject instanceof ECPProject) {
99:                                 event.detail = DND.DROP_COPY;
100:                                 event.feedback = DND.FEEDBACK_INSERT_AFTER | DND.FEEDBACK_INSERT_BEFORE | DND.FEEDBACK_SCROLL;
101:                         }
102:                         // TODO delegate to provider?
103:                         else if (project.getContents().contains(sourceObject)) {
104:                                 if (originalOperation != DND.DROP_COPY) {
105:                                         event.detail = DND.DROP_NONE;
106:                                 } else {
107:                                         event.detail = DND.DROP_COPY;
108:                                 }
109:                         } else {
110:                                 event.feedback = DND.FEEDBACK_SELECT | getAutoFeedback();
111:                                 if (sourceProjectDomain == targetProjectDomain) {
112:                                         event.detail = DND.DROP_MOVE;
113:                                 } else {
114:                                         event.detail = DND.DROP_COPY;
115:                                 }
116:
117:                         }
118:                 } else {
119:                         if (sourceProjectDomain != targetProjectDomain) {
120:                                 event.detail = DND.DROP_NONE;
121:
122:                         } else {
123:                                 super.dragOver(event);
124:                         }
125:                 }
126:         }
127:
128:         /*
129:          * (non-Javadoc)
130:          * @see org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter#drop(org.eclipse.swt.dnd.DropTargetEvent)
131:          */
132:         @Override
133:         public void drop(final DropTargetEvent event) {
134:                 final Object target = extractDropTarget(event.item);
135:                 source = getDragSource(event);
136:                 final Object sourceObject = source.iterator().next();
137:
138:                 if (target instanceof ECPProject) {
139:                         final ECPProject project = (ECPProject) target;
140:
141:                         if (sourceObject instanceof EObject) {
142:                                 project.getEditingDomain().getCommandStack().execute(new ChangeCommand((EObject) sourceObject) {
143:
144:                                         @Override
145:                                         protected void doExecute() {
146:•                                                if (event.detail == DND.DROP_MOVE) {
147:                                                         project.getContents().add(sourceObject);
148:•                                                } else if (event.detail == DND.DROP_COPY) {
149:                                                         project.getContents().add(EcoreUtil.copy((EObject) sourceObject));
150:                                                 }
151:                                         }
152:                                 });
153:
154:                         } else if (sourceObject instanceof ECPProject) {
155:                                 final ECPProject oldProject = (ECPProject) sourceObject;
156:                                 ECPUtil.getECPProjectManager().createProject(oldProject, oldProject.getName() + "(Copy)");
157:                         }
158:                 } else if (event.detail != DND.DROP_NONE) {
159:                         super.drop(event);
160:                 }
161:         }
162:
163:         /*
164:          * (non-Javadoc)
165:          * @see org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter#dropAccept(org.eclipse.swt.dnd.DropTargetEvent)
166:          */
167:         @Override
168:         public void dropAccept(DropTargetEvent event) {
169:                 final Object target = extractDropTarget(event.item);
170:                 if (target instanceof ECPProject) {
171:                         event.feedback = DND.FEEDBACK_SELECT | getAutoFeedback();
172:                 } else {
173:                         super.dropAccept(event);
174:                 }
175:         }
176:
177: }