|
1 /* |
|
2 * Copyright (c) 2007 Borland Software Corporation |
|
3 * |
|
4 * All rights reserved. This program and the accompanying materials |
|
5 * are made available under the terms of the Eclipse Public License v1.0 |
|
6 * which accompanies this distribution, and is available at |
|
7 * http://www.eclipse.org/legal/epl-v10.html |
|
8 * |
|
9 * Contributors: |
|
10 * bblajer (Borland) - initial API and implementation |
|
11 */ |
|
12 |
|
13 «IMPORT "http://www.eclipse.org/gmf/2008/GenModel"» |
|
14 «IMPORT "http://www.eclipse.org/emf/2002/Ecore"» |
|
15 «IMPORT "http://www.eclipse.org/emf/2002/GenModel"» |
|
16 «EXTENSION xpt::GenModelUtils» |
|
17 «EXTENSION xpt::diagram::policies::i18n» |
|
18 «EXTENSION xpt::diagram::policies::ClassNames» |
|
19 «EXTENSION xpt::diagram::policies::ComponentEditPolicy» |
|
20 «EXTENSION xpt::diagram::LinkFinder» |
|
21 |
|
22 «DEFINE ComponentEditPolicy FOR gmfgen::GenCommonBase-» |
|
23 «EXPAND xpt::Common::copyright FOR getDiagram().editorGen» |
|
24 package «getDiagram().editPoliciesPackageName»; |
|
25 |
|
26 «EXPAND xpt::Common::generatedClassComment» |
|
27 public class «EXPAND className» «EXPAND supertypes» { |
|
28 «EXPAND createDeleteCommand-» |
|
29 «EXPAND getDeleteViewCommand-» |
|
30 «EXPAND canDeleteView-» |
|
31 «IF needsGetGraphicalEditPart()-» |
|
32 «EXPAND getGraphicalEditPart-» |
|
33 «ENDIF-» |
|
34 «EXPAND domainModelRemoveCommand-» |
|
35 «EXPAND getDiagramElement-» |
|
36 «EXPAND additions-» |
|
37 } |
|
38 «ENDDEFINE» |
|
39 |
|
40 «DEFINE domainModelRemoveCommand FOR GenCommonBase»«ERROR "Unexpected type!"»«ENDDEFINE» |
|
41 |
|
42 «DEFINE domainModelRemoveCommand FOR GenNode-» |
|
43 «EXPAND xpt::commands::domainModelRemoveCommand::domainModelRemoveCommand("getDiagramNode()")-» |
|
44 «ENDDEFINE» |
|
45 |
|
46 «DEFINE domainModelRemoveCommand FOR GenLink-» |
|
47 «EXPAND xpt::commands::domainModelRemoveCommand::domainModelRemoveCommand("getDiagramEdge()")-» |
|
48 «ENDDEFINE» |
|
49 |
|
50 «DEFINE getDiagramElement FOR GenCommonBase»«ERROR "Unexpected type!"»«ENDDEFINE» |
|
51 |
|
52 «DEFINE getDiagramElement FOR GenNode-» |
|
53 «EXPAND getDiagramNode-» |
|
54 «ENDDEFINE» |
|
55 |
|
56 «DEFINE getDiagramElement FOR GenLink-» |
|
57 «EXPAND getDiagramEdge-» |
|
58 «ENDDEFINE» |
|
59 |
|
60 «DEFINE className FOR gmfgen::GenCommonBase»«getComponentEditPolicyClassName()»«ENDDEFINE» |
|
61 «DEFINE qualifiedClassName FOR gmfgen::GenCommonBase»«getDiagram().editPoliciesPackageName».«EXPAND className»«ENDDEFINE» |
|
62 |
|
63 «DEFINE supertypes FOR gmfgen::GenCommonBase»extends org.eclipse.gmf.runtime.lite.edit.policies.ComponentEditPolicyEx«ENDDEFINE» |
|
64 |
|
65 «DEFINE createDeleteCommand FOR gmfgen::GenCommonBase-» |
|
66 «EXPAND xpt::Common::generatedMemberComment» |
|
67 protected org.eclipse.gef.commands.Command createDeleteCommand(org.eclipse.gef.requests.GroupRequest deleteRequest) { |
|
68 org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain = org.eclipse.emf.transaction.util.TransactionUtil.getEditingDomain(«EXPAND getDiagramElementMethodName»().getDiagram().getElement()); |
|
69 «LET incomingTypeLinks() AS incomingTypeLinks-» |
|
70 «LET outgoingNonPhantomLinks() AS outgoingLinks-» |
|
71 «IF incomingTypeLinks.size() > 0 || outgoingLinks.size() > 0-» |
|
72 org.eclipse.gmf.runtime.lite.commands.CompositeWrappingCommand result = new org.eclipse.gmf.runtime.lite.commands.CompositeWrappingCommand(editingDomain, «EXPAND xpt::Externalizer::accessorCall(getDiagram().i18nKeyForDeleteModelElementLabel()) FOR getDiagram().editorGen»); |
|
73 «ENDIF-» |
|
74 «EXPAND deleteIncomingLinks(incomingTypeLinks, true)-» |
|
75 «EXPAND deleteOutgoingLinks(outgoingLinks, true)-» |
|
76 «EXPAND createDeleteCommandPrim(true)-» |
|
77 «IF incomingTypeLinks.size() > 0 || outgoingLinks.size() > 0-» |
|
78 result.add(cc); |
|
79 return result; |
|
80 «ELSE-» |
|
81 return new org.eclipse.gmf.runtime.lite.commands.WrappingCommand(editingDomain, cc); |
|
82 «ENDIF-» |
|
83 «ENDLET-» |
|
84 «ENDLET-» |
|
85 } |
|
86 «ENDDEFINE» |
|
87 |
|
88 «DEFINE deleteIncomingLinks(Collection[gmfgen::GenLink] incomingLinks, boolean deleteFromModel) FOR gmfgen::GenCommonBase-» |
|
89 «IF incomingLinks.size() > 0-» |
|
90 for(java.util.Iterator it = getGraphicalEditPart().getTargetConnections().iterator(); it.hasNext(); ) { |
|
91 org.eclipse.gef.EditPart nextEditPart = (org.eclipse.gef.EditPart) it.next(); |
|
92 org.eclipse.gmf.runtime.notation.Edge nextEdge = (org.eclipse.gmf.runtime.notation.Edge) nextEditPart.getModel(); |
|
93 int visualID = «getDiagram().getVisualIDRegistryQualifiedClassName()».getVisualID(nextEdge); |
|
94 switch (visualID) { |
|
95 «FOREACH incomingLinks AS nextLink-» |
|
96 case «nextLink.getEditPartQualifiedClassName()».VISUAL_ID: |
|
97 «ENDFOREACH-» |
|
98 «EXPAND deleteDependentLinks(deleteFromModel)-» |
|
99 } |
|
100 } |
|
101 «ENDIF-» |
|
102 «ENDDEFINE» |
|
103 |
|
104 «DEFINE deleteOutgoingLinks(Collection[gmfgen::GenLink] outgoingLinks, boolean deleteFromModel) FOR gmfgen::GenCommonBase-» |
|
105 «IF outgoingLinks.size() > 0-» |
|
106 for(java.util.Iterator it = getGraphicalEditPart().getSourceConnections().iterator(); it.hasNext(); ) { |
|
107 org.eclipse.gef.EditPart nextEditPart = (org.eclipse.gef.EditPart) it.next(); |
|
108 org.eclipse.gmf.runtime.notation.Edge nextEdge = (org.eclipse.gmf.runtime.notation.Edge) nextEditPart.getModel(); |
|
109 int visualID = «getDiagram().getVisualIDRegistryQualifiedClassName()».getVisualID(nextEdge); |
|
110 switch (visualID) { |
|
111 «FOREACH outgoingLinks AS nextLink-» |
|
112 case «nextLink.getEditPartQualifiedClassName()».VISUAL_ID: |
|
113 «ENDFOREACH-» |
|
114 «EXPAND deleteDependentLinks(deleteFromModel)-» |
|
115 } |
|
116 } |
|
117 «ENDIF-» |
|
118 «ENDDEFINE» |
|
119 |
|
120 «DEFINE deleteDependentLinks(boolean deleteFromModel) FOR gmfgen::GenCommonBase-» |
|
121 { |
|
122 org.eclipse.gef.requests.GroupRequest deleteLinkRequest = new org.eclipse.gef.requests.GroupRequest(«IF deleteFromModel»org.eclipse.gef.RequestConstants.REQ_DELETE«ELSE»org.eclipse.gmf.runtime.lite.requests.RequestConstants.REQ_FORCED_DELETE_VIEW«ENDIF»); |
|
123 deleteLinkRequest.setEditParts(nextEditPart); |
|
124 result.add(nextEditPart.getCommand(deleteLinkRequest)); |
|
125 break; |
|
126 } |
|
127 «ENDDEFINE» |
|
128 |
|
129 «DEFINE getGraphicalEditPart FOR gmfgen::GenCommonBase-» |
|
130 «EXPAND xpt::Common::generatedMemberComment» |
|
131 protected org.eclipse.gef.GraphicalEditPart getGraphicalEditPart() { |
|
132 return (org.eclipse.gef.GraphicalEditPart) getHost(); |
|
133 } |
|
134 «ENDDEFINE» |
|
135 |
|
136 «DEFINE createDeleteCommandPrim(boolean deleteFromModel) FOR gmfgen::GenCommonBase»«ERROR "UnexpectedType"»«ENDDEFINE» |
|
137 |
|
138 «DEFINE createDeleteCommandPrim(boolean deleteFromModel) FOR gmfgen::GenNode-» |
|
139 org.eclipse.emf.common.command.CompoundCommand cc = new org.eclipse.emf.common.command.CompoundCommand(); |
|
140 «IF deleteFromModel-» |
|
141 cc.append(createDomainModelRemoveCommand(editingDomain)); |
|
142 «ENDIF-» |
|
143 cc.append(new org.eclipse.gmf.runtime.lite.commands.RemoveNotationalElementCommand((org.eclipse.gmf.runtime.notation.View) «EXPAND getDiagramElementMethodName»().eContainer(), «EXPAND getDiagramElementMethodName»())); |
|
144 «ENDDEFINE» |
|
145 |
|
146 «DEFINE createDeleteCommandPrim(boolean deleteFromModel) FOR gmfgen::GenLink-» |
|
147 org.eclipse.emf.common.command.CompoundCommand cc = new org.eclipse.emf.common.command.CompoundCommand(); |
|
148 «IF deleteFromModel-» |
|
149 cc.append(createDomainModelRemoveCommand(editingDomain)); |
|
150 «ENDIF-» |
|
151 cc.append(new org.eclipse.gmf.runtime.lite.commands.RemoveNotationalEdgeCommand(«EXPAND getDiagramElementMethodName»().getDiagram(), «EXPAND getDiagramElementMethodName»())); |
|
152 «ENDDEFINE» |
|
153 |
|
154 «DEFINE getDiagramElementMethodName FOR gmfgen::GenCommonBase»«ERROR "Unexpected type: " + this»«ENDDEFINE» |
|
155 «DEFINE getDiagramElementMethodName FOR gmfgen::GenNode»getDiagramNode«ENDDEFINE» |
|
156 «DEFINE getDiagramElementMethodName FOR gmfgen::GenLink»getDiagramEdge«ENDDEFINE» |
|
157 |
|
158 «DEFINE getDiagramNode FOR gmfgen::GenNode-» |
|
159 «EXPAND xpt::Common::generatedMemberComment» |
|
160 protected org.eclipse.gmf.runtime.notation.Node «EXPAND getDiagramElementMethodName»() { |
|
161 return (org.eclipse.gmf.runtime.notation.Node) getHost().getModel(); |
|
162 } |
|
163 «ENDDEFINE» |
|
164 |
|
165 «DEFINE getDiagramEdge FOR gmfgen::GenLink-» |
|
166 «EXPAND xpt::Common::generatedMemberComment» |
|
167 protected org.eclipse.gmf.runtime.notation.Edge «EXPAND getDiagramElementMethodName»() { |
|
168 return (org.eclipse.gmf.runtime.notation.Edge) getHost().getModel(); |
|
169 } |
|
170 «ENDDEFINE» |
|
171 |
|
172 «DEFINE getDeleteViewCommand FOR gmfgen::GenCommonBase-» |
|
173 «EXPAND xpt::Common::generatedMemberComment» |
|
174 protected org.eclipse.gef.commands.Command getDeleteViewCommand(org.eclipse.gef.requests.GroupRequest deleteRequest, boolean isForced) { |
|
175 if (!isForced && !canDeleteView()) { |
|
176 return org.eclipse.gef.commands.UnexecutableCommand.INSTANCE; |
|
177 } |
|
178 org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain = org.eclipse.emf.transaction.util.TransactionUtil.getEditingDomain(«EXPAND getDiagramElementMethodName»().getDiagram().getElement()); |
|
179 «LET incomingLinks() AS incomingLinks-» |
|
180 «LET outgoingLinks() AS outgoingLinks-» |
|
181 «IF incomingLinks.size() > 0 || outgoingLinks.size() > 0-» |
|
182 org.eclipse.gmf.runtime.lite.commands.CompositeWrappingCommand result = new org.eclipse.gmf.runtime.lite.commands.CompositeWrappingCommand(editingDomain, «EXPAND xpt::Externalizer::accessorCall(getDiagram().i18nKeyForDeleteDiagramElementLabel()) FOR getDiagram().editorGen»); |
|
183 «ENDIF-» |
|
184 «EXPAND deleteIncomingLinks(incomingLinks, false)-» |
|
185 «EXPAND deleteOutgoingLinks(outgoingLinks, false)-» |
|
186 «EXPAND createDeleteCommandPrim(false)-» |
|
187 «IF incomingLinks.size() > 0 || outgoingLinks.size() > 0-» |
|
188 result.add(cc); |
|
189 return result; |
|
190 «ELSE-» |
|
191 return new org.eclipse.gmf.runtime.lite.commands.WrappingCommand(editingDomain, cc); |
|
192 «ENDIF-» |
|
193 «ENDLET-» |
|
194 «ENDLET-» |
|
195 } |
|
196 «ENDDEFINE» |
|
197 |
|
198 «DEFINE canDeleteView FOR gmfgen::GenCommonBase»«ERROR "Unexpected Type: " + this»«ENDDEFINE» |
|
199 |
|
200 «DEFINE canDeleteView FOR gmfgen::GenLink-» |
|
201 «EXPAND xpt::Common::generatedMemberComment» |
|
202 private boolean canDeleteView() { |
|
203 return false; |
|
204 } |
|
205 «ENDDEFINE» |
|
206 |
|
207 «DEFINE canDeleteView FOR gmfgen::GenNode-» |
|
208 «EXPAND xpt::Common::generatedMemberComment» |
|
209 private boolean canDeleteView() { |
|
210 if («EXPAND getDiagramElementMethodName»().getEAnnotation("Shortcut") != null) { «EXPAND xpt::Common::nonNLS» |
|
211 return true; |
|
212 } |
|
213 org.eclipse.gmf.runtime.notation.View parentView = (org.eclipse.gmf.runtime.notation.View) «EXPAND getDiagramElementMethodName»().eContainer(); |
|
214 if (parentView == null) { |
|
215 return true; |
|
216 } |
|
217 org.eclipse.gmf.runtime.notation.CanonicalStyle canonicalStyle = (org.eclipse.gmf.runtime.notation.CanonicalStyle) parentView.getStyle(org.eclipse.gmf.runtime.notation.NotationPackage.eINSTANCE.getCanonicalStyle()); |
|
218 if (canonicalStyle != null) { |
|
219 return !canonicalStyle.isCanonical(); |
|
220 } |
|
221 return «!getDiagram().synchronized»; |
|
222 } |
|
223 «ENDDEFINE» |
|
224 |
|
225 «DEFINE additions FOR gmfgen::GenCommonBase»«ENDDEFINE» |
|
226 |
|
227 «DEFINE i18nAccessors FOR gmfgen::GenDiagram-» |
|
228 «EXPAND xpt::Externalizer::accessorField(i18nKeyForDeleteModelElementLabel())-» |
|
229 «EXPAND xpt::Externalizer::accessorField(i18nKeyForDeleteDiagramElementLabel())-» |
|
230 «ENDDEFINE» |
|
231 |
|
232 «DEFINE i18nValues FOR gmfgen::GenDiagram-» |
|
233 «EXPAND xpt::Externalizer::messageEntry(i18nKeyForDeleteModelElementLabel(), "Delete Model Element")-» |
|
234 «EXPAND xpt::Externalizer::messageEntry(i18nKeyForDeleteDiagramElementLabel(), "Delete Diagram Element")-» |
|
235 «ENDDEFINE» |