carbidecpp22devenv/plugins/org.eclipse.gmf.templates.legacy_1.0.0.v20090614-0839/codegen.templates/xpt/editor/Editor.xpt
author cawthron
Fri, 04 Dec 2009 11:06:59 -0600
changeset 422 033392511bf7
permissions -rw-r--r--
add files for RCL_2_2

/*
 * Copyright (c) 2006,2007 Borland Software Corporation
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Alexander Shatalin (Borland) - initial API and implementation
 */

«IMPORT "http://www.eclipse.org/gmf/2008/GenModel"»
«IMPORT "http://www.eclipse.org/emf/2002/Ecore"»
«EXTENSION xpt::editor::Utils»

«DEFINE Editor FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::copyright FOR editorGen-»
package «packageName»;

	«EXPAND xpt::Common::generatedClassComment»
public class «className»  extends org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor«EXPAND implementsList FOR getEditorImplementsList(this)» {

	«EXPAND attributes-»
	
	«EXPAND constructor-»
	
	«EXPAND getContextID-»
	«EXPAND createPaletteRoot FOR editorGen.diagram.palette-»
	
	«EXPAND getPreferencesHint-»
	
	«EXPAND getContributorId-»
	«EXPAND getAdapter-»
	
	«EXPAND getDocumentProvider-»
	
	«EXPAND getEditingDomain-»
	
	«EXPAND setDocumentProvider-»
	«IF isIDEMode(this)-»
	
		«EXPAND gotoMarker-»
		
		«EXPAND isSaveAsAllowed-»
		
		«EXPAND doSaveAs-»
		
		«EXPAND performSaveAs-»
		
		«EXPAND getShowInContext-»
		«EXPAND getNavigatorSelection FOR editorGen.navigator-»
	«ENDIF-»

	«EXPAND configureGraphicalViewer-»

	«IF editorGen.diagram.generateCreateShortcutAction()-»
	
		«EXPAND initializeGraphicalViewer-»
		
		«EXPAND DropTargetListener-»
	«ENDIF-»

	«EXPAND additions-»
}
«ENDDEFINE»

«DEFINE attributes FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public static final String ID = "«iD»"; «EXPAND xpt::Common::nonNLS»
	
	«EXPAND xpt::Common::generatedMemberComment»
public static final String CONTEXT_ID = "«contextID»"; «EXPAND xpt::Common::nonNLS»
«ENDDEFINE»

«DEFINE constructor FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public «className»() {
	super(«null != editorGen.diagram.palette && editorGen.diagram.palette.flyout»);
}
«ENDDEFINE»

«DEFINE getContextID FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected String getContextID() {
	return CONTEXT_ID;
}
«ENDDEFINE»

«DEFINE createPaletteRoot FOR gmfgen::Palette-»

	«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.gef.palette.PaletteRoot createPaletteRoot(org.eclipse.gef.palette.PaletteRoot existingPaletteRoot) {
	org.eclipse.gef.palette.PaletteRoot root = super.createPaletteRoot(existingPaletteRoot);
	new «getFactoryQualifiedClassName()»().fillPalette(root);
	return root;
}
«ENDDEFINE»

«DEFINE getPreferencesHint FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint getPreferencesHint() {
«REM» 
	XXX seems better we use preference store directly (in configureGraphicalViewer) instead all these indirect ids 
«ENDREM»«-»
	return «editorGen.plugin.getActivatorQualifiedClassName()».DIAGRAM_PREFERENCES_HINT;
}
«ENDDEFINE»

«DEFINE getContributorId FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public String getContributorId() {
	return «editorGen.plugin.getActivatorQualifiedClassName()».ID;
}
«ENDDEFINE»

«DEFINE getAdapter FOR gmfgen::GenEditorView-»
	«IF !hasPropertySheet(this) || hasNavigator(this)-»
	
	«EXPAND xpt::Common::generatedMemberComment»
public Object getAdapter(Class type) {
	«IF !hasPropertySheet(this)-»
	if (type == org.eclipse.ui.views.properties.IPropertySheetPage.class) {
		return null;
	}
	«ENDIF-»
	«IF hasNavigator(this)-»
	if (type == org.eclipse.ui.part.IShowInTargetList.class) {
		return new org.eclipse.ui.part.IShowInTargetList() {
			public String[] getShowInTargetIds() {
				return new String[] { org.eclipse.ui.navigator.resources.ProjectExplorer.VIEW_ID };
			}
		};
	}
	«ENDIF-»
	return super.getAdapter(type);
}
	«ENDIF-»
