Browse Source

Refactored templates to match new type system.
Added license header feature to genmodel.

markus.muehlbrandt@itemis.de 13 years ago
parent
commit
d4c4d2e247
24 changed files with 106 additions and 73 deletions
  1. 10 7
      plugins/org.yakindu.sct.generator.java/library/FeatureTypeLibrary.xmi
  2. 4 0
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/IJavaFeatureConstants.java
  3. 8 0
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureConstants.java
  4. 4 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomBaseStatemachine.xpt
  5. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomCycleBasedStatemachine.xpt
  6. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomEventBasedStatemachine.xpt
  7. 2 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterface.xpt
  8. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterfaceImpl.xpt
  9. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Event.xpt
  10. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/EventNotification.xpt
  11. 47 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Expression.ext
  12. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationListener.xpt
  13. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationSender.xpt
  14. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/IStatemachine.xpt
  15. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimedStatemachine.xpt
  16. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimerHandler.xpt
  17. 2 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Main.xpt
  18. 13 44
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Naming.ext
  19. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Notification.xpt
  20. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationSender.xpt
  21. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationType.xpt
  22. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimeEvent.xpt
  23. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimerHandler.xpt
  24. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ValuedEvent.xpt

+ 10 - 7
plugins/org.yakindu.sct.generator.java/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="Java Generator">
-  <types name="Naming">
-    <parameters name="basePackage" parameterType="STRING"/>
-    <parameters name="implementationSuffix" parameterType="STRING"/>
-  </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" optional="true">
+    <parameters name="basePackage"/>
+    <parameters name="implementationSuffix"/>
+  </types>
+  <types name="licenseHeader" optional="true">
+    <parameters name="licenseText"/>
+  </types>
+</sgen:FeatureTypeLibrary>

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

@@ -24,4 +24,8 @@ public interface IJavaFeatureConstants {
 	public static final String BASE_PACKAGE = "basePackage";
 
 	public static final String IMPLEMENTATION_SUFFIX = "implementationSuffix";
+	
+	public static final String LICENSE_HEADER = "licenseHeader";
+	
+	public static final String LICENSE_TEXT = "licenseText";
 }

+ 8 - 0
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureConstants.java

@@ -27,4 +27,12 @@ public final class JavaFeatureConstants implements IJavaFeatureConstants {
 	public static final String getImplementationSuffix() {
 		return IMPLEMENTATION_SUFFIX;
 	}
+	
+	public static final String getLicenseHeader() {
+		return LICENSE_HEADER;
+	}
+	
+	public static final String getLicenseText() {
+		return LICENSE_TEXT;
+	}
 }

+ 4 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomBaseStatemachine.xpt

