Support for direct execution of 3D models. (Needs seperate icon.)
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/plugin.xml b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/plugin.xml
index 270c76c..f36f6a1 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/plugin.xml
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/plugin.xml
@@ -5,7 +5,7 @@
  <copyright>
  </copyright>
 
- $Id: plugin.xml,v 1.14 2010/05/06 04:29:14 mparker Exp $
+ $Id: plugin.xml,v 1.15 2010/06/03 17:04:40 mparker Exp $
 -->
 
 <plugin>
@@ -69,6 +69,11 @@
        </command>
        <command
              categoryId="org.eclipse.amp.axf.ui"
+             id="org.eclipse.amp.escape.runtime.executeAMF3D"
+             name="Execute 3D">
+       </command>
+       <command
+             categoryId="org.eclipse.amp.axf.ui"
              id="org.eclipse.amp.escape.runtime.executeAMFHeadless"
              name="Execute Headless">
        </command>
@@ -132,6 +137,14 @@
 					</reference>
 				</visibleWhen>
 			</command>
+			<command commandId="org.eclipse.amp.escape.runtime.executeAMF3D"
+				icon="icons/etool16/execute.gif" label="Execute 3D" style="push"
+				tooltip="Execute Escape AMF model with 3D visualization.">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="org.eclipse.amp.escape.amf.allowexecute">
+					</reference>
+				</visibleWhen>
+			</command>
 			<command commandId="org.eclipse.amp.escape.runtime.executeAMFHeadless"
 				icon="icons/etool16/execute_headless.gif" label="Execute Headless" style="push"
 				tooltip="Execute Escape AMF model without views.">
@@ -207,6 +220,15 @@
 				</visibleWhen>
 			</command>
 			<command
+         commandId="org.eclipse.amp.escape.runtime.executeAMF3D"
+         icon="icons/etool16/execute.gif"
+         label="Execute 3D"
+         style="push"
+         tooltip="Execute Escape AMF model with 3D visualization.">
+				<visibleWhen checkEnabled="true">
+				</visibleWhen>
+			</command>
+			<command
          commandId="org.eclipse.amp.escape.runtime.executeAMFHeadless"
          icon="icons/etool16/execute_headless.gif"
          label="Execute Headless"
@@ -275,6 +297,14 @@
 					</reference>
 				</visibleWhen>
 			</command>
+			<command commandId="org.eclipse.amp.escape.runtime.executeAMF3D"
+				icon="icons/etool16/execute.gif" label="Execute 3D" style="push"
+				tooltip="Execute Escape AMF model with 3D visualization.">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="org.eclipse.amp.escape.amf.allowexecute">
+					</reference>
+				</visibleWhen>
+			</command>
 			<command commandId="org.eclipse.amp.escape.runtime.executeAMFHeadless"
 				icon="icons/etool16/execute_headless.gif" label="Execute Headless" style="push"
 				tooltip="Execute Escape AMF model without views.">
@@ -408,6 +438,20 @@
           </enabledWhen>

        </handler>
        <handler
+             class="org.eclipse.amp.escape.amf.ide.ExecuteAMF3DHandler"
+             commandId="org.eclipse.amp.escape.runtime.executeAMF3D">
+          <activeWhen>
+          <reference
+                definitionId="org.eclipse.amp.escape.amf.allowexecute">
+          </reference>
+          </activeWhen>
+          <enabledWhen>
+          <reference
+                definitionId="org.eclipse.amp.escape.amf.allowexecute">
+          </reference>
+          </enabledWhen>
+       </handler>
+       <handler
              class="org.eclipse.amp.escape.amf.ide.ExecuteAMFHeadlessHandler"
              commandId="org.eclipse.amp.escape.runtime.executeAMFHeadless">
           <activeWhen>
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMF3DHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMF3DHandler.java
new file mode 100644
index 0000000..899aa0b
--- /dev/null
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMF3DHandler.java
@@ -0,0 +1,27 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2009 Metascape, LLC.
+ * 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:
+ *   Metascape - Initial API and Implementation
+ *
+ * </copyright>
+ *
+ */
+package org.eclipse.amp.escape.amf.ide;

+

+import org.metaabm.SImplementation;
+

+
+public class ExecuteAMF3DHandler extends ExecuteAMFHandler {

+
+	protected String getModelClass(SImplementation impl) {
+		final String modelClassName = impl.getQualifiedName() + "3D";
+		return modelClassName;
+	}

+}

diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
index d17558a..f036c76 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
@@ -23,50 +23,54 @@
 import org.eclipse.amp.escape.ide.EscapeIDEPlugin;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IProgressMonitor;
-
 import org.metaabm.SContext;
 import org.metaabm.SImplementation;
 import org.metaabm.xsd.MetaABMPersist;
 

 public class ExecuteAMFHandler extends ExecuteHandler {

 

-    protected IResource modelResource;
-    private SContext model;
+	protected IResource modelResource;
+	private SContext model;
 
-    public ExecuteAMFHandler() {

-        super(false);

-    }

+	public ExecuteAMFHandler() {

+		super(false);

+	}

 

-    public ExecuteAMFHandler(boolean headless) {

-        super(headless);

-    }

+	public ExecuteAMFHandler(boolean headless) {

+		super(headless);

+	}

 

-    protected void executeOpen(EclipseEscapeRunner eclipseRunner, Object executed, IProgressMonitor monitor) {

-        if (executed instanceof IResource) {

-            modelResource = (IResource) executed;

-            File file = modelResource.getLocation().toFile();

-            if (modelResource.getFileExtension().equals("metaabm")) {

-                try {

-                    model = MetaABMPersist.create(file).load();

-                    SImplementation impl = model.getImplementation();

-                    final String modelClassName = impl.getQualifiedName();

-                    eclipseRunner.open(modelResource, modelClassName, model.getLabel());

-                } catch (IOException e) {

-                    EscapeIDEPlugin.warn("Couldn't load model.", e);

-                }

-            }

-        }

-    }

-

-    protected boolean handleSelect(Object sel) {

-        return sel instanceof IResource && ((IResource) sel).getFileExtension() != null

-        && ((IResource) sel).getFileExtension().equals("metaabm");

-    }
+	protected void executeOpen(EclipseEscapeRunner eclipseRunner, Object executed, IProgressMonitor monitor) {

+		if (executed instanceof IResource) {

+			modelResource = (IResource) executed;

+			File file = modelResource.getLocation().toFile();

+			if (modelResource.getFileExtension().equals("metaabm")) {

+				try {

+					model = MetaABMPersist.create(file).load();

+					SImplementation impl = model.getImplementation();

+					final String modelClassName = getModelClass(impl);

+					eclipseRunner.open(modelResource, modelClassName, model.getLabel());

+				} catch (IOException e) {

+					EscapeIDEPlugin.warn("Couldn't load model.", e);

+				}

+			}

+		}

+	}
 
-    /**
-     * @return the model
-     */
-    public SContext getModel() {
-        return model;
-    }

+	protected String getModelClass(SImplementation impl) {
+		final String modelClassName = impl.getQualifiedName();
+		return modelClassName;
+	}

+

+	protected boolean handleSelect(Object sel) {

+		return sel instanceof IResource && ((IResource) sel).getFileExtension() != null

+		&& ((IResource) sel).getFileExtension().equals("metaabm");

+	}
+
+	/**
+	 * @return the model
+	 */
+	public SContext getModel() {
+		return model;
+	}

 }