«ENDDEFINE»

«DEFINE getDocumentProvider FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider getDocumentProvider(org.eclipse.ui.IEditorInput input) {
	if («EXPAND checkEditorInput») {
		return «editorGen.plugin.getActivatorQualifiedClassName()».getInstance().getDocumentProvider();
	}
	return super.getDocumentProvider(input);
}
«ENDDEFINE»

«DEFINE getEditingDomain FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain() {
	org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument document = getEditorInput() != null ? getDocumentProvider().getDocument(getEditorInput()) : null;
	if (document instanceof org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) {
		return ((org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) document).getEditingDomain();
	}
	return super.getEditingDomain();
}
«ENDDEFINE»

«DEFINE setDocumentProvider FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected void setDocumentProvider(org.eclipse.ui.IEditorInput input) {
	if («EXPAND checkEditorInput») {
		setDocumentProvider(«editorGen.plugin.getActivatorQualifiedClassName()».getInstance().getDocumentProvider());
	} else {
		super.setDocumentProvider(input);
	}
}
«ENDDEFINE»

«DEFINE checkEditorInput FOR gmfgen::GenEditorView»«IF isIDEMode(this)»input instanceof org.eclipse.ui.IFileEditorInput || «ENDIF»input instanceof org.eclipse.emf.common.ui.URIEditorInput«ENDDEFINE»

«DEFINE gotoMarker FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public void gotoMarker(org.eclipse.core.resources.IMarker marker) {
	org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService.getInstance().gotoMarker(this, marker);
}
«ENDDEFINE»

«DEFINE isSaveAsAllowed FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public boolean isSaveAsAllowed() {
	return true;
}
«ENDDEFINE»

«DEFINE doSaveAs FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public void doSaveAs() {
	performSaveAs(new org.eclipse.core.runtime.NullProgressMonitor());
}
«ENDDEFINE»

«DEFINE performSaveAs FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected void performSaveAs(org.eclipse.core.runtime.IProgressMonitor progressMonitor) {
	org.eclipse.swt.widgets.Shell shell = getSite().getShell();
	org.eclipse.ui.IEditorInput input = getEditorInput();
	org.eclipse.ui.dialogs.SaveAsDialog dialog = new org.eclipse.ui.dialogs.SaveAsDialog(shell);
	org.eclipse.core.resources.IFile original = input instanceof org.eclipse.ui.IFileEditorInput ? ((org.eclipse.ui.IFileEditorInput) input).getFile() : null;
	if (original != null) {
		dialog.setOriginalFile(original);
	}
	dialog.create();
	org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider provider = getDocumentProvider();
	if (provider == null) {
		// editor has been programmatically closed while the dialog was open
		return;
	}
	if (provider.isDeleted(input) && original != null) {
		String message = org.eclipse.osgi.util.NLS.bind(«EXPAND xpt::Externalizer::accessorCall(i18nKeyForSavingDeletedFile(this)) FOR editorGen», original.getName());
		dialog.setErrorMessage(null);
		dialog.setMessage(message, org.eclipse.jface.dialogs.IMessageProvider.WARNING);
	}
	if (dialog.open() == org.eclipse.jface.window.Window.CANCEL) {
		if (progressMonitor != null) {
			progressMonitor.setCanceled(true);
		}
		return;
	}
	org.eclipse.core.runtime.IPath filePath = dialog.getResult();
	if (filePath == null) {
		if (progressMonitor != null) {
			progressMonitor.setCanceled(true);
		}
		return;
	}
	org.eclipse.core.resources.IWorkspaceRoot workspaceRoot = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot();
	org.eclipse.core.resources.IFile file = workspaceRoot.getFile(filePath);
	final org.eclipse.ui.IEditorInput newInput = new org.eclipse.ui.part.FileEditorInput(file);
	// Check if the editor is already open
	org.eclipse.ui.IEditorMatchingStrategy matchingStrategy = getEditorDescriptor().getEditorMatchingStrategy();
	org.eclipse.ui.IEditorReference[] editorRefs = org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
	for (int i = 0; i < editorRefs.length; i++) {
		if (matchingStrategy.matches(editorRefs[i], newInput)) {
			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»);
			return;
		}
	}
	boolean success = false;
	try {
		provider.aboutToChange(newInput);
		getDocumentProvider(newInput).saveDocument(progressMonitor, newInput, getDocumentProvider().getDocument(getEditorInput()), true);
		success = true;
	} catch (org.eclipse.core.runtime.CoreException x) {
		org.eclipse.core.runtime.IStatus status = x.getStatus();
		if (status == null || status.getSeverity() != org.eclipse.core.runtime.IStatus.CANCEL) {
			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());
		}
	} finally {
		provider.changed(newInput);
		if (success) {
			setInput(newInput);
		}
	}
	if (progressMonitor != null) {
		progressMonitor.setCanceled(!success);
	}
}
«ENDDEFINE»

