[371018] Experimental Complete OCL SaveAs action
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.properties b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.properties
index 443cdda..e747538 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.properties
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.properties
@@ -22,6 +22,10 @@
 MF_LoadOCLResource_label = Load Complete OCL Resource
 MF_OpenQuickOutline = Open the quick outline.
 MF_QuickOutline = Quick Outline
+MF_SaveAs = Save As
+MF_SaveAsPivot = Pivot
+MF_SaveAsPivot_Command = Save As Pivot Command
+MF_SaveAsPivot_Description = Save file changing format to Pivot
 MF_SyntaxColoring = Syntax Coloring
 MF_Templates = Templates
 MF_TriggerExpensiveValidation = Trigger expensive validation
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.xml b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.xml
index 8f6d864..b6aca93 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.xml
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/plugin.xml
@@ -222,5 +222,38 @@
 			locationURI="popup:#TextEditorContext?after=group.open"  TextEditor, Xtexteditor, not Ecore editor
 		-->
 	</extension>
+	<extension point="org.eclipse.ui.handlers">
+	  <handler commandId="org.eclipse.ocl.examples.xtext.completeocl.ui.outline.SaveAsPivotCommand"
+	    class="org.eclipse.ocl.examples.xtext.completeocl.ui.commands.SaveAsPivotHandler"/>
+	</extension>
+	<extension point="org.eclipse.ui.commands">
+	  <command id="org.eclipse.ocl.examples.xtext.completeocl.ui.outline.SaveAsPivotCommand"
+	    name="%MF_SaveAsPivot_Command" description="%MF_SaveAsPivot_Description"/>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+      <menuContribution locationURI="popup:#TextEditorContext?before=group.open">
+         <menu id="org.eclipse.ocl.examples.xtext.completeocl.ui.SaveAs" label="%MF_SaveAs"/>         
+      </menuContribution>
+	  <menuContribution locationURI="popup:org.eclipse.ocl.examples.xtext.completeocl.ui.SaveAs?after=additions">
+	    <command commandId="org.eclipse.ocl.examples.xtext.completeocl.ui.outline.SaveAsPivotCommand"
+	      label="%MF_SaveAsPivot">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="org.eclipse.ocl.examples.xtext.completeocl.CompleteOCL.Editor.opened">
+                </reference>
+            </visibleWhen>
+	    </command>
+	  </menuContribution>
+	  <menuContribution locationURI="popup:#TextEditorContext?after=group.rest">
+	    <command commandId="org.eclipse.ocl.examples.xtext.oclinecore.ui.outline.CreateDynamicInstanceCommand"
+	      label="%MF_CreateDynamicInstance">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="org.eclipse.ocl.examples.xtext.oclinecore.OCLinEcore.Editor.opened">
+                </reference>
+            </visibleWhen>
+	    </command>
+	  </menuContribution>
+	</extension>
 
 </plugin>
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/SaveAsPivotHandler.java b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/SaveAsPivotHandler.java
new file mode 100644
index 0000000..315e2ab
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/SaveAsPivotHandler.java
@@ -0,0 +1,64 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2012 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
+ *
+ * </copyright>
+ */
+package org.eclipse.ocl.examples.xtext.completeocl.ui.commands;
+
+import java.util.Map;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.ocl.examples.xtext.base.utilities.BaseCSResource;
+import org.eclipse.ocl.examples.xtext.base.utilities.CS2PivotResourceAdapter;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+public class SaveAsPivotHandler extends AbstractHandler
+{
+	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;
+		}
+		final String file = "C:/Temp/test.xmi";
+		final Map<?, ?> saveOptions = null;
+		IDocumentProvider documentProvider = ((XtextEditor)editor).getDocumentProvider();
+		XtextDocument editorDocument = (XtextDocument) documentProvider.getDocument(editor.getEditorInput());
+		editorDocument.modify(new IUnitOfWork<Object, XtextResource>()
+		{
+
+			public Object exec(XtextResource resource) throws Exception {
+				CS2PivotResourceAdapter csAdapter = CS2PivotResourceAdapter.getAdapter((BaseCSResource)resource, null);
+				csAdapter.refreshPivotMappings(null);		// FIXME redundant
+				Resource pivotResource = csAdapter.getPivotResource(resource);
+				pivotResource.setURI(URI.createFileURI(file));
+				pivotResource.save(saveOptions);
+				return null;
+			}
+		});
+		return null;
+	}
+}