Skip to content

Commit

Permalink
Generated code now uses BaseDataContract. Refactored primitive type l…
Browse files Browse the repository at this point in the history
…iterals into constant values on PrimitiveTypes class.
  • Loading branch information
BuckeyHack committed Mar 10, 2016
1 parent e3d231b commit 0b538dc
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 33 deletions.
8 changes: 8 additions & 0 deletions jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/PrimitiveTypes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package cz.cuni.mff.d3s.jdeeco.edl;

public class PrimitiveTypes {
public static final String INT = "int";
public static final String STRING = "string";
public static final String BOOL = "bool";
public static final String FLOAT = "float";
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import java.util.HashMap
import java.util.Map
import com.google.inject.Inject
import cz.cuni.mff.d3s.jdeeco.edl.IFunctionRegistry
import cz.cuni.mff.d3s.jdeeco.edl.PrimitiveTypes

/**
* Generates code from your model files on save.
Expand Down Expand Up @@ -113,21 +114,17 @@ public class «e.name» implements EnsembleInstance {
}

def void generateDataContract(DataContractDefinition d, IFileSystemAccess fsa, String path, String packageString) {
val containsId = d.fields.exists[it.name.equals("id") && it.type.equals("string")];

fsa.generateFile(path+d.name + ".java",

'''package «packageString»;
import cz.cuni.mff.d3s.deeco.annotations.Role;
import cz.cuni.mff.d3s.jdeeco.edl;
@Role
public class «d.name» {
«IF !containsId»
public String id;
«ENDIF»
public class «d.name» extends BaseDataContract {
«FOR f : d.fields»
public «getJavaTypeName(f.type.name)» «f.name»;
public «getJavaTypeName(f.type.name)» «f.name»;
«ENDFOR»
}'''
);
Expand All @@ -140,17 +137,17 @@ public class «d.name» {
public class «d.name» {
«FOR f : d.fields»
public «getJavaTypeName(f.type.name)» «f.name»;
public «getJavaTypeName(f.type.name)» «f.name»;
«ENDFOR»
}'''
);
}

def String getJavaTypeName(String type) {
switch type {
case "string":
case PrimitiveTypes.STRING:
"String"
case "bool":
case PrimitiveTypes.BOOL:
"boolean"
default:
type
Expand Down
27 changes: 14 additions & 13 deletions jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/utils/EDLUtils.xtend
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cz.cuni.mff.d3s.jdeeco.edl.utils
import cz.cuni.mff.d3s.jdeeco.edl.model.edl.*
import java.util.List
import java.util.Collections
import cz.cuni.mff.d3s.jdeeco.edl.PrimitiveTypes

class EDLUtils {
def static String getKnowledgeType(ITypeResolutionContext ctx, QualifiedName name, TypeDefinition type, int position) {
Expand Down Expand Up @@ -77,13 +78,13 @@ class EDLUtils {
def static String getType(ITypeResolutionContext ctx, Query query, EnsembleDefinition ensemble) {
switch(query) {
BoolLiteral:
"bool"
PrimitiveTypes.BOOL
NumericLiteral:
"int"
PrimitiveTypes.INT
StringLiteral:
"string"
PrimitiveTypes.STRING
FloatLiteral:
"float"
PrimitiveTypes.FLOAT
KnowledgeVariable:
{
var QualifiedName name = query.path
Expand All @@ -94,13 +95,13 @@ class EDLUtils {
var String l = cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils.getType(ctx, query.left, ensemble)
var String r = cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils.getType(ctx, query.right, ensemble)

if(!l.equals("bool"))
if(!l.equals(PrimitiveTypes.BOOL))
ctx.reportError("A parameter of a logical operator must be a logical value.", query, EdlPackage.Literals.LOGICAL_OPERATOR__LEFT)

if(!r.equals("bool"))
if(!r.equals(PrimitiveTypes.BOOL))
ctx.reportError("A parameter of a logical operator must be a logical value.", query, EdlPackage.Literals.LOGICAL_OPERATOR__RIGHT)

"bool"
PrimitiveTypes.BOOL
}
RelationOperator:
{
Expand All @@ -121,18 +122,18 @@ class EDLUtils {
ctx.reportError("Parameters of this type of relation must be comparable.", query, EdlPackage.Literals.RELATION_OPERATOR__LEFT);
}

"bool"
PrimitiveTypes.BOOL
}
BinaryOperator:
{
var String l = cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils.getType(ctx, query.left, ensemble);
var String r = cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils.getType(ctx, query.right, ensemble);

if(!(l.equals("int") || l.equals("float")))
if(!(l.equals(PrimitiveTypes.INT) || l.equals(PrimitiveTypes.FLOAT)))
ctx.reportError("A parameter of a binary operator must be numeric.", query, EdlPackage.Literals.BINARY_OPERATOR__LEFT)


if(!(r.equals("int") || r.equals("float")))
if(!(r.equals(PrimitiveTypes.INT) || r.equals(PrimitiveTypes.FLOAT)))
ctx.reportError("A parameter of a binary operator must be numeric.", query, EdlPackage.Literals.BINARY_OPERATOR__RIGHT)


Expand All @@ -147,17 +148,17 @@ class EDLUtils {
{
var String inner = cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils.getType(ctx, query.nested, ensemble);

if(!inner.equals("int") && !inner.equals("float"))
if(!inner.equals(PrimitiveTypes.INT) && !inner.equals(PrimitiveTypes.FLOAT))
ctx.reportError("The nested expression of a additive inverse must be a numeric expression.", query, EdlPackage.Literals.ADDITIVE_INVERSE__NESTED)
inner
}
Negation:
{
var String inner = cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils.getType(ctx, query.nested, ensemble);

if(!inner.equals("bool"))
if(!inner.equals(PrimitiveTypes.BOOL))
ctx.reportError("The nested expression of a negation must be logical expression.", query, EdlPackage.Literals.NEGATION__NESTED)
"bool"
PrimitiveTypes.BOOL
}
FunctionCall:
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import cz.cuni.mff.d3s.jdeeco.edl.model.edl.QualifiedName
import cz.cuni.mff.d3s.jdeeco.edl.utils.EDLUtils
import org.eclipse.emf.ecore.EStructuralFeature
import org.eclipse.emf.ecore.EObject
import cz.cuni.mff.d3s.jdeeco.edl.PrimitiveTypes

/**
* Custom validation rules.
Expand Down Expand Up @@ -70,10 +71,10 @@ class EDLValidator extends AbstractEDLValidator implements ITypeResolutionContex
def validateType(TypeDefinition contract) {
for (FieldDeclaration d : contract.fields) {
switch (d.type.name) {
case "int",
case "string",
case "float",
case "bool":
case PrimitiveTypes.INT,
case PrimitiveTypes.STRING,
case PrimitiveTypes.FLOAT,
case PrimitiveTypes.BOOL:
{}
default:
if(!dataTypes.containsKey(d.type.name)) {
Expand All @@ -92,14 +93,14 @@ class EDLValidator extends AbstractEDLValidator implements ITypeResolutionContex
def validateEnsembleDefinition(EnsembleDefinition ensemble) {
if (ensemble.fitness != null) {
val type = EDLUtils.getType(this, ensemble.fitness, ensemble)
if (!type.equals("int"))
if (!type.equals(PrimitiveTypes.INT))
error("Fitness function must be a numeric expression.", ensemble.fitness, EdlPackage.Literals.ENSEMBLE_DEFINITION__FITNESS)
}

for (Query c : ensemble.constraints) {
val type = EDLUtils.getType(this, c, ensemble)

if (!type.equals("bool")) {
if (!type.equals(PrimitiveTypes.BOOL)) {
error("Constraint must be a logical expression. - " + type, ensemble, EdlPackage.Literals.ENSEMBLE_DEFINITION__CONSTRAINTS, ensemble.constraints.indexOf(c))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import cz.cuni.mff.d3s.deeco.knowledge.container.KnowledgeContainer;
import cz.cuni.mff.d3s.deeco.knowledge.container.KnowledgeContainerException;
import cz.cuni.mff.d3s.jdeeco.edl.BaseDataContract;
import cz.cuni.mff.d3s.jdeeco.edl.PrimitiveTypes;
import cz.cuni.mff.d3s.jdeeco.edl.model.edl.DataContractDefinition;
import cz.cuni.mff.d3s.jdeeco.edl.model.edl.EdlDocument;
import cz.cuni.mff.d3s.jdeeco.edl.model.edl.EnsembleDefinition;
Expand All @@ -52,9 +53,9 @@ public KnowledgeFieldVector(Context ctx, String dataContractName, String fieldNa
this.ctx = ctx;

Sort sort;
if ("bool".equals(fieldType)) {
if (PrimitiveTypes.BOOL.equals(fieldType)) {
sort = ctx.mkBoolSort();
} else if ("int".equals(fieldType)) {
} else if (PrimitiveTypes.INT.equals(fieldType)) {
sort = ctx.mkIntSort();
} else {
throw new UnsupportedDataTypeException(fieldType);
Expand Down Expand Up @@ -96,10 +97,10 @@ public DataContractInstancesContainer(Context ctx, String packageName, DataContr
knowledgeFields.put(fieldName, field);
for (int i = 0; i < instances.length; i++) {
Expr expr;
if ("bool".equals(fieldType)) {
if (PrimitiveTypes.BOOL.equals(fieldType)) {
Boolean value = readField(fieldName, Boolean.class);
expr = ctx.mkBool(value.booleanValue());
} else if ("int".equals(fieldType)) {
} else if (PrimitiveTypes.INT.equals(fieldType)) {
Integer value = readField(fieldName, Integer.class);
expr = ctx.mkInt(value.intValue());
} else {
Expand Down

0 comments on commit 0b538dc

Please sign in to comment.