«DEFINE getShowInContext FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public org.eclipse.ui.part.ShowInContext getShowInContext() {
	return new org.eclipse.ui.part.ShowInContext(getEditorInput(), «IF hasNavigator(this)»getNavigatorSelection()«ELSE»getGraphicalViewer().getSelection()«ENDIF»);
}
«ENDDEFINE»

«DEFINE getNavigatorSelection FOR gmfgen::GenNavigator-»
	
	«EXPAND xpt::Common::generatedMemberComment»
private org.eclipse.jface.viewers.ISelection getNavigatorSelection() {
	org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument document = getDiagramDocument();
	«EXPAND xpt::navigator::NavigatorLinkHelper::findSelectionBody-»
}
«ENDDEFINE»

«DEFINE configureGraphicalViewer FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
	protected void configureGraphicalViewer() {
		super.configureGraphicalViewer();
		«EXPAND xpt::editor::DiagramEditorContextMenuProvider::qualifiedClassName FOR editorGen.diagram» provider =
				new «EXPAND xpt::editor::DiagramEditorContextMenuProvider::qualifiedClassName FOR editorGen.diagram»(this, getDiagramGraphicalViewer());
		getDiagramGraphicalViewer().setContextMenu(provider);
		getSite().registerContextMenu(org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU, provider, getDiagramGraphicalViewer());
	}
«ENDDEFINE»

«DEFINE initializeGraphicalViewer FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected void initializeGraphicalViewer() {
	super.initializeGraphicalViewer();
	«EXPAND addDropTargetListener("org.eclipse.jface.util.LocalSelectionTransfer.getTransfer()")-»
	«EXPAND addDropTargetListener("org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance()")-»
}
«ENDDEFINE»

«DEFINE addDropTargetListener(String transferAccessor) FOR gmfgen::GenEditorView-»
getDiagramGraphicalViewer().addDropTargetListener(new DropTargetListener(getDiagramGraphicalViewer(), «transferAccessor») {

	protected Object getJavaObject(org.eclipse.swt.dnd.TransferData data) {
		return «transferAccessor».nativeToJava(data);
	}

});
«ENDDEFINE»

«DEFINE DropTargetListener FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedClassComment»
private abstract class DropTargetListener extends org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener {

	«EXPAND DTL_constructor-»

	«EXPAND DTL_getObjectsBeingDropped-»

	«EXPAND DTL_getJavaObject-»

	«EXPAND DTL_additions-»
}
«ENDDEFINE»


«DEFINE DTL_constructor FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
public DropTargetListener(org.eclipse.gef.EditPartViewer viewer, org.eclipse.swt.dnd.Transfer xfer) {
	super(viewer, xfer);
}
«ENDDEFINE»

