|
1 /* |
|
2 * Copyright (c) 2006,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 * Alexander Shatalin (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 «EXTENSION xpt::editor::Utils» |
|
16 |
|
17 «DEFINE Editor FOR gmfgen::GenEditorView-» |
|
18 «EXPAND xpt::Common::copyright FOR editorGen-» |
|
19 package «packageName»; |
|
20 |
|
21 «EXPAND xpt::Common::generatedClassComment» |
|
22 public class «className» extends org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor«EXPAND implementsList FOR getEditorImplementsList(this)» { |
|
23 |
|
24 «EXPAND attributes-» |
|
25 |
|
26 «EXPAND constructor-» |
|
27 |
|
28 «EXPAND getContextID-» |
|
29 «EXPAND createPaletteRoot FOR editorGen.diagram.palette-» |
|
30 |
|
31 «EXPAND getPreferencesHint-» |
|
32 |
|
33 «EXPAND getContributorId-» |
|
34 «EXPAND getAdapter-» |
|
35 |
|
36 «EXPAND getDocumentProvider-» |
|
37 |
|
38 «EXPAND getEditingDomain-» |
|
39 |
|
40 «EXPAND setDocumentProvider-» |
|
41 «IF isIDEMode(this)-» |
|
42 |
|
43 «EXPAND gotoMarker-» |
|
44 |
|
45 «EXPAND isSaveAsAllowed-» |
|
46 |
|
47 «EXPAND doSaveAs-» |
|
48 |
|
49 «EXPAND performSaveAs-» |
|
50 |
|
51 «EXPAND getShowInContext-» |
|
52 «EXPAND getNavigatorSelection FOR editorGen.navigator-» |
|
53 «ENDIF-» |
|
54 |
|
55 «EXPAND configureGraphicalViewer-» |
|
56 |
|
57 «IF editorGen.diagram.generateCreateShortcutAction()-» |
|
58 |
|
59 «EXPAND initializeGraphicalViewer-» |
|
60 |
|
61 «EXPAND DropTargetListener-» |
|
62 «ENDIF-» |
|
63 |
|
64 «EXPAND additions-» |
|
65 } |
|
66 «ENDDEFINE» |
|
67 |
|
68 «DEFINE attributes FOR gmfgen::GenEditorView-» |
|
69 «EXPAND xpt::Common::generatedMemberComment» |
|
70 public static final String ID = "«iD»"; «EXPAND xpt::Common::nonNLS» |
|
71 |
|
72 «EXPAND xpt::Common::generatedMemberComment» |
|
73 public static final String CONTEXT_ID = "«contextID»"; «EXPAND xpt::Common::nonNLS» |
|
74 «ENDDEFINE» |
|
75 |
|
76 «DEFINE constructor FOR gmfgen::GenEditorView-» |
|
77 «EXPAND xpt::Common::generatedMemberComment» |
|
78 public «className»() { |
|
79 super(«null != editorGen.diagram.palette && editorGen.diagram.palette.flyout»); |
|
80 } |
|
81 «ENDDEFINE» |
|
82 |
|
83 «DEFINE getContextID FOR gmfgen::GenEditorView-» |
|
84 «EXPAND xpt::Common::generatedMemberComment» |
|
85 protected String getContextID() { |
|
86 return CONTEXT_ID; |
|
87 } |
|
88 «ENDDEFINE» |
|
89 |
|
90 «DEFINE createPaletteRoot FOR gmfgen::Palette-» |
|
91 |
|
92 «EXPAND xpt::Common::generatedMemberComment» |
|
93 protected org.eclipse.gef.palette.PaletteRoot createPaletteRoot(org.eclipse.gef.palette.PaletteRoot existingPaletteRoot) { |
|
94 org.eclipse.gef.palette.PaletteRoot root = super.createPaletteRoot(existingPaletteRoot); |
|
95 new «getFactoryQualifiedClassName()»().fillPalette(root); |
|
96 return root; |
|
97 } |
|
98 «ENDDEFINE» |
|
99 |
|
100 «DEFINE getPreferencesHint FOR gmfgen::GenEditorView-» |
|
101 «EXPAND xpt::Common::generatedMemberComment» |
|
102 protected org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint getPreferencesHint() { |
|
103 «REM» |
|
104 XXX seems better we use preference store directly (in configureGraphicalViewer) instead all these indirect ids |
|
105 «ENDREM»«-» |
|
106 return «editorGen.plugin.getActivatorQualifiedClassName()».DIAGRAM_PREFERENCES_HINT; |
|
107 } |
|
108 «ENDDEFINE» |
|
109 |
|
110 «DEFINE getContributorId FOR gmfgen::GenEditorView-» |
|
111 «EXPAND xpt::Common::generatedMemberComment» |
|
112 public String getContributorId() { |
|
113 return «editorGen.plugin.getActivatorQualifiedClassName()».ID; |
|
114 } |
|
115 «ENDDEFINE» |
|
116 |
|
117 «DEFINE getAdapter FOR gmfgen::GenEditorView-» |
|
118 «IF !hasPropertySheet(this) || hasNavigator(this)-» |
|
119 |
|
120 «EXPAND xpt::Common::generatedMemberComment» |
|
121 public Object getAdapter(Class type) { |
|
122 «IF !hasPropertySheet(this)-» |
|
123 if (type == org.eclipse.ui.views.properties.IPropertySheetPage.class) { |
|
124 return null; |
|
125 } |
|
126 «ENDIF-» |
|
127 «IF hasNavigator(this)-» |
|
128 if (type == org.eclipse.ui.part.IShowInTargetList.class) { |
|
129 return new org.eclipse.ui.part.IShowInTargetList() { |
|
130 public String[] getShowInTargetIds() { |
|
131 return new String[] { org.eclipse.ui.navigator.resources.ProjectExplorer.VIEW_ID }; |
|
132 } |
|
133 }; |
|
134 } |
|
135 «ENDIF-» |
|
136 return super.getAdapter(type); |
|
137 } |
|
138 «ENDIF-» |
|
139 «ENDDEFINE» |
|
140 |
|
141 «DEFINE getDocumentProvider FOR gmfgen::GenEditorView-» |
|
142 «EXPAND xpt::Common::generatedMemberComment» |
|
143 protected org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider getDocumentProvider(org.eclipse.ui.IEditorInput input) { |
|
144 if («EXPAND checkEditorInput») { |
|
145 return «editorGen.plugin.getActivatorQualifiedClassName()».getInstance().getDocumentProvider(); |
|
146 } |
|
147 return super.getDocumentProvider(input); |
|
148 } |
|
149 «ENDDEFINE» |
|
150 |
|
151 «DEFINE getEditingDomain FOR gmfgen::GenEditorView-» |
|
152 «EXPAND xpt::Common::generatedMemberComment» |
|
153 public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain() { |
|
154 org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument document = getEditorInput() != null ? getDocumentProvider().getDocument(getEditorInput()) : null; |
|
155 if (document instanceof org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) { |
|
156 return ((org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) document).getEditingDomain(); |
|
157 } |
|
158 return super.getEditingDomain(); |
|
159 } |
|
160 «ENDDEFINE» |
|
161 |
|
162 «DEFINE setDocumentProvider FOR gmfgen::GenEditorView-» |
|
163 «EXPAND xpt::Common::generatedMemberComment» |
|
164 protected void setDocumentProvider(org.eclipse.ui.IEditorInput input) { |
|
165 if («EXPAND checkEditorInput») { |
|
166 setDocumentProvider(«editorGen.plugin.getActivatorQualifiedClassName()».getInstance().getDocumentProvider()); |
|
167 } else { |
|
168 super.setDocumentProvider(input); |
|
169 } |
|
170 } |
|
171 «ENDDEFINE» |
|
172 |
|
173 «DEFINE checkEditorInput FOR gmfgen::GenEditorView»«IF isIDEMode(this)»input instanceof org.eclipse.ui.IFileEditorInput || «ENDIF»input instanceof org.eclipse.emf.common.ui.URIEditorInput«ENDDEFINE» |
|
174 |
|
175 «DEFINE gotoMarker FOR gmfgen::GenEditorView-» |
|
176 «EXPAND xpt::Common::generatedMemberComment» |
|
177 public void gotoMarker(org.eclipse.core.resources.IMarker marker) { |
|
178 org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService.getInstance().gotoMarker(this, marker); |
|
179 } |
|
180 «ENDDEFINE» |
|
181 |
|
182 «DEFINE isSaveAsAllowed FOR gmfgen::GenEditorView-» |
|
183 «EXPAND xpt::Common::generatedMemberComment» |
|
184 public boolean isSaveAsAllowed() { |
|
185 return true; |
|
186 } |
|
187 «ENDDEFINE» |
|
188 |
|
189 «DEFINE doSaveAs FOR gmfgen::GenEditorView-» |
|
190 «EXPAND xpt::Common::generatedMemberComment» |
|
191 public void doSaveAs() { |
|
192 performSaveAs(new org.eclipse.core.runtime.NullProgressMonitor()); |
|
193 } |
|
194 «ENDDEFINE» |
|
195 |
|
196 «DEFINE performSaveAs FOR gmfgen::GenEditorView-» |
|
197 «EXPAND xpt::Common::generatedMemberComment» |
|
198 protected void performSaveAs(org.eclipse.core.runtime.IProgressMonitor progressMonitor) { |
|
199 org.eclipse.swt.widgets.Shell shell = getSite().getShell(); |
|
200 org.eclipse.ui.IEditorInput input = getEditorInput(); |
|
201 org.eclipse.ui.dialogs.SaveAsDialog dialog = new org.eclipse.ui.dialogs.SaveAsDialog(shell); |
|
202 org.eclipse.core.resources.IFile original = input instanceof org.eclipse.ui.IFileEditorInput ? ((org.eclipse.ui.IFileEditorInput) input).getFile() : null; |
|
203 if (original != null) { |
|
204 dialog.setOriginalFile(original); |
|
205 } |
|
206 dialog.create(); |
|
207 org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider provider = getDocumentProvider(); |
|
208 if (provider == null) { |
|
209 // editor has been programmatically closed while the dialog was open |
|
210 return; |
|
211 } |
|
212 if (provider.isDeleted(input) && original != null) { |
|
213 String message = org.eclipse.osgi.util.NLS.bind(«EXPAND xpt::Externalizer::accessorCall(i18nKeyForSavingDeletedFile(this)) FOR editorGen», original.getName()); |
|
214 dialog.setErrorMessage(null); |
|
215 dialog.setMessage(message, org.eclipse.jface.dialogs.IMessageProvider.WARNING); |
|
216 } |
|
217 if (dialog.open() == org.eclipse.jface.window.Window.CANCEL) { |
|
218 if (progressMonitor != null) { |
|
219 progressMonitor.setCanceled(true); |
|
220 } |
|
221 return; |
|
222 } |
|
223 org.eclipse.core.runtime.IPath filePath = dialog.getResult(); |
|
224 if (filePath == null) { |
|
225 if (progressMonitor != null) { |
|
226 progressMonitor.setCanceled(true); |
|
227 } |
|
228 return; |
|
229 } |
|
230 org.eclipse.core.resources.IWorkspaceRoot workspaceRoot = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot(); |
|
231 org.eclipse.core.resources.IFile file = workspaceRoot.getFile(filePath); |
|
232 final org.eclipse.ui.IEditorInput newInput = new org.eclipse.ui.part.FileEditorInput(file); |
|
233 // Check if the editor is already open |
|
234 org.eclipse.ui.IEditorMatchingStrategy matchingStrategy = getEditorDescriptor().getEditorMatchingStrategy(); |
|
235 org.eclipse.ui.IEditorReference[] editorRefs = org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); |
|
236 for (int i = 0; i < editorRefs.length; i++) { |
|
237 if (matchingStrategy.matches(editorRefs[i], newInput)) { |
|
238 org.eclipse.jface.dialogs.MessageDialog.openWarning(shell, «EXPAND xpt::Externalizer::accessorCall(titleKey(i18nKeyForSaveAsProblems(this))) FOR editorGen», «EXPAND xpt::Externalizer::accessorCall(messageKey(i18nKeyForSaveAsProblems(this))) FOR editorGen»); |
|
239 return; |
|
240 } |
|
241 } |
|
242 boolean success = false; |
|
243 try { |
|
244 provider.aboutToChange(newInput); |
|
245 getDocumentProvider(newInput).saveDocument(progressMonitor, newInput, getDocumentProvider().getDocument(getEditorInput()), true); |
|
246 success = true; |
|
247 } catch (org.eclipse.core.runtime.CoreException x) { |
|
248 org.eclipse.core.runtime.IStatus status = x.getStatus(); |
|
249 if (status == null || status.getSeverity() != org.eclipse.core.runtime.IStatus.CANCEL) { |
|
250 org.eclipse.jface.dialogs.ErrorDialog.openError(shell, «EXPAND xpt::Externalizer::accessorCall(titleKey(i18nKeyForSaveProblems(this))) FOR editorGen», «EXPAND xpt::Externalizer::accessorCall(messageKey(i18nKeyForSaveProblems(this))) FOR editorGen», x.getStatus()); |
|
251 } |
|
252 } finally { |
|
253 provider.changed(newInput); |
|
254 if (success) { |
|
255 setInput(newInput); |
|
256 } |
|
257 } |
|
258 if (progressMonitor != null) { |
|
259 progressMonitor.setCanceled(!success); |
|
260 } |
|
261 } |
|
262 «ENDDEFINE» |
|
263 |
|
264 «DEFINE getShowInContext FOR gmfgen::GenEditorView-» |
|
265 «EXPAND xpt::Common::generatedMemberComment» |
|
266 public org.eclipse.ui.part.ShowInContext getShowInContext() { |
|
267 return new org.eclipse.ui.part.ShowInContext(getEditorInput(), «IF hasNavigator(this)»getNavigatorSelection()«ELSE»getGraphicalViewer().getSelection()«ENDIF»); |
|
268 } |
|
269 «ENDDEFINE» |
|
270 |
|
271 «DEFINE getNavigatorSelection FOR gmfgen::GenNavigator-» |
|
272 |
|
273 «EXPAND xpt::Common::generatedMemberComment» |
|
274 private org.eclipse.jface.viewers.ISelection getNavigatorSelection() { |
|
275 org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument document = getDiagramDocument(); |
|
276 «EXPAND xpt::navigator::NavigatorLinkHelper::findSelectionBody-» |
|
277 } |
|
278 «ENDDEFINE» |
|
279 |
|
280 «DEFINE configureGraphicalViewer FOR gmfgen::GenEditorView-» |
|
281 «EXPAND xpt::Common::generatedMemberComment» |
|
282 protected void configureGraphicalViewer() { |
|
283 super.configureGraphicalViewer(); |
|
284 «EXPAND xpt::editor::DiagramEditorContextMenuProvider::qualifiedClassName FOR editorGen.diagram» provider = |
|
285 new «EXPAND xpt::editor::DiagramEditorContextMenuProvider::qualifiedClassName FOR editorGen.diagram»(this, getDiagramGraphicalViewer()); |
|
286 getDiagramGraphicalViewer().setContextMenu(provider); |
|
287 getSite().registerContextMenu(org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU, provider, getDiagramGraphicalViewer()); |
|
288 } |
|
289 «ENDDEFINE» |
|
290 |
|
291 «DEFINE initializeGraphicalViewer FOR gmfgen::GenEditorView-» |
|
292 «EXPAND xpt::Common::generatedMemberComment» |
|
293 protected void initializeGraphicalViewer() { |
|
294 super.initializeGraphicalViewer(); |
|
295 «EXPAND addDropTargetListener("org.eclipse.jface.util.LocalSelectionTransfer.getTransfer()")-» |
|
296 «EXPAND addDropTargetListener("org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance()")-» |
|
297 } |
|
298 «ENDDEFINE» |
|
299 |
|
300 «DEFINE addDropTargetListener(String transferAccessor) FOR gmfgen::GenEditorView-» |
|
301 getDiagramGraphicalViewer().addDropTargetListener(new DropTargetListener(getDiagramGraphicalViewer(), «transferAccessor») { |
|
302 |
|
303 protected Object getJavaObject(org.eclipse.swt.dnd.TransferData data) { |
|
304 return «transferAccessor».nativeToJava(data); |
|
305 } |
|
306 |
|
307 }); |
|
308 «ENDDEFINE» |
|
309 |
|
310 «DEFINE DropTargetListener FOR gmfgen::GenEditorView-» |
|
311 «EXPAND xpt::Common::generatedClassComment» |
|
312 private abstract class DropTargetListener extends org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener { |
|
313 |
|
314 «EXPAND DTL_constructor-» |
|
315 |
|
316 «EXPAND DTL_getObjectsBeingDropped-» |
|
317 |
|
318 «EXPAND DTL_getJavaObject-» |
|
319 |
|
320 «EXPAND DTL_additions-» |
|
321 } |
|
322 «ENDDEFINE» |
|
323 |
|
324 |
|
325 «DEFINE DTL_constructor FOR gmfgen::GenEditorView-» |
|
326 «EXPAND xpt::Common::generatedMemberComment» |
|
327 public DropTargetListener(org.eclipse.gef.EditPartViewer viewer, org.eclipse.swt.dnd.Transfer xfer) { |
|
328 super(viewer, xfer); |
|
329 } |
|
330 «ENDDEFINE» |
|
331 |
|
332 «DEFINE DTL_getObjectsBeingDropped FOR gmfgen::GenEditorView-» |
|
333 «EXPAND xpt::Common::generatedMemberComment» |
|
334 protected java.util.List getObjectsBeingDropped() { |
|
335 org.eclipse.swt.dnd.TransferData data = getCurrentEvent().currentDataType; |
|
336 java.util.Collection uris = new java.util.HashSet(); |
|
337 |
|
338 Object transferedObject = getJavaObject(data); |
|
339 if (transferedObject instanceof org.eclipse.jface.viewers.IStructuredSelection) { |
|
340 org.eclipse.jface.viewers.IStructuredSelection selection = (org.eclipse.jface.viewers.IStructuredSelection) transferedObject; |
|
341 for (java.util.Iterator it = selection.iterator(); it.hasNext();) { |
|
342 Object nextSelectedObject = it.next(); |
|
343 «REM» |
|
344 TODO: move NavigatorItem to some place available in runtime and remove |
|
345 "genEditor.getEditorGen().getNavigator() != null" test |
|
346 «ENDREM»«-» |
|
347 «IF hasNavigator(this)»if (nextSelectedObject instanceof «editorGen.navigator.getNavigatorItemQualifiedClassName()») { |
|
348 org.eclipse.gmf.runtime.notation.View view = ((«editorGen.navigator.getNavigatorItemQualifiedClassName()») nextSelectedObject).getView(); |
|
349 nextSelectedObject = view.getElement(); |
|
350 } else «ENDIF»if (nextSelectedObject instanceof org.eclipse.core.runtime.IAdaptable) { |
|
351 org.eclipse.core.runtime.IAdaptable adaptable = (org.eclipse.core.runtime.IAdaptable) nextSelectedObject; |
|
352 nextSelectedObject = adaptable.getAdapter(org.eclipse.emf.ecore.EObject.class); |
|
353 } |
|
354 |
|
355 if (nextSelectedObject instanceof org.eclipse.emf.ecore.EObject) { |
|
356 org.eclipse.emf.ecore.EObject modelElement = (org.eclipse.emf.ecore.EObject) nextSelectedObject; |
|
357 org.eclipse.emf.ecore.resource.Resource modelElementResource = modelElement.eResource(); |
|
358 uris.add(modelElementResource.getURI().appendFragment(modelElementResource.getURIFragment(modelElement))); |
|
359 } |
|
360 } |
|
361 } |
|
362 |
|
363 java.util.List result = new java.util.ArrayList(); |
|
364 for (java.util.Iterator it = uris.iterator(); it.hasNext();) { |
|
365 org.eclipse.emf.common.util.URI nextURI = (org.eclipse.emf.common.util.URI) it.next(); |
|
366 org.eclipse.emf.ecore.EObject modelObject = getEditingDomain().getResourceSet().getEObject(nextURI, true); |
|
367 result.add(modelObject); |
|
368 } |
|
369 return result; |
|
370 } |
|
371 «ENDDEFINE» |
|
372 |
|
373 «DEFINE DTL_getJavaObject FOR gmfgen::GenEditorView-» |
|
374 «EXPAND xpt::Common::generatedMemberComment» |
|
375 protected abstract Object getJavaObject(org.eclipse.swt.dnd.TransferData data); |
|
376 «ENDDEFINE» |
|
377 |
|
378 «DEFINE implementsList FOR List[String]-» |
|
379 «IF !isEmpty()» implements «EXPAND implementsListEntry FOREACH this SEPARATOR ", "»«ENDIF-» |
|
380 «ENDDEFINE» |
|
381 |
|
382 «DEFINE implementsListEntry FOR String»«this»«ENDDEFINE» |
|
383 |
|
384 «DEFINE DTL_additions FOR gmfgen::GenEditorView-» |
|
385 «ENDDEFINE» |
|
386 |
|
387 «DEFINE additions FOR gmfgen::GenEditorView-» |
|
388 «ENDDEFINE» |
|
389 |
|
390 «DEFINE i18nValues FOR gmfgen::GenEditorView-» |
|
391 «EXPAND xpt::Externalizer::messageEntry(i18nKeyForSavingDeletedFile(this), "The original file \"{0}\" has been deleted.")-» |
|
392 «EXPAND xpt::Externalizer::messageEntry(titleKey(i18nKeyForSaveAsProblems(this)), "Problem During Save As...")-» |
|
393 «EXPAND xpt::Externalizer::messageEntry(messageKey(i18nKeyForSaveAsProblems(this)), "Save could not be completed. Target file is already open in another editor.")-» |
|
394 «EXPAND xpt::Externalizer::messageEntry(titleKey(i18nKeyForSaveProblems(this)), "Save Problems")-» |
|
395 «EXPAND xpt::Externalizer::messageEntry(messageKey(i18nKeyForSaveProblems(this)), "Could not save file.")-» |
|
396 «ENDDEFINE» |
|
397 |
|
398 «DEFINE i18nAccessors FOR gmfgen::GenEditorView-» |
|
399 «EXPAND xpt::Externalizer::accessorField(i18nKeyForSavingDeletedFile(this))-» |
|
400 «EXPAND xpt::Externalizer::accessorField(titleKey(i18nKeyForSaveAsProblems(this)))-» |
|
401 «EXPAND xpt::Externalizer::accessorField(messageKey(i18nKeyForSaveAsProblems(this)))-» |
|
402 «EXPAND xpt::Externalizer::accessorField(titleKey(i18nKeyForSaveProblems(this)))-» |
|
403 «EXPAND xpt::Externalizer::accessorField(messageKey(i18nKeyForSaveProblems(this)))-» |
|
404 «ENDDEFINE» |