Loading plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/debug.eol +11 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,17 @@ operation Any debugAnnotations() : Boolean { (" Comments: "+self.comment).println(); return true; } operation Any debugElement(prefix : String) { var pattern = ".+\\.(.+)Impl.+(\\(?)"; (prefix+self.toString().replaceAll(pattern, "$1 $2")).println(); for (c in self.eContents()) { c.debugElement(prefix+" "); } for (c in self.eCrossReferences()) { (prefix+"->"+c.toString().replaceAll(pattern, "$1 $2")).println(); //c.debugElement(prefix+" "); } } operation Any debugTimeConstraintVariables() : Boolean { var expressionConstraint = Loading plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/reusable.eol +216 −109 Original line number Diff line number Diff line Loading @@ -84,25 +84,29 @@ operation String getStringValue() : TTCN!Value { return v; } operation TDL!DataUse getDataInstance() : TDL!DataInstance { if (self.isKindOf(TDL!DataInstanceUse)) { return self.dataInstance; } else if (self.isKindOf(TDL!DataElementUse) and self.dataElement.isKindOf(TDL!DataInstance)) { return self.dataElement; } else { (" TODO: "+self.~rule+" : Not Implemented Yet : "+self.type).log(1); return null; } } operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) : TTCN!TemplateBody { ("transformSingleMemberAssignment: "+self.name+"::"+m.name).log(1); var body = new TTCN!TemplateBody(); if (mad.isDefined() and mad.isKindOf(TDL!DataInstanceUse)) { if (mad.dataInstance.isDefined() and mad.argument.isEmpty()) { if (mad.isDefined()) { var di = mad.getDataInstance(); if (di.isDefined()) { //TODO: add support for DataElementUse if (mad.argument.isEmpty()) { var e = di.equivalent(); body.simple = new TTCN!SimpleSpec(); body.simple.expr = new TTCN!Value(); body.simple.expr.ref = new TTCN!ReferencedValue(); body.simple.expr.ref.head = new TTCN!Head(); //Template ->target = BaseTemplate reference //Constant ->target = SingleConstDef reference var e = mad.dataInstance.equivalent(); if (e.isKindOf(TTCN!TemplateDef)) { body.simple.expr.ref.head.target = e.base; } else if (e.isKindOf(TTCN!ConstDef)) { body.simple.expr.ref.head.target = e.defs.list.get(0); } else { //what else can it be? } body.simple.expr.ref = e.getReferencedValue(); //reduction //use extended field references Loading @@ -113,25 +117,14 @@ operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) if (mr.member.isDefined()) { var efr = new TTCN!ExtendedFieldReference(); efr.field = mr.member.equivalent(); body.simple.expr.ref.fields.add(efr); } if (mr.collectionIndex.isDefined() and mr.collectionIndex.dataInstance.isDefined()) { and mr.collectionIndex.getDataInstance().isDefined()) { var ci = mr.collectionIndex.getDataInstance().equivalent(); var efr = new TTCN!ExtendedFieldReference(); efr.array = new TTCN!Value(); efr.array.ref = new TTCN!ReferencedValue(); efr.array.ref.head = new TTCN!Head(); var ci = mr.collectionIndex.dataInstance.equivalent(); if (ci.isKindOf(TTCN!TemplateDef)) { efr.array.ref.head.target = ci.base; } else if (ci.isKindOf(TTCN!ConstDef)) { efr.array.ref.head.target = ci.defs.list.get(0); } else { //what else can it be? } efr.array.ref = ci.getReferencedValue(); body.simple.expr.ref.fields.add(efr); } } Loading @@ -150,7 +143,7 @@ operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) } else { //nested anonymous definitions //or overriding (" : "+mad.item).log(1); (" : TODO: "+mad.item).log(1); if (mad.item.isDefined()) { body = self.transformDefaultMatchingSymbol(m, mad); } else { Loading @@ -160,6 +153,11 @@ operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) } else { body = self.transformDefaultMatchingSymbol(m, mad); } } else { body = self.transformDefaultMatchingSymbol(m, mad); } self.debugElement("Self: "); body.debugElement("Body: "); return body; } Loading Loading @@ -218,42 +216,82 @@ operation TDL!Member getFieldDef(type:TDL!StructuredDataType) : TTCN!StructField } } operation Any getReferencedValue() : TTCN!ReferencedValue { var v = new TTCN!ReferencedValue(); v.head = new TTCN!Head(); //Template ->target = BaseTemplate reference //Constant ->target = SingleConstDef reference if (self.isKindOf(TTCN!TemplateDef)) { v.head.target = self.base; } else if (self.isKindOf(TTCN!ConstDef)) { v.head.target = self.defs.list.get(0); } else if (self.isKindOf(TTCN!Enumeration)) { v.head.target = self; } else { (" TODO: Not implemented yet: getReferencedValue for"+self).log(1); //what else can it be? } return v; } //TODO: deprecated? -> not at present operation TDL!StructuredDataInstance transformMemberAssignment() : TTCN!CompoundExpression { var expr; ("transformMemberAssignment: "+self.name).println(); ("transformMemberAssignment: "+self.name).log(1); if (not self.memberAssignment.isEmpty()) { expr = new TTCN!FieldExpressionList(); for (ma in self.memberAssignment) { var fes = new TTCN!FieldExpressionSpec(); //fes.fieldRef = ma.member.equivalent(); fes.fieldRef = ma.member.getFieldDef(self.dataType); (" "+ma.member.name+"->"+fes.fieldRef.eContainer().eContainer().name).println(); (" "+ma.member.name+"->"+fes.fieldRef.eContainer().eContainer().name).log(1); //ma.memberSpec fes.expr = new TTCN!Value(); if (ma.memberSpec.isKindOf(TDL!DataInstanceUse) and ma.memberSpec.dataInstance.isDefined()) { fes.expr.ref = new TTCN!ReferencedValue(); fes.expr.ref.head = new TTCN!Head(); //Template ->target = BaseTemplate reference //Constant ->target = SingleConstDef reference var e = ma.memberSpec.dataInstance.equivalent(); if (e.isKindOf(TTCN!TemplateDef)) { fes.expr.ref.head.target = e.base; } else if (e.isKindOf(TTCN!ConstDef)) { fes.expr.ref.head.target = e.defs.list.get(0); //TODO: other data uses? var di = ma.memberSpec.getDataInstance(); if (di.isDefined()) { (di).println(); var e = di.equivalent(); e.println(); if (e.isUndefined()) { if (di.dataType.name = "Boolean") { fes.expr.predef = new TTCN!PredefinedValue(); fes.expr.predef.boolean = di.name.toString().toLower(); } } else { //what else can it be? fes.expr.ref = e.getReferencedValue(); } //TODO: handle overriding parameters? } else if (ma.memberSpec.isKindOf(TDL!LiteralValueUse)) { //TODO: extract fes.expr.predef = new TTCN!PredefinedValue(); if (ma.memberSpec.intValue.isDefined()) { fes.expr.predef.integer = ma.memberSpec.intValue.toString(); } else if (ma.memberSpec.boolValue.isDefined()) { fes.expr.predef.boolean = ma.memberSpec.boolValue.toString(); } else { fes.expr.predef.charString = "\""+ma.memberSpec.value+"\""; } } else if (ma.memberSpec.isKindOf(TDL!SpecialValueUse)) { fes.expr.predef = new TTCN!PredefinedValue(); if (ma.memberSpec.isKindOf(TDL!OmitValue)) { fes.expr.predef.omit = "omit"; } else if (ma.memberSpec.isKindOf(TDL!AnyValue)) { fes.expr.predef.charString = "TODO: ? (AnyValue)"; } else if (ma.memberSpec.isKindOf(TDL!AnyValueOrOmit)) { fes.expr.predef.charString = "TODO: * (AnyValueOrOmit)"; } } else { //TODO: handle DataElementUse, others fes.expr.predef = new TTCN!PredefinedValue(); fes.expr.predef.charString = "\"TODO: Not Implemented Yet\""; } (" NOT IMPLEMENTED YET: "+ma.memberSpec).log(1); } expr.specs.add(fes); } //TODO: handle unassigned members? -> add guards to corresponding rule Loading @@ -267,6 +305,7 @@ operation TDL!StructuredDataInstance transformMemberAssignment() : TTCN!Compound (" TODO: "+self.~rule+" : What is going on here: "+self).log(1); expr = new TTCN!ArrayExpression(); } expr.debugElement("Expr:"); return expr; } Loading @@ -276,6 +315,7 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec //unassignedMember? //argument -> ParameterBinding (parameter:Member, dataUse:DataUse) //reduction? -> MemberReference ("transformWildcardMemberAssignment: "+self.name).log(1); var field = new TTCN!FieldSpecList(); var t; if (self.dataInstance.isDefined()) { Loading Loading @@ -306,6 +346,7 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec var ma = self.argument.selectOne(a|a.parameter = m); //default: no wildcard, defined //in case not defined, check for inherited ma.println(); if (ma.isDefined()) { mad = ma.dataUse; } else if (ma.isUndefined() Loading @@ -326,20 +367,37 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec return field; } //operation TDL!StructuredDataInstance transformWildcardMemberAssignment() : TTCN!FieldSpecList { // ("transformWildcardMemberAssignment: "+self.name).log(1); // var field = new TTCN!FieldSpecList(); // for (m in self.dataType.allMembers()) { //TODO: why all? why not only assigned? //// for (ma in self.memberAssignment) { // var fs = new TTCN!FieldSpec(); // fs.ref = m.equivalent(); // // var ma = self.memberAssignment.selectOne(ma|ma.member = m); // var mad; // if (ma.isDefined()) { // mad = ma.memberSpec; // } // // fs.body = new TTCN!TemplateBody(); // fs.body = self.transformSingleMemberAssignment(m, mad); // field.spec.add(fs); // } // return field; //} //TODO: reactivate or differentiate above operation TDL!StructuredDataInstance transformWildcardMemberAssignment() : TTCN!FieldSpecList { ("transformWildcardMemberAssignmentX: "+self.name).log(1); var field = new TTCN!FieldSpecList(); for (m in self.dataType.allMembers()) { for (ma in self.memberAssignment) { var fs = new TTCN!FieldSpec(); fs.ref = m.equivalent(); var ma = self.memberAssignment.selectOne(ma|ma.member = m); var mad; if (ma.isDefined()) { mad = ma.memberSpec; } fs.ref = ma.member.equivalent(); fs.body = new TTCN!TemplateBody(); fs.body = self.transformSingleMemberAssignment(m, mad); fs.body = self.transformSingleMemberAssignment(ma.member, ma.memberSpec); field.spec.add(fs); } return field; Loading Loading @@ -560,6 +618,64 @@ operation TDL!DataInstanceUse getTemplateBody() : TTCN!TemplateBody { return self.getTemplateBody(false); } operation TDL!DataElementUse getTemplateBody() : TTCN!TemplateBody { return self.getTemplateBody(false); } //TODO: refactor, copied from below operation TDL!DataElementUse getTemplateBody(flat : Boolean) : TTCN!TemplateBody { var tb = new TTCN!TemplateBody(); tb.simple = new TTCN!SimpleSpec(); tb.simple.expr = new TTCN!Value(); if (useDataMapping) { var mapping = TDL!DataElementMapping.allInstances().select(m|m.mappableDataElement = self.dataElement).first(); //TODO: extract parameter tb.simple.expr.predef = new TTCN!PredefinedValue(); if (mapping.isDefined()) { //t.ref = new TTCN!TypeReference(); //TODO: check if defined //t.ref.head = mapping.elementURI; tb.simple.expr.predef.charString = mapping.elementURI.replaceAll("\"",""); } else { tb.simple.expr.predef.charString = "MAP_"+self.dataInstance.name; } } else { if (self.dataElement.isDefined() and self.dataElement.isKindOf(TDL!DataInstance)) { tb.simple.expr.ref = new TTCN!ReferencedValue(); tb.simple.expr.ref.head = new TTCN!Head(); tb.simple.expr.ref.head.target = self.dataElement.equivalent().base; } else if (self.dataElement.isDefined() and self.dataElement.isKindOf(TDL!DataType)) { //TODO:differentiate structured vs simple vs collection if (flat) { (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); tb.simple.expr.predef = new TTCN!PredefinedValue(); tb.simple.expr.predef.charString = "\"TODO_INLINE_DATA_ELEMENT_FOR_"+self.dataElement.name+"\""; } else if (self.argument.isEmpty()) { //TODO: make sure type is present tb.simple.expr = new TTCN!ArrayExpression(); } else { tb.simple=null; tb.~type = self.dataElement.getTTCNType(); tb.field = new TTCN!FieldSpecList(); for (a in self.argument) { var fs = new TTCN!FieldSpec(); fs.ref = a.parameter.equivalent(); fs.body = a.dataUse.getTemplateBody(true); //TODO: expand? tb.field.spec.add(fs); } } } else if (self.item.isDefined()) { (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); tb.simple.expr.predef = new TTCN!PredefinedValue(); tb.simple.expr.predef.charString = "\"TODO_INLINE_COLLECTION\""; } else { (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); } } return tb; } operation TDL!DataInstanceUse getTemplateBody(flat : Boolean) : TTCN!TemplateBody { var tb = new TTCN!TemplateBody(); tb.simple = new TTCN!SimpleSpec(); Loading Loading @@ -673,24 +789,15 @@ operation String getVerdictStatement() : TTCN!FunctionStatement { } operation TDL!DataUse getVerdictStatement() : TTCN!FunctionStatement { var sfs = new TTCN!FunctionStatement(); sfs.verdict = new TTCN!SetLocalVerdict(); sfs.verdict.expression = new TTCN!Value(); var verdictName = "pass"; //TODO: more reasonable default? //TODO: handle corresponding verdict properly if (self.isKindOf(TDL!DataInstanceUse)) { sfs.verdict.expression.predef = new TTCN!PredefinedValue(); if (self.dataInstance.name = "pass") { sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#pass; } else if (self.dataInstance.name = "fail") { sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#fail; } else if (self.dataInstance.name = "inconclusive") { sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#inconc; } else { //TODO } verdictName = self.dataInstance.name; } else if (self.isKindOf(TDL!DataElementUse)) { //TODO: check that it is a dataInstance of type Verdict? verdictName = self.dataElement.name; } else { //TODO } return sfs; return verdictName.getVerdictStatement(); } plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/ttcn3mapping.etl +15 −7 Original line number Diff line number Diff line Loading @@ -236,11 +236,17 @@ rule EnumDT2E t.structured.enumDef = e; e.list = new TTCN!EnumerationList(); for (v in dt.value) { var literal = new TTCN!Enumeration(); literal.name = v.TTCNname(); e.list.enums.add(literal); } rule EnumInstance2E transform di : TDL!SimpleDataInstance to e : TTCN!Enumeration { guard : not useDataMapping and di.eContainer.isKindOf(TDL!EnumDataType) e.name = di.TTCNname(); var ep = di.dataType.equivalent(); ep.list.enums.add(e); } Loading Loading @@ -828,6 +834,8 @@ rule StructuredDI2TD di.~rule = self; (di.name).log(1); var md = new TTCN!ModuleDefinition(); md.def = td; var m = di.eContainer.equivalent(); Loading Loading @@ -862,7 +870,7 @@ rule StructuredDI2TD // or ma.memberSpec.isKindOf(TDL!AnyValueOrOmit))).log(1); tb.field = di.transformWildcardMemberAssignment(); } else { ("Simple: "+di.name).log(1); ("Structure -> Simple: "+di.name).log(1); tb.simple = new TTCN!SimpleSpec(); tb.simple.expr = di.transformMemberAssignment(); } Loading Loading
plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/debug.eol +11 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,17 @@ operation Any debugAnnotations() : Boolean { (" Comments: "+self.comment).println(); return true; } operation Any debugElement(prefix : String) { var pattern = ".+\\.(.+)Impl.+(\\(?)"; (prefix+self.toString().replaceAll(pattern, "$1 $2")).println(); for (c in self.eContents()) { c.debugElement(prefix+" "); } for (c in self.eCrossReferences()) { (prefix+"->"+c.toString().replaceAll(pattern, "$1 $2")).println(); //c.debugElement(prefix+" "); } } operation Any debugTimeConstraintVariables() : Boolean { var expressionConstraint = Loading
plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/reusable.eol +216 −109 Original line number Diff line number Diff line Loading @@ -84,25 +84,29 @@ operation String getStringValue() : TTCN!Value { return v; } operation TDL!DataUse getDataInstance() : TDL!DataInstance { if (self.isKindOf(TDL!DataInstanceUse)) { return self.dataInstance; } else if (self.isKindOf(TDL!DataElementUse) and self.dataElement.isKindOf(TDL!DataInstance)) { return self.dataElement; } else { (" TODO: "+self.~rule+" : Not Implemented Yet : "+self.type).log(1); return null; } } operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) : TTCN!TemplateBody { ("transformSingleMemberAssignment: "+self.name+"::"+m.name).log(1); var body = new TTCN!TemplateBody(); if (mad.isDefined() and mad.isKindOf(TDL!DataInstanceUse)) { if (mad.dataInstance.isDefined() and mad.argument.isEmpty()) { if (mad.isDefined()) { var di = mad.getDataInstance(); if (di.isDefined()) { //TODO: add support for DataElementUse if (mad.argument.isEmpty()) { var e = di.equivalent(); body.simple = new TTCN!SimpleSpec(); body.simple.expr = new TTCN!Value(); body.simple.expr.ref = new TTCN!ReferencedValue(); body.simple.expr.ref.head = new TTCN!Head(); //Template ->target = BaseTemplate reference //Constant ->target = SingleConstDef reference var e = mad.dataInstance.equivalent(); if (e.isKindOf(TTCN!TemplateDef)) { body.simple.expr.ref.head.target = e.base; } else if (e.isKindOf(TTCN!ConstDef)) { body.simple.expr.ref.head.target = e.defs.list.get(0); } else { //what else can it be? } body.simple.expr.ref = e.getReferencedValue(); //reduction //use extended field references Loading @@ -113,25 +117,14 @@ operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) if (mr.member.isDefined()) { var efr = new TTCN!ExtendedFieldReference(); efr.field = mr.member.equivalent(); body.simple.expr.ref.fields.add(efr); } if (mr.collectionIndex.isDefined() and mr.collectionIndex.dataInstance.isDefined()) { and mr.collectionIndex.getDataInstance().isDefined()) { var ci = mr.collectionIndex.getDataInstance().equivalent(); var efr = new TTCN!ExtendedFieldReference(); efr.array = new TTCN!Value(); efr.array.ref = new TTCN!ReferencedValue(); efr.array.ref.head = new TTCN!Head(); var ci = mr.collectionIndex.dataInstance.equivalent(); if (ci.isKindOf(TTCN!TemplateDef)) { efr.array.ref.head.target = ci.base; } else if (ci.isKindOf(TTCN!ConstDef)) { efr.array.ref.head.target = ci.defs.list.get(0); } else { //what else can it be? } efr.array.ref = ci.getReferencedValue(); body.simple.expr.ref.fields.add(efr); } } Loading @@ -150,7 +143,7 @@ operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) } else { //nested anonymous definitions //or overriding (" : "+mad.item).log(1); (" : TODO: "+mad.item).log(1); if (mad.item.isDefined()) { body = self.transformDefaultMatchingSymbol(m, mad); } else { Loading @@ -160,6 +153,11 @@ operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) } else { body = self.transformDefaultMatchingSymbol(m, mad); } } else { body = self.transformDefaultMatchingSymbol(m, mad); } self.debugElement("Self: "); body.debugElement("Body: "); return body; } Loading Loading @@ -218,42 +216,82 @@ operation TDL!Member getFieldDef(type:TDL!StructuredDataType) : TTCN!StructField } } operation Any getReferencedValue() : TTCN!ReferencedValue { var v = new TTCN!ReferencedValue(); v.head = new TTCN!Head(); //Template ->target = BaseTemplate reference //Constant ->target = SingleConstDef reference if (self.isKindOf(TTCN!TemplateDef)) { v.head.target = self.base; } else if (self.isKindOf(TTCN!ConstDef)) { v.head.target = self.defs.list.get(0); } else if (self.isKindOf(TTCN!Enumeration)) { v.head.target = self; } else { (" TODO: Not implemented yet: getReferencedValue for"+self).log(1); //what else can it be? } return v; } //TODO: deprecated? -> not at present operation TDL!StructuredDataInstance transformMemberAssignment() : TTCN!CompoundExpression { var expr; ("transformMemberAssignment: "+self.name).println(); ("transformMemberAssignment: "+self.name).log(1); if (not self.memberAssignment.isEmpty()) { expr = new TTCN!FieldExpressionList(); for (ma in self.memberAssignment) { var fes = new TTCN!FieldExpressionSpec(); //fes.fieldRef = ma.member.equivalent(); fes.fieldRef = ma.member.getFieldDef(self.dataType); (" "+ma.member.name+"->"+fes.fieldRef.eContainer().eContainer().name).println(); (" "+ma.member.name+"->"+fes.fieldRef.eContainer().eContainer().name).log(1); //ma.memberSpec fes.expr = new TTCN!Value(); if (ma.memberSpec.isKindOf(TDL!DataInstanceUse) and ma.memberSpec.dataInstance.isDefined()) { fes.expr.ref = new TTCN!ReferencedValue(); fes.expr.ref.head = new TTCN!Head(); //Template ->target = BaseTemplate reference //Constant ->target = SingleConstDef reference var e = ma.memberSpec.dataInstance.equivalent(); if (e.isKindOf(TTCN!TemplateDef)) { fes.expr.ref.head.target = e.base; } else if (e.isKindOf(TTCN!ConstDef)) { fes.expr.ref.head.target = e.defs.list.get(0); //TODO: other data uses? var di = ma.memberSpec.getDataInstance(); if (di.isDefined()) { (di).println(); var e = di.equivalent(); e.println(); if (e.isUndefined()) { if (di.dataType.name = "Boolean") { fes.expr.predef = new TTCN!PredefinedValue(); fes.expr.predef.boolean = di.name.toString().toLower(); } } else { //what else can it be? fes.expr.ref = e.getReferencedValue(); } //TODO: handle overriding parameters? } else if (ma.memberSpec.isKindOf(TDL!LiteralValueUse)) { //TODO: extract fes.expr.predef = new TTCN!PredefinedValue(); if (ma.memberSpec.intValue.isDefined()) { fes.expr.predef.integer = ma.memberSpec.intValue.toString(); } else if (ma.memberSpec.boolValue.isDefined()) { fes.expr.predef.boolean = ma.memberSpec.boolValue.toString(); } else { fes.expr.predef.charString = "\""+ma.memberSpec.value+"\""; } } else if (ma.memberSpec.isKindOf(TDL!SpecialValueUse)) { fes.expr.predef = new TTCN!PredefinedValue(); if (ma.memberSpec.isKindOf(TDL!OmitValue)) { fes.expr.predef.omit = "omit"; } else if (ma.memberSpec.isKindOf(TDL!AnyValue)) { fes.expr.predef.charString = "TODO: ? (AnyValue)"; } else if (ma.memberSpec.isKindOf(TDL!AnyValueOrOmit)) { fes.expr.predef.charString = "TODO: * (AnyValueOrOmit)"; } } else { //TODO: handle DataElementUse, others fes.expr.predef = new TTCN!PredefinedValue(); fes.expr.predef.charString = "\"TODO: Not Implemented Yet\""; } (" NOT IMPLEMENTED YET: "+ma.memberSpec).log(1); } expr.specs.add(fes); } //TODO: handle unassigned members? -> add guards to corresponding rule Loading @@ -267,6 +305,7 @@ operation TDL!StructuredDataInstance transformMemberAssignment() : TTCN!Compound (" TODO: "+self.~rule+" : What is going on here: "+self).log(1); expr = new TTCN!ArrayExpression(); } expr.debugElement("Expr:"); return expr; } Loading @@ -276,6 +315,7 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec //unassignedMember? //argument -> ParameterBinding (parameter:Member, dataUse:DataUse) //reduction? -> MemberReference ("transformWildcardMemberAssignment: "+self.name).log(1); var field = new TTCN!FieldSpecList(); var t; if (self.dataInstance.isDefined()) { Loading Loading @@ -306,6 +346,7 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec var ma = self.argument.selectOne(a|a.parameter = m); //default: no wildcard, defined //in case not defined, check for inherited ma.println(); if (ma.isDefined()) { mad = ma.dataUse; } else if (ma.isUndefined() Loading @@ -326,20 +367,37 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec return field; } //operation TDL!StructuredDataInstance transformWildcardMemberAssignment() : TTCN!FieldSpecList { // ("transformWildcardMemberAssignment: "+self.name).log(1); // var field = new TTCN!FieldSpecList(); // for (m in self.dataType.allMembers()) { //TODO: why all? why not only assigned? //// for (ma in self.memberAssignment) { // var fs = new TTCN!FieldSpec(); // fs.ref = m.equivalent(); // // var ma = self.memberAssignment.selectOne(ma|ma.member = m); // var mad; // if (ma.isDefined()) { // mad = ma.memberSpec; // } // // fs.body = new TTCN!TemplateBody(); // fs.body = self.transformSingleMemberAssignment(m, mad); // field.spec.add(fs); // } // return field; //} //TODO: reactivate or differentiate above operation TDL!StructuredDataInstance transformWildcardMemberAssignment() : TTCN!FieldSpecList { ("transformWildcardMemberAssignmentX: "+self.name).log(1); var field = new TTCN!FieldSpecList(); for (m in self.dataType.allMembers()) { for (ma in self.memberAssignment) { var fs = new TTCN!FieldSpec(); fs.ref = m.equivalent(); var ma = self.memberAssignment.selectOne(ma|ma.member = m); var mad; if (ma.isDefined()) { mad = ma.memberSpec; } fs.ref = ma.member.equivalent(); fs.body = new TTCN!TemplateBody(); fs.body = self.transformSingleMemberAssignment(m, mad); fs.body = self.transformSingleMemberAssignment(ma.member, ma.memberSpec); field.spec.add(fs); } return field; Loading Loading @@ -560,6 +618,64 @@ operation TDL!DataInstanceUse getTemplateBody() : TTCN!TemplateBody { return self.getTemplateBody(false); } operation TDL!DataElementUse getTemplateBody() : TTCN!TemplateBody { return self.getTemplateBody(false); } //TODO: refactor, copied from below operation TDL!DataElementUse getTemplateBody(flat : Boolean) : TTCN!TemplateBody { var tb = new TTCN!TemplateBody(); tb.simple = new TTCN!SimpleSpec(); tb.simple.expr = new TTCN!Value(); if (useDataMapping) { var mapping = TDL!DataElementMapping.allInstances().select(m|m.mappableDataElement = self.dataElement).first(); //TODO: extract parameter tb.simple.expr.predef = new TTCN!PredefinedValue(); if (mapping.isDefined()) { //t.ref = new TTCN!TypeReference(); //TODO: check if defined //t.ref.head = mapping.elementURI; tb.simple.expr.predef.charString = mapping.elementURI.replaceAll("\"",""); } else { tb.simple.expr.predef.charString = "MAP_"+self.dataInstance.name; } } else { if (self.dataElement.isDefined() and self.dataElement.isKindOf(TDL!DataInstance)) { tb.simple.expr.ref = new TTCN!ReferencedValue(); tb.simple.expr.ref.head = new TTCN!Head(); tb.simple.expr.ref.head.target = self.dataElement.equivalent().base; } else if (self.dataElement.isDefined() and self.dataElement.isKindOf(TDL!DataType)) { //TODO:differentiate structured vs simple vs collection if (flat) { (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); tb.simple.expr.predef = new TTCN!PredefinedValue(); tb.simple.expr.predef.charString = "\"TODO_INLINE_DATA_ELEMENT_FOR_"+self.dataElement.name+"\""; } else if (self.argument.isEmpty()) { //TODO: make sure type is present tb.simple.expr = new TTCN!ArrayExpression(); } else { tb.simple=null; tb.~type = self.dataElement.getTTCNType(); tb.field = new TTCN!FieldSpecList(); for (a in self.argument) { var fs = new TTCN!FieldSpec(); fs.ref = a.parameter.equivalent(); fs.body = a.dataUse.getTemplateBody(true); //TODO: expand? tb.field.spec.add(fs); } } } else if (self.item.isDefined()) { (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); tb.simple.expr.predef = new TTCN!PredefinedValue(); tb.simple.expr.predef.charString = "\"TODO_INLINE_COLLECTION\""; } else { (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); } } return tb; } operation TDL!DataInstanceUse getTemplateBody(flat : Boolean) : TTCN!TemplateBody { var tb = new TTCN!TemplateBody(); tb.simple = new TTCN!SimpleSpec(); Loading Loading @@ -673,24 +789,15 @@ operation String getVerdictStatement() : TTCN!FunctionStatement { } operation TDL!DataUse getVerdictStatement() : TTCN!FunctionStatement { var sfs = new TTCN!FunctionStatement(); sfs.verdict = new TTCN!SetLocalVerdict(); sfs.verdict.expression = new TTCN!Value(); var verdictName = "pass"; //TODO: more reasonable default? //TODO: handle corresponding verdict properly if (self.isKindOf(TDL!DataInstanceUse)) { sfs.verdict.expression.predef = new TTCN!PredefinedValue(); if (self.dataInstance.name = "pass") { sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#pass; } else if (self.dataInstance.name = "fail") { sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#fail; } else if (self.dataInstance.name = "inconclusive") { sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#inconc; } else { //TODO } verdictName = self.dataInstance.name; } else if (self.isKindOf(TDL!DataElementUse)) { //TODO: check that it is a dataInstance of type Verdict? verdictName = self.dataElement.name; } else { //TODO } return sfs; return verdictName.getVerdictStatement(); }
plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/ttcn3mapping.etl +15 −7 Original line number Diff line number Diff line Loading @@ -236,11 +236,17 @@ rule EnumDT2E t.structured.enumDef = e; e.list = new TTCN!EnumerationList(); for (v in dt.value) { var literal = new TTCN!Enumeration(); literal.name = v.TTCNname(); e.list.enums.add(literal); } rule EnumInstance2E transform di : TDL!SimpleDataInstance to e : TTCN!Enumeration { guard : not useDataMapping and di.eContainer.isKindOf(TDL!EnumDataType) e.name = di.TTCNname(); var ep = di.dataType.equivalent(); ep.list.enums.add(e); } Loading Loading @@ -828,6 +834,8 @@ rule StructuredDI2TD di.~rule = self; (di.name).log(1); var md = new TTCN!ModuleDefinition(); md.def = td; var m = di.eContainer.equivalent(); Loading Loading @@ -862,7 +870,7 @@ rule StructuredDI2TD // or ma.memberSpec.isKindOf(TDL!AnyValueOrOmit))).log(1); tb.field = di.transformWildcardMemberAssignment(); } else { ("Simple: "+di.name).log(1); ("Structure -> Simple: "+di.name).log(1); tb.simple = new TTCN!SimpleSpec(); tb.simple.expr = di.transformMemberAssignment(); } Loading