Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src/org/eclipse/qvtd/xtext/qvtrelation/ui/commands/SaveModelMorfASHandler.java')
-rw-r--r--plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src/org/eclipse/qvtd/xtext/qvtrelation/ui/commands/SaveModelMorfASHandler.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src/org/eclipse/qvtd/xtext/qvtrelation/ui/commands/SaveModelMorfASHandler.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src/org/eclipse/qvtd/xtext/qvtrelation/ui/commands/SaveModelMorfASHandler.java
new file mode 100644
index 000000000..4b769c45b
--- /dev/null
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src/org/eclipse/qvtd/xtext/qvtrelation/ui/commands/SaveModelMorfASHandler.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 E.D.Willink and others.
+ * 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:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.qvtd.xtext.qvtrelation.ui.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ocl.examples.xtext.base.ui.messages.BaseUIMessages;
+import org.eclipse.ocl.examples.xtext.base.utilities.BaseCSResource;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.IXtextDocument;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+public class SaveModelMorfASHandler extends AbstractHandler
+{
+ public SaveModelMorfASHandler() {}
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
+ if (window == null) {
+ return null;
+ }
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);
+ if (!(editor instanceof XtextEditor)) {
+ return null;
+ }
+ IEditorInput editorInput = editor.getEditorInput();
+ if (!(editorInput instanceof IFileEditorInput)) {
+ return null;
+ }
+ IXtextDocument document = ((XtextEditor)editor).getDocument();
+ URI asURI = null;
+ try {
+ asURI = document.readOnly(new IUnitOfWork<URI, XtextResource>()
+ {
+ public URI exec(@Nullable XtextResource resource) throws Exception {
+ if (resource instanceof BaseCSResource) {
+ Resource asResource = ((BaseCSResource)resource).getASResource(null);
+ return asResource.getURI();
+ }
+ else {
+ return null;
+ }
+ }
+ });
+ } catch (Exception e) {}
+ if (asURI == null) {
+ return null;
+ }
+ IFile srcFile = ((IFileEditorInput)editorInput).getFile();
+ IProject srcProject = srcFile.getProject();
+ URI projectURI = URI.createPlatformResourceURI(srcProject.getFullPath().toString() + "/", true);
+ URI outURI = asURI.deresolve(projectURI);
+ IPath outPath = new Path(outURI.toString());
+ IFile outFile = srcProject.getFile(outPath);
+ Shell shell = editor.getEditorSite().getShell();
+ SaveAsDialog dlg = new SaveAsDialog(shell);
+ dlg.setOriginalFile(outFile);
+ dlg.create();
+ dlg.getShell().setText(BaseUIMessages.SaveAS_ShellTitle);
+ dlg.setTitle(BaseUIMessages.SaveAS_Title);
+ dlg.setMessage(NLS.bind(BaseUIMessages.SaveAS_Description, asURI));
+ int status = dlg.open();
+ if (status != SaveAsDialog.OK) {
+ return null;
+ }
+ final IPath file = dlg.getResult();
+ if (file == null) {
+ return null;
+ }
+ final URI newURI = URI.createPlatformResourceURI(file.toString(), true);
+ try {
+ document.modify(new IUnitOfWork<Object, XtextResource>()
+ {
+ public Object exec(@Nullable XtextResource resource) throws Exception {
+ if (resource instanceof BaseCSResource) {
+ Resource asResource = ((BaseCSResource)resource).getASResource(null);
+ URI oldURI = asResource.getURI();
+ try {
+ asResource.setURI(newURI);
+ asResource.save(null);
+ } finally {
+ asResource.setURI(oldURI);
+ }
+ }
+ return null;
+ }
+ });
+ } catch (Throwable e) {
+ MessageDialog.openError( shell, BaseUIMessages.SaveError_Title,
+ e.getLocalizedMessage());
+ }
+ return null;
+ }
+
+// public Resource createFlatObjects(@NonNull Collection asResource, @NonNull URI flatURI) {
+// for (TreeIterator<EObject> tit = asResource.getAllContents(); tit.hasNext(); ) {
+// EObject = tit.next();
+// }
+// }
+}

Back to the top