@@ -157,7 +157,7 @@ else {
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE getImplementationPackagePath(entry)+"/"+getBaseStatemachineName()+'.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «getImplementationPackageName(entry)»;
 
 import java.util.Collection;
@@ -303,6 +303,9 @@ public abstract class 
 	«REM»Create enterSequences for statemachine«ENDREM»
 	«IF enterSequence.steps.size > 0 -»
 	public void «enterSequenceName()»() {
+		«IF isTimedStatemachine()-»
+		cycleStartTime = System.currentTimeMillis();
+		«ENDIF-»
 		«EXPAND ActionCode FOREACH enterSequence.steps-»
 	}
 	«ENDIF-»

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomCycleBasedStatemachine.xpt

@@ -19,7 +19,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow»
 «FILE getImplementationPackagePath(entry)+"/"+getCycleBasedStatemachineName() + '.java'»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «getImplementationPackageName(entry)»;
 
 import java.util.HashSet;

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomEventBasedStatemachine.xpt

@@ -19,7 +19,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow»
 «FILE getImplementationPackagePath(entry)+"/"+getEventBasedStatemachineName()+'.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «getImplementationPackageName(entry)»;
 
 import java.util.Collections;

+ 2 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterface.xpt

@@ -14,11 +14,12 @@ Contributors:
 «IMPORT sgraph»
 
 «EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::Expression»
 «EXTENSION org::yakindu::sct::generator::java::templates::BaseExtension»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR InterfaceScope-»
 «FILE getImplementationPackagePath(entry)+"/"+getInterfaceName() + '.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «getImplementationPackageName(entry)»;
 
 «IF hasOutgoingVoidEvents()-»

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterfaceImpl.xpt

@@ -19,7 +19,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR InterfaceScope»
 «FILE getImplementationPackagePath(entry)+"/"+getInterfaceImplName() + '.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «getImplementationPackageName(entry)»;
 
 «IF hasEvents()-»

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Event.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/Event.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public class Event {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/EventNotification.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/EventNotification.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 import «entry.getBasePackageName()».Event;

+ 47 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Expression.ext

@@ -27,9 +27,12 @@ String toCode(Expression statement) :
  
 String toCode(Statement statement) : 
 	null; //polymorphic placeholder (abstract rule)
- 
+
+String toCode(Literal statement) : 
+	null; //polymorphic placeholder (abstract rule)
+
 String toCode(PrimitiveValueExpression primValue) :
-	primValue.value;
+	primValue.value.toCode();
 	
 String getterCall(Assignment this) :
 	getContext(varRef).toFirstLower()+"getVar"+ varRef.name.toFirstUpper()+ "()";
@@ -54,7 +57,15 @@ String toCode(Assignment this) :
   default : ""
   };
 		
-/* EventRaising */
+/* Literals */
+String toCode(BoolLiteral expression) :
+	expression.value.toString();
+	
+String toCode(IntLiteral expression) :
+	expression.value.toString();
+	
+String toCode(RealLiteral expression) :
+	expression.value.toString();
 
 /* Logical Expressions */
 String toCode(LogicalOrExpression expression) :
@@ -123,3 +134,36 @@ String toCode(EventRaising this) :
 		event.getContext().toFirstLower()+"raise"+event.name.toFirstUpper()+"("+value.toCode()+");"
 	else
 		event.getContext().toFirstLower()+"raise"+event.name.toFirstUpper()+"();";
+		
+String getJavaType(Type type) :
+		switch (type) {
+		case (Type::real) : "double"
+		case (Type::integer) : "int"
+		case (Type::boolean) : "boolean"
+		case (Type::string) : "string"
+		default : ""
+		};
+		
+String getJavaClassType(Type type) :
+		switch (type) {
+		case (Type::real) : "Double"
+		case (Type::integer) : "Integer"
+		case (Type::boolean) : "Boolean"
+		case (Type::string) : "String"
+		case (Type::void) : "Void"
+		default : ""
+		};
+		
+String getInitialValue(EventDefinition this) :
+	if derivation != null then
+		derivation.condition.toCode()
+	else
+		//if no initial value expression is declared set default value to avoid npe exceptions
+		switch (type) {
+		case (Type::real) : "0D"
+		case (Type::integer) : "0"
+		case (Type::boolean) : "false"
+		case (Type::string) : ""
+		case (Type::void) : "null"
+		default : ""
+		};

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationListener.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/INotificationListener.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public interface INotificationListener {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationSender.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/INotificationSender.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public interface INotificationSender {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/IStatemachine.xpt

@@ -17,7 +17,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/IStatemachine.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public interface IStatemachine {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimedStatemachine.xpt

@@ -16,7 +16,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/ITimedStatemachine.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 import «entry.getBasePackageName()».INotificationListener;

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimerHandler.xpt

@@ -17,7 +17,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/ITimerHandler.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public interface ITimerHandler {

+ 2 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Main.xpt

@@ -55,8 +55,9 @@ Contributors:
 	
 	«EXPAND CustomCycleBasedStatemachine::file(entry) FOR this»
 	
+	«REM»Exclude event based statemachines from generation
 	«EXPAND CustomEventBasedStatemachine::file(entry) FOR this»
-	
+	«ENDREM»
 
 «ENDDEFINE»
 

+ 13 - 44
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Naming.ext

@@ -39,20 +39,6 @@ String getInterfaceName(InterfaceScope this) :
 		 
 String getInterfaceImplName(InterfaceScope this) :  getInterfaceName() + "Impl";
 
-String getInitialValue(EventDefinition this) :
-	if derivation != null then
-		derivation.condition.toCode()
-	else
-		//if no initial value expression is declared set default value to avoid npe exceptions
-		switch (type) {
-		case (Type::real) : "0D"
-		case (Type::integer) : "0"
-		case (Type::boolean) : "false"
-		case (Type::string) : ""
-		case (Type::void) : "null"
-		default : ""
-		};
-
 String getCreationSignature(EventDefinition this) :
 	if type == Type::void then
 		"\""+name+"\""
@@ -68,7 +54,7 @@ String getEventType(EventDefinition this) :
 	
 String getInitialValueAssignment(VariableDefinition this) : 
 	if initialValue != null then
-		" = " + initialValue
+		" = " + initialValue.toCode()
 	else
 		null;
 
@@ -85,25 +71,6 @@ String getName(Event this) :
 
 String getName(TimeEvent this) :
 	name.replaceAll(" ","").toFirstUpper();
-
-String getJavaType(Type type) :
-		switch (type) {
-		case (Type::real) : "double"
-		case (Type::integer) : "int"
-		case (Type::boolean) : "boolean"
-		case (Type::string) : "string"
-		default : ""
-		};
-		
-String getJavaClassType(Type type) :
-		switch (type) {
-		case (Type::real) : "Double"
-		case (Type::integer) : "Integer"
-		case (Type::boolean) : "Boolean"
-		case (Type::string) : "String"
-		case (Type::void) : "Void"
-		default : ""
-		};
 				
 cached String functionName(Step step) : 
 	(step.isEffect()) ? step.actionFunctionName() : (
@@ -174,6 +141,12 @@ String getBasePackage() :
  
 String getImplementationSuffix() :
  JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getImplementationSuffix();
+ 
+String getLicenseFeature() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getLicenseHeader();
+ 
+String getLicenseText() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getLicenseText();
 		
 String getBasePackageName(GeneratorEntry entry):
 	if entry.getFeatureConfiguration(getNamingFeature())!=null 
@@ -204,13 +177,9 @@ String getImplementationPackageName(ExecutionFlow this, GeneratorEntry entry):
 String getImplementationPackageName(InterfaceScope this, GeneratorEntry entry):
 	((ExecutionFlow)eContainer).getImplementationPackageName(entry);
 	
-String getLicenseHeader() : "/**
- * Copyright (c) 2011 committers of YAKINDU 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:
- * 	committers of YAKINDU - initial API and implementation
- * 
- */";
+String getLicenseHeader(GeneratorEntry entry) :
+	if entry.getFeatureConfiguration(getLicenseFeature())!=null
+		&& entry.getFeatureConfiguration(getLicenseFeature()).getParameterValue(getLicenseText()) != null then
+		entry.getFeatureConfiguration(getLicenseFeature()).getParameterValue(getLicenseText()).getStringValue()
+	else 
+		null;

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Notification.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/Notification.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public class Notification<Element> {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationSender.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/NotificationSender.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 import java.util.HashSet;

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationType.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/NotificationType.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public enum NotificationType {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimeEvent.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/TimeEvent.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public class TimeEvent extends ValuedEvent<Boolean> {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimerHandler.xpt

@@ -17,7 +17,7 @@ Contributors:
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/TimerHandler.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 import java.util.HashMap;

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ValuedEvent.xpt

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»
 «FILE entry.getBasePackagePath()+'/ValuedEvent.java'-»
-«getLicenseHeader()»
+«getLicenseHeader(entry
 package «entry.getBasePackageName()»;
 
 public class ValuedEvent<DataType> extends Event {