Prechádzať zdrojové kódy

Added ExecutionFlow Dump Feature to GenModel core

Andreas Mülder 13 rokov pred
rodič
commit
3e7c5e5202

+ 10 - 7
plugins/org.yakindu.sct.generator.core/library/FeatureTypeLibrary.xmi

@@ -1,7 +1,10 @@
-<?xml version="1.0" encoding="ASCII"?>
-<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Core">
-  <types name="OutletFeature">
-    <parameters name="targetProject"/>
-    <parameters name="targetFolder"/>
-  </types>
-</sgen:FeatureTypeLibrary>
+<?xml version="1.0" encoding="ASCII"?>
+<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Core">
+  <types name="Outlet">
+    <parameters name="targetProject"/>
+    <parameters name="targetFolder"/>
+  </types>
+  <types name="Debug">
+    <parameters name="dumpSexec"/>
+  </types>
+</sgen:FeatureTypeLibrary>

+ 6 - 1
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/ICoreFeatureConstants.java

@@ -17,9 +17,14 @@ package org.yakindu.sct.generator.core.features;
  * 
  */
 public interface ICoreFeatureConstants {
+
 	public static final String LIBRARY_NAME = "Core";
-	public static final String OUTLET_FEATURE = "OutletFeature";
+	
+	public static final String OUTLET_FEATURE = "Outlet";
 	public static final String OUTLET_FEATURE_TARGET_PROJECT = "targetProject";
 	public static final String OUTLET_FEATURE_TARGET_FOLDER = "targetFolder";
 
+	public static final String DEBUG_FEATURE = "Debug";
+	public static final String DEBUG_FEATURE_DUMP_SEXEC = "dumpSexec";
+	
 }

+ 3 - 2
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/impl/CoreLibraryDefaultFeatureValueProvider.java

@@ -13,6 +13,7 @@ package org.yakindu.sct.generator.core.features.impl;
 import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.LIBRARY_NAME;
 import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.OUTLET_FEATURE_TARGET_FOLDER;
 import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.OUTLET_FEATURE_TARGET_PROJECT;
+import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.DEBUG_FEATURE_DUMP_SEXEC;
 
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
@@ -26,7 +27,6 @@ import org.yakindu.sct.model.sgraph.Statechart;
 public class CoreLibraryDefaultFeatureValueProvider extends
 		AbstractDefaultFeatureValueProvider {
 
-
 	public boolean isProviderFor(FeatureTypeLibrary library) {
 		return LIBRARY_NAME.equals(library.getName());
 	}
@@ -39,7 +39,8 @@ public class CoreLibraryDefaultFeatureValueProvider extends
 			parameterValue.setValue("src-gen");
 		} else if (OUTLET_FEATURE_TARGET_PROJECT.equals(parameterName)) {
 			parameterValue.setValue(getProject(statechart).getName());
+		} else if (DEBUG_FEATURE_DUMP_SEXEC.equals(parameterName)) {
+			parameterValue.setValue("false");
 		}
 	}
-
 }

+ 59 - 3
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/impl/AbstractXpandBasedCodeGenerator.java

@@ -10,11 +10,10 @@
  */
 package org.yakindu.sct.generator.core.impl;
 
-import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.OUTLET_FEATURE;
-import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.OUTLET_FEATURE_TARGET_FOLDER;
-import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.OUTLET_FEATURE_TARGET_PROJECT;
+import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.*;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Collections;
 
 import org.eclipse.core.resources.IProject;
@@ -22,8 +21,13 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
 import org.eclipse.xpand2.XpandExecutionContext;
 import org.eclipse.xpand2.XpandExecutionContextImpl;
 import org.eclipse.xpand2.XpandFacade;
@@ -59,6 +63,10 @@ public abstract class AbstractXpandBasedCodeGenerator extends
 	@Override
 	protected final void generate(ExecutionFlow flow, GeneratorEntry entry) {
 		Output output = createOutput(entry);
+		
+		if (isDumpSexec(entry))
+			dumpSexec(entry, flow, output);
+
 		XpandExecutionContext context = createXpandContext(output);
 		XpandFacade facade = XpandFacade.create(context);
 		facade.evaluate(getTemplatePath(), flow, entry);
@@ -134,4 +142,52 @@ public abstract class AbstractXpandBasedCodeGenerator extends
 				.getFeatureConfiguration(OUTLET_FEATURE);
 		return outletConfig;
 	}
