Add "Set as Default Top" and "Generate as Top" feature
1. Allow users to set the default Top capsule. Default top capsule is
stored in model eannotation.
2. Provide users ability to generate any capsule as a top capsule from
the context menu.
Change-Id: Ife8c2c6dbe8d115758cedc67d811e1e95daec13a
Signed-off-by: yroh <ysroh@zeligsoft.com>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java
index 8735238..7ed2b34 100644
--- a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java
@@ -221,7 +221,8 @@
arrayInit );
elements.addElement( slotsVar );
- new CppMainGenerator().generate( cpp.getOutputFolder().getAbsolutePath() + "/main.cc", deployment, slotsVar );
+ new CppMainGenerator().generate(cpp.getOutputFolder().getAbsolutePath() + "/main.cc", topCapsule.getName(),
+ deployment, slotsVar);
return true;
}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend
index 42c85fd..4e736c8 100644
--- a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend
@@ -15,20 +15,20 @@
class CppMainGenerator {
- def generate(String filePath, Deployment deployment, Variable slotsVariable) {
+ def generate(String filePath, String topName, Deployment deployment, Variable slotsVariable) {
val file = new File(filePath);
val writer = new BufferedWriter(new FileWriter(file));
- writer.write(doGenerate(deployment, slotsVariable).toString)
+ writer.write(doGenerate(topName, deployment, slotsVariable).toString)
writer.close
}
- def private doGenerate(Deployment deployment, Variable slotsVariable) {
+ def private doGenerate(String topName, Deployment deployment, Variable slotsVariable) {
'''
#include "umlrtmain.hh"
-#include "Controllers.hh"
+#include "«topName»Controllers.hh"
#include "umlrtcapsuletocontrollermap.hh"
#include "umlrtmessagepool.hh"
#include "umlrtsignalelementpool.hh"
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java
index d32f67a..1320c27 100644
--- a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java
@@ -130,7 +130,7 @@
ElementList elementList = elementLists.get( k );
if( elementList == null )
{
- elementList = new ElementList( new FileName( element.getName() + "_Controllers" ) );
+ elementList = new ElementList( new FileName( element.getName() + "Controllers" ) );
elementLists.put( k, elementList );
}
return elementList;
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF
index 26674cb..cb2b884 100644
--- a/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF
@@ -22,7 +22,9 @@
org.eclipse.papyrusrt.codegen.cpp,
org.eclipse.papyrusrt.codegen.utils,
org.eclipse.xtext.xbase.lib,
- org.eclipse.papyrusrt.codegen.xtumlrt.trans
+ org.eclipse.papyrusrt.codegen.xtumlrt.trans,
+ org.eclipse.core.expressions,
+ org.eclipse.papyrus.emf.facet.custom.metamodel;bundle-version="1.1.0"
Export-Package: org.eclipse.papyrusrt.codegen.papyrus
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.eclipse.papyrusrt.codegen.papyrus.Activator
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml
index 0b8cd4d..cc96ff2 100644
--- a/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml
@@ -21,13 +21,13 @@
categoryId="org.eclipse.papyrusrt.codegen.papyrus.commands-category"
description="Set Default Top for UML-RT Model"
id="org.eclipse.papyrusrt.codegen.papyrus.setAsDefaultTop"
- name="Set As Default Top">
+ name="Set as Default Top">
</command>
<command
categoryId="org.eclipse.papyrusrt.codegen.papyrus.commands-category"
description="Generate a capsule as Top"
id="org.eclipse.papyrusrt.codegen.papyrus.generateAsTop"
- name="Generate As Top">
+ name="Generate as Top">
</command>
</extension>
@@ -41,11 +41,11 @@
commandId="org.eclipse.papyrusrt.codegen.papyrus.codegen.regen">
</handler>
<handler
- class="org.eclipse.papyrusrt.codegen.papyrus.internal.SetAsDefaultTop"
+ class="org.eclipse.papyrusrt.codegen.papyrus.handlers.SetDefaultTopActionHandler"
commandId="org.eclipse.papyrusrt.codegen.papyrus.setAsDefaultTop">
</handler>
<handler
- class="org.eclipse.papyrusrt.codegen.papyrus.internal.GenerateAsTop"
+ class="org.eclipse.papyrusrt.codegen.papyrus.handlers.GenerateAsTopActionHandler"
commandId="org.eclipse.papyrusrt.codegen.papyrus.generateAsTop">
</handler>
</extension>
@@ -56,27 +56,59 @@
locationURI="popup:org.eclipse.papyrus.views.modelexplorer.modelexplorer.popup">
<command
commandId="org.eclipse.papyrusrt.codegen.papyrus.codegen">
- <visibleWhen checkEnabled="true"/>
+ <visibleWhen
+ checkEnabled="false">
+ <test
+ forcePluginActivation="true"
+ property="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester.eobjecttype"
+ value="Model">
+ </test>
+ </visibleWhen>
</command>
<command
commandId="org.eclipse.papyrusrt.codegen.papyrus.codegen.regen">
- <visibleWhen
- checkEnabled="true">
- </visibleWhen>
+ <visibleWhen
+ checkEnabled="false">
+ <test
+ forcePluginActivation="true"
+ property="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester.eobjecttype"
+ value="Model">
+ </test>
+ </visibleWhen>
</command>
<command
commandId="org.eclipse.papyrusrt.codegen.papyrus.setAsDefaultTop"
style="push">
<visibleWhen
- checkEnabled="true">
- <instanceof
- value="org.eclipse.uml2.uml.Class">
- </instanceof>
+ checkEnabled="false">
+ <and>
+ <test
+ forcePluginActivation="true"
+ property="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester.stereotype"
+ value="UMLRealTime::Capsule">
+ </test>
+ <count
+ value="1">
+ </count>
+ </and>
</visibleWhen>
</command>
<command
commandId="org.eclipse.papyrusrt.codegen.papyrus.generateAsTop"
style="push">
+ <visibleWhen
+ checkEnabled="false">
+ <and>
+ <test
+ forcePluginActivation="true"
+ property="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester.stereotype"
+ value="UMLRealTime::Capsule">
+ </test>
+ <count
+ value="1">
+ </count>
+ </and>
+ </visibleWhen>
</command>
</menuContribution>
</extension>
@@ -102,4 +134,21 @@
sequence="CTRL+R G">
</key>
</extension>
+ <extension
+ point="org.eclipse.core.expressions.propertyTesters">
+ <propertyTester
+ class="org.eclipse.papyrusrt.codegen.papyrus.propertytester.UMLRTPropertyTester"
+ id="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester.umlrtstereotype"
+ namespace="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester"
+ properties="stereotype"
+ type="java.lang.Object">
+ </propertyTester>
+ <propertyTester
+ class="org.eclipse.papyrusrt.codegen.papyrus.propertytester.UMLRTPropertyTester"
+ id="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester.umlrtobjecttype"
+ namespace="org.eclipse.papyrusrt.codegen.papyrus.internal.propertytester"
+ properties="eobjecttype"
+ type="java.lang.Object">
+ </propertyTester>
+ </extension>
</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/handlers/GenerateAsTopActionHandler.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/handlers/GenerateAsTopActionHandler.java
new file mode 100644
index 0000000..a43682e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/handlers/GenerateAsTopActionHandler.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus.handlers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrusrt.codegen.papyrus.UMLRTGenerator;
+import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.uml2.uml.Class;
+
+public class GenerateAsTopActionHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ ISelection sel = HandlerUtil.getCurrentSelection(event);
+ if (!(sel instanceof IStructuredSelection))
+ return null;
+
+ IStructuredSelection selection = (IStructuredSelection) sel;
+ Object obj = selection.getFirstElement();
+ final EObject eobj = EMFHelper.getEObject(obj);
+ if (eobj == null)
+ throw new IllegalArgumentException(obj.getClass().getCanonicalName() + " is not an EObject");
+
+ if (eobj instanceof Class) {
+ if (UMLRealTimeProfileUtil.isCapsule((Class) eobj)) {
+
+ List<EObject> targets = new ArrayList<EObject>();
+
+ targets.add(((Class) eobj).getModel());
+
+ final IStatus status = UMLRTGenerator.generate(targets, ((Class) eobj).getLabel());
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ ErrorDialog.openError(Display.getCurrent().getActiveShell(), "UML-RT Code Generator", null,
+ status);
+ }
+ });
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/handlers/SetDefaultTopActionHandler.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/handlers/SetDefaultTopActionHandler.java
new file mode 100644
index 0000000..67d172e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/handlers/SetDefaultTopActionHandler.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
+
+public class SetDefaultTopActionHandler extends AbstractHandler {
+
+ public final static String DEFAULT_TOP_ANNO = "UMLRT_Default_top";
+ public final static String DEFAULT_TOP_KEY = "top_name";
+
+ @Override
+ protected void setBaseEnabled(boolean state) {
+ // TODO Auto-generated method stub
+ super.setBaseEnabled(state);
+ }
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ ISelection sel = HandlerUtil.getCurrentSelection(event);
+ if (!(sel instanceof IStructuredSelection))
+ return null;
+
+ IStructuredSelection selection = (IStructuredSelection) sel;
+ Object obj = selection.getFirstElement();
+ final EObject eobj = EMFHelper.getEObject(obj);
+ if (eobj == null)
+ throw new IllegalArgumentException(obj.getClass().getCanonicalName() + " is not an EObject");
+
+ if (eobj instanceof Class) {
+ if (UMLRealTimeProfileUtil.isCapsule((Class) eobj)) {
+ final Element model = ((Class) eobj).getModel();
+
+ TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(eobj);
+ RecordingCommand command = new RecordingCommand(domain, "Set Default Top") {
+ protected void doExecute() {
+ EAnnotation anno = model.getEAnnotation(DEFAULT_TOP_ANNO);
+ if (anno == null) {
+ anno = model.createEAnnotation(DEFAULT_TOP_ANNO);
+ }
+ anno.getDetails().put(DEFAULT_TOP_KEY, ((Class) eobj).getLabel());
+ }
+ };
+ domain.getCommandStack().execute(command);
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/GenerateAsTop.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/GenerateAsTop.java
deleted file mode 100644
index ef5ceea..0000000
--- a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/GenerateAsTop.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.eclipse.papyrusrt.codegen.papyrus.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
-import org.eclipse.papyrusrt.codegen.papyrus.UMLRTGenerator;
-import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.uml2.uml.Class;
-
-public class GenerateAsTop extends AbstractHandler {
-
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- ISelection sel = HandlerUtil.getCurrentSelection( event );
- if( ! ( sel instanceof IStructuredSelection ) )
- return null;
-
- IStructuredSelection selection = (IStructuredSelection)sel;
- Object obj = selection.getFirstElement();
- final EObject eobj = EMFHelper.getEObject( obj );
- if( eobj == null )
- throw new IllegalArgumentException( obj.getClass().getCanonicalName() + " is not an EObject" );
-
- if(eobj instanceof Class) {
- if(UMLRealTimeProfileUtil.isCapsule((Class) eobj)) {
-
- List<EObject> targets = new ArrayList<EObject>();
-
- targets.add(eobj);
-
- final IStatus status = UMLRTGenerator.generate( targets, ((Class) eobj).getLabel());
- Display.getDefault().syncExec( new Runnable()
- {
- @Override
- public void run()
- {
- ErrorDialog.openError( Display.getCurrent().getActiveShell(), "UML-RT Code Generator", null, status );
- }
- } );
- }
- }
- return null;
- }
-
-}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/SetAsDefaultTop.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/SetAsDefaultTop.java
deleted file mode 100644
index ec77bfe..0000000
--- a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/SetAsDefaultTop.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.eclipse.papyrusrt.codegen.papyrus.internal;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.OperationHistoryFactory;
-import org.eclipse.emf.ecore.EAnnotation;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.emf.transaction.util.TransactionUtil;
-import org.eclipse.emf.workspace.EMFCommandOperation;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
-import org.eclipse.papyrusrt.codegen.papyrus.Activator;
-import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.Element;
-
-public class SetAsDefaultTop extends AbstractHandler {
-
- public final static String SET_AS_DEFAULT_TOP_ANNO = "Set as default top";
- public final static String DEFAULT_TOP_KEY = "Default Top";
-
- @Override
- protected void setBaseEnabled(boolean state) {
- // TODO Auto-generated method stub
- super.setBaseEnabled(state);
- }
-
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- ISelection sel = HandlerUtil.getCurrentSelection( event );
- if( ! ( sel instanceof IStructuredSelection ) )
- return null;
-
- IStructuredSelection selection = (IStructuredSelection)sel;
- Object obj = selection.getFirstElement();
- final EObject eobj = EMFHelper.getEObject( obj );
- if( eobj == null )
- throw new IllegalArgumentException( obj.getClass().getCanonicalName() + " is not an EObject" );
-
- if(eobj instanceof Class) {
- if(UMLRealTimeProfileUtil.isCapsule((Class) eobj)) {
- final Element model = ((Class) eobj).getModel();
-
- TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(eobj);
- EMFCommandOperation command = new EMFCommandOperation(domain, new RecordingCommand(domain, "Add Set As Defualt Top Annotation") {
-
-
- protected void doExecute() {
- EAnnotation anno = model.getEAnnotation(SET_AS_DEFAULT_TOP_ANNO);
- if(anno == null) {
- anno = model.createEAnnotation(SET_AS_DEFAULT_TOP_ANNO);
- }
- anno.getDetails().put(DEFAULT_TOP_KEY, ((Class) eobj).getLabel());
- }
- });
- try {
- OperationHistoryFactory.getOperationHistory()
- .execute(command, null, null);
- } catch (ExecutionException e1) {
- Activator.log.error("Failed to move element", e1);
- }
- }
- }
-
- return null;
- }
-
-}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java
index ae632f5..9001097 100644
--- a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java
@@ -8,85 +8,67 @@
package org.eclipse.papyrusrt.codegen.papyrus.internal;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
-import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
import org.eclipse.papyrusrt.codegen.papyrus.UMLRTGenerator;
-import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.papyrusrt.codegen.papyrus.handlers.SetDefaultTopActionHandler;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Model;
-public class UMLRTCppCodeGen extends AbstractHandler
-{
- @SuppressWarnings( "rawtypes" )
- @Override
- public Object execute( ExecutionEvent event ) throws ExecutionException
- {
- ISelection sel = HandlerUtil.getCurrentSelection( event );
- if( ! ( sel instanceof IStructuredSelection ) )
- return null;
+public class UMLRTCppCodeGen extends AbstractHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection sel = HandlerUtil.getCurrentSelection(event);
+ if (!(sel instanceof IStructuredSelection))
+ return null;
- List<EObject> targets = new ArrayList<EObject>();
- String topCapsuleName = null;
+ List<EObject> targets = new ArrayList<EObject>();
- IStructuredSelection selection = (IStructuredSelection)sel;
- Iterator i = selection.iterator();
- while( i.hasNext() )
- {
- Object obj = i.next();
- EObject eobj = EMFHelper.getEObject( obj );
- if( eobj == null )
- throw new IllegalArgumentException( obj.getClass().getCanonicalName() + " is not an EObject" );
-
- if (topCapsuleName == null && eobj instanceof Model) {
- topCapsuleName = getTopCapsuleName((Model) eobj);
- } else
- if (topCapsuleName == null && eobj instanceof Class && UMLRealTimeProfileUtil.isCapsule((Class) eobj)) {
- topCapsuleName = getTopCapsuleName(((Class) eobj).getModel());
+ IStructuredSelection selection = (IStructuredSelection) sel;
+ if (selection.isEmpty()) {
+ return null;
+ }
+ EObject eobj = EMFHelper.getEObject(selection.getFirstElement());
+ if (eobj == null || !(eobj instanceof Element)) {
+ // do nothing
+ return null;
+ }
+
+ Element element = (Element) eobj;
+ String topCapsuleName = getTopCapsuleName(element.getModel());
+ targets.add(element.getModel());
+
+ final IStatus status = UMLRTGenerator.generate(targets, topCapsuleName);
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ ErrorDialog.openError(Display.getCurrent().getActiveShell(), "UML-RT Code Generator", null, status);
}
-
- targets.add( eobj );
- }
-
- if(topCapsuleName == null) {
- topCapsuleName = "Top";
- }
-
- final IStatus status = UMLRTGenerator.generate( targets, topCapsuleName );
- Display.getDefault().syncExec( new Runnable()
- {
- @Override
- public void run()
- {
- ErrorDialog.openError( Display.getCurrent().getActiveShell(), "UML-RT Code Generator", null, status );
- }
- } );
+ });
- return null;
- }
-
+ return null;
+ }
+
private String getTopCapsuleName(Model model) {
String retVal = null;
- EAnnotation anno = model.getEAnnotation(SetAsDefaultTop.SET_AS_DEFAULT_TOP_ANNO);
+ EAnnotation anno = model.getEAnnotation(SetDefaultTopActionHandler.DEFAULT_TOP_ANNO);
if (anno != null) {
- retVal = anno.getDetails().get(SetAsDefaultTop.DEFAULT_TOP_KEY);
+ retVal = anno.getDetails().get(SetDefaultTopActionHandler.DEFAULT_TOP_KEY);
}
- return retVal;
+ return retVal != null ? retVal : "Top";
}
}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/propertytester/UMLRTPropertyTester.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/propertytester/UMLRTPropertyTester.java
new file mode 100644
index 0000000..c02d7cd
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/propertytester/UMLRTPropertyTester.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus.propertytester;
+
+import java.util.List;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Property tester for UMLRT codegen plugin
+ *
+ * @author ysroh
+ *
+ */
+public class UMLRTPropertyTester extends PropertyTester {
+
+ private static final String STEREOTYPE_PROPERTY = "stereotype";
+
+ private static final String EOBJECTTYPE_PROPERTY = "eobjecttype";
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ Object element = null;
+ if (receiver instanceof List) {
+ element = ((List) receiver).get(0);
+ }
+
+ EObject eobj = EMFHelper.getEObject(element);
+
+ if (eobj instanceof Element && STEREOTYPE_PROPERTY.equals(property)) {
+ Stereotype st = ((Element) eobj).getAppliedStereotype((String) expectedValue);
+ return st != null;
+ }
+
+ if (eobj != null && EOBJECTTYPE_PROPERTY.equals(property)) {
+ boolean result = false;
+ for (Class clz : eobj.getClass().getInterfaces()) {
+ result = clz.getSimpleName().equals(expectedValue);
+ if (result) {
+ return result;
+ }
+ }
+ return eobj.getClass().getSimpleName().equals(expectedValue);
+ }
+
+ return false;
+ }
+}