diff --git a/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/EDL.xtext b/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/EDL.xtext index fa2a41810..34d73ba89 100644 --- a/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/EDL.xtext +++ b/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/EDL.xtext @@ -33,7 +33,7 @@ DataContractDefinition returns DataContractDefinition: ; FieldDeclaration returns FieldDeclaration: - name=ID ":" type=QualifiedName + name=ID ":" type=TypeName ; @@ -55,7 +55,7 @@ AliasDefinition returns AliasDefinition: ; IdDefinition returns IdDefinition: - fieldName=EString ':' type = QualifiedName (isAssigned?= ':=' value = Query)? + fieldName=EString ':' type = TypeName (isAssigned?= ':=' value = Query)? ; ExchangeRule returns ExchangeRule: @@ -68,6 +68,10 @@ QualifiedName returns QualifiedName: name=ID ; +TypeName returns QualifiedName: + name = ("int" | "float" | "string" | "bool") | QualifiedName +; + // ===== Core types (terminals) ===== diff --git a/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/generator/EDLGenerator.xtend b/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/generator/EDLGenerator.xtend index c0f95c417..f6cfe8dc2 100644 --- a/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/generator/EDLGenerator.xtend +++ b/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/generator/EDLGenerator.xtend @@ -43,9 +43,9 @@ import java.util.List; import cz.cuni.mff.d3s.deeco.ensembles.EnsembleInstance; public class «e.name» implements EnsembleInstance { - public «e.id.type.name» «e.id.fieldName»; + public «getJavaTypeName(e.id.type.name)» «e.id.fieldName»; - public «e.name»(«e.id.type.name» «e.id.fieldName») { + public «e.name»(«getJavaTypeName(e.id.type.name)» «e.id.fieldName») { this.«e.id.fieldName» = «e.id.fieldName»; «FOR r : e.roles» «IF r.cardinalityMax != 1» @@ -77,10 +77,17 @@ public class «e.name» implements EnsembleInstance { public class «d.name» { «FOR f : d.fields» - public «f.type.name» «f.name»; + public «getJavaTypeName(f.type.name)» «f.name»; «ENDFOR» }''' ); } + def String getJavaTypeName(String type) { + if (type.equals("string")) + "String" + else + type + } + } diff --git a/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/validation/EDLValidator.xtend b/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/validation/EDLValidator.xtend index 7d45f6456..e9511d5bd 100644 --- a/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/validation/EDLValidator.xtend +++ b/jdeeco-edl/src/cz/cuni/mff/d3s/jdeeco/edl/validation/EDLValidator.xtend @@ -64,7 +64,7 @@ class EDLValidator extends AbstractEDLValidator { } @Check - def validateEnsembleTypeInformation(EnsembleDefinition ensemble) { + def validateEnsembleDefinition(EnsembleDefinition ensemble) { if (ensemble.fitness != null) { val type = checkTypes(ensemble.fitness, ensemble) if (!type.equals("int")) @@ -72,7 +72,11 @@ class EDLValidator extends AbstractEDLValidator { } for (Query c : ensemble.constraints) { - checkTypes(c, ensemble) + val type = checkTypes(c, ensemble) + // TODO: Improve model so the constraint errors can be reported per constraint +// if (!type.equals("bool")) { +// error("Constraint must be a logical expression. - " + type, ensemble, EdlPackage.Literals.ENSEMBLE_DEFINITION__CONSTRAINTS) +// } } for (AliasDefinition a : ensemble.aliases) {