+
+	protected boolean isDumpSexec(GeneratorEntry entry) {
+
+		FeatureParameterValue dumpSexec = getFeatureParameter(entry,
+				DEBUG_FEATURE, DEBUG_FEATURE_DUMP_SEXEC);
+
+		return dumpSexec != null && (dumpSexec.getValue().trim().length() > 0)
+				&& dumpSexec.getValue().trim().toLowerCase().equals("true");
+	}
+
+	protected FeatureParameterValue getFeatureParameter(GeneratorEntry entry,
+			String featureName, String paramName) {
+		FeatureConfiguration feature = entry
+				.getFeatureConfiguration(featureName);
+
+		if (feature != null) {
+			return feature.getParameterValue(paramName);
+		}
+
+		return null;
+	}
+
+	protected void dumpSexec(GeneratorEntry entry, ExecutionFlow flow,
+			Output output) {
+
+		ResourceSet resourceSet = new ResourceSetImpl();
+
+		resourceSet
+				.getResourceFactoryRegistry()
+				.getExtensionToFactoryMap()
+				.put(Resource.Factory.Registry.DEFAULT_EXTENSION,
+						new XMIResourceFactoryImpl());
+
+		URI fileURI = entry.getStatechart().eResource().getURI()
+				.trimFileExtension().appendFileExtension("sexec");
+		// URI fileURI = URI.createFileURI(new
+		// File("mylibrary.xmi").getAbsolutePath());
+
+		System.out.println(fileURI.toString());
+		Resource resource = resourceSet.createResource(fileURI);
+		resource.getContents().add(flow);
+
+		try {
+			resource.save(Collections.EMPTY_MAP);
+		} catch (IOException e) {
+		}
+	}
+
 }

+ 3 - 0
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java

@@ -30,6 +30,9 @@ public class SGenScopeProvider extends AbstractDeclarativeScopeProvider {
 						FeatureConfiguration featureConfig = (FeatureConfiguration) context
 								.eContainer();
 						String featureName = featureConfig.getType().getName();
+						if(featureName == null){
+							return false;
+						}
 						return featureName.equals(input
 								.getUserData(FeatureResourceDescription.FEATURE_CONTAINER));
 					}

+ 7 - 7
plugins/org.yakindu.sct.generator.java/library/FeatureTypeLibrary.xmi

@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="ASCII"?>
-<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Java Generator">
-  <types name="NamingFeature">
-    <parameters name="basePackage"/>
-    <parameters name="implementationSuffix"/>
-  </types>
-</sgen:FeatureTypeLibrary>
+<?xml version="1.0" encoding="ASCII"?>
+<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Java Generator">
+  <types name="Naming">
+    <parameters name="basePackage"/>
+    <parameters name="implementationSuffix"/>
+  </types>
+</sgen:FeatureTypeLibrary>

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/IJavaFeatureConstants.java

@@ -9,7 +9,7 @@ public interface IJavaFeatureConstants {
 
 	public static final String LIBRARY_NAME = "Java Generator";
 
-	public static final String NAMING_FEATURE = "NamingFeature";
+	public static final String NAMING_FEATURE = "Naming";
 
 	public static final String BASE_PACKAGE = "basePackage";
 

+ 51 - 51
plugins/org.yakindu.sct.model.sgen/model/emf/sgen.ecore

@@ -1,51 +1,51 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sgen"
-    nsURI="http://www.yakindu.org/sct/statechart/SGen" nsPrefix="sgen">
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorModel">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
-        eType="#//GeneratorEntry" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generatorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorConfiguration">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="configurations" upperBound="-1"
-        eType="#//FeatureConfiguration" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureType" eSuperTypes="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
-        eType="#//FeatureParameter" containment="true" eOpposite="#//FeatureParameter/featureType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
-        eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
-        derived="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
-        eOpposite="#//FeatureType/parameters"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
-    <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
-      <eParameters name="parameterName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//FeatureType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterValues" upperBound="-1"
-        eType="#//FeatureParameterValue" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GeneratorEntry">
-    <eOperations name="getFeatureConfiguration" eType="#//FeatureConfiguration">
-      <eParameters name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="statechart" eType="ecore:EClass ../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//Statechart"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
-        eType="#//FeatureConfiguration" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameterValue">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureTypeLibrary">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
-        eType="#//FeatureType" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sgen"
+    nsURI="http://www.yakindu.org/sct/statechart/SGen" nsPrefix="sgen">
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorModel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
+        eType="#//GeneratorEntry" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generatorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorConfiguration">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="configurations" upperBound="-1"
+        eType="#//FeatureConfiguration" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureType" eSuperTypes="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+        eType="#//FeatureParameter" containment="true" eOpposite="#//FeatureParameter/featureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
+        eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
+        derived="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
+        eOpposite="#//FeatureType/parameters"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
+    <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
+      <eParameters name="parameterName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//FeatureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterValues" upperBound="-1"
+        eType="#//FeatureParameterValue" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GeneratorEntry">
+    <eOperations name="getFeatureConfiguration" eType="#//FeatureConfiguration">
+      <eParameters name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="statechart" eType="ecore:EClass ../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//Statechart"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
+        eType="#//FeatureConfiguration" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureParameterValue">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureTypeLibrary">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
+        eType="#//FeatureType" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+</ecore:EPackage>