«DEFINE DTL_getObjectsBeingDropped FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected java.util.List getObjectsBeingDropped() {
	org.eclipse.swt.dnd.TransferData data = getCurrentEvent().currentDataType;
	java.util.Collection uris = new java.util.HashSet();

	Object transferedObject = getJavaObject(data);
	if (transferedObject instanceof org.eclipse.jface.viewers.IStructuredSelection) {
		org.eclipse.jface.viewers.IStructuredSelection selection = (org.eclipse.jface.viewers.IStructuredSelection) transferedObject;
		for (java.util.Iterator it = selection.iterator(); it.hasNext();) {
			Object nextSelectedObject = it.next();
«REM»
	TODO: move NavigatorItem to some place available in runtime and remove 
	"genEditor.getEditorGen().getNavigator() != null" test
«ENDREM»«-»
			«IF hasNavigator(this)»if (nextSelectedObject instanceof «editorGen.navigator.getNavigatorItemQualifiedClassName()») {
				org.eclipse.gmf.runtime.notation.View view = ((«editorGen.navigator.getNavigatorItemQualifiedClassName()») nextSelectedObject).getView();
				nextSelectedObject = view.getElement();
			} else «ENDIF»if (nextSelectedObject instanceof org.eclipse.core.runtime.IAdaptable) {
				org.eclipse.core.runtime.IAdaptable adaptable = (org.eclipse.core.runtime.IAdaptable) nextSelectedObject;
				nextSelectedObject = adaptable.getAdapter(org.eclipse.emf.ecore.EObject.class);
			}

			if (nextSelectedObject instanceof org.eclipse.emf.ecore.EObject) {
				org.eclipse.emf.ecore.EObject modelElement = (org.eclipse.emf.ecore.EObject) nextSelectedObject;
				org.eclipse.emf.ecore.resource.Resource modelElementResource = modelElement.eResource();
				uris.add(modelElementResource.getURI().appendFragment(modelElementResource.getURIFragment(modelElement)));	
			}
		}
	}

	java.util.List result = new java.util.ArrayList();
	for (java.util.Iterator it = uris.iterator(); it.hasNext();) {
		org.eclipse.emf.common.util.URI nextURI = (org.eclipse.emf.common.util.URI) it.next();
		org.eclipse.emf.ecore.EObject modelObject = getEditingDomain().getResourceSet().getEObject(nextURI, true);
		result.add(modelObject);
	}
	return result;
}
«ENDDEFINE»

«DEFINE DTL_getJavaObject FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Common::generatedMemberComment»
protected abstract Object getJavaObject(org.eclipse.swt.dnd.TransferData data);
«ENDDEFINE»

«DEFINE implementsList FOR List[String]-»
«IF !isEmpty()» implements «EXPAND implementsListEntry FOREACH this SEPARATOR ", "»«ENDIF-»
«ENDDEFINE»

«DEFINE implementsListEntry FOR String»«this»«ENDDEFINE»

«DEFINE DTL_additions FOR gmfgen::GenEditorView-»
«ENDDEFINE»

«DEFINE additions FOR gmfgen::GenEditorView-»
«ENDDEFINE»

«DEFINE i18nValues FOR gmfgen::GenEditorView-»
«EXPAND xpt::Externalizer::messageEntry(i18nKeyForSavingDeletedFile(this), "The original file \"{0}\" has been deleted.")-»
«EXPAND xpt::Externalizer::messageEntry(titleKey(i18nKeyForSaveAsProblems(this)), "Problem During Save As...")-»
«EXPAND xpt::Externalizer::messageEntry(messageKey(i18nKeyForSaveAsProblems(this)), "Save could not be completed. Target file is already open in another editor.")-»
«EXPAND xpt::Externalizer::messageEntry(titleKey(i18nKeyForSaveProblems(this)), "Save Problems")-»
«EXPAND xpt::Externalizer::messageEntry(messageKey(i18nKeyForSaveProblems(this)), "Could not save file.")-»
«ENDDEFINE»

«DEFINE i18nAccessors FOR gmfgen::GenEditorView-»
	«EXPAND xpt::Externalizer::accessorField(i18nKeyForSavingDeletedFile(this))-»
	«EXPAND xpt::Externalizer::accessorField(titleKey(i18nKeyForSaveAsProblems(this)))-»
	«EXPAND xpt::Externalizer::accessorField(messageKey(i18nKeyForSaveAsProblems(this)))-»
	«EXPAND xpt::Externalizer::accessorField(titleKey(i18nKeyForSaveProblems(this)))-»
	«EXPAND xpt::Externalizer::accessorField(messageKey(i18nKeyForSaveProblems(this)))-»
«ENDDEFINE»