Skip to content
Snippets Groups Projects
Commit 6e400989 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+generate behaviour first steps

parent a4864e61
No related branches found
Tags 20240708.18.28
No related merge requests found
Pipeline #7122 passed
......@@ -33,8 +33,17 @@ import org.etsi.mts.tdl.ComponentInstanceRole;
import org.etsi.mts.tdl.Extension;
import org.etsi.mts.tdl.GateType;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.Behaviour;
import org.etsi.mts.tdl.CompoundBehaviour;
import org.etsi.mts.tdl.BoundedLoopBehaviour;
import org.etsi.mts.tdl.AlternativeBehaviour;
import org.etsi.mts.tdl.ConditionalBehaviour;
import org.etsi.mts.tdl.ProcedureCall;
import org.etsi.mts.tdl.Interaction;
import org.etsi.mts.tdl.Message;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.TestConfiguration;
import org.etsi.mts.tdl.TestDescription;
import org.etsi.mts.tdl.tdlPackage;
import org.etsi.mts.tdl.asn2tdl.ASN2TDLTranslator;
import org.etsi.mts.tdl.constraints.evl.Validator;
......@@ -377,7 +386,33 @@ public class Standalone {
Resource resource = TDLHelper.load(path);
//export to external generator
EObject model = resource.getContents().get(0);
List<TestConfiguration> testConfigurations = EcoreUtil2.getAllContentsOfType(model, TestConfiguration.class);
generateConfiguration(path, model);
System.out.println();
generateBehaviour(path, model);
/*
* @startuml
component Tester {
portout p1c
portout p2c
portout p3c
}
component SUT {
portin p1d
portin p2d
portin p3d
}
p1c <--> p1d
p2c <--> p2d
p3c <--> p3d
@enduml
*/
}
private void generateConfiguration(String path, EObject model) {
List<TestConfiguration> testConfigurations = EcoreUtil2.getAllContentsOfType(model, TestConfiguration.class);
String d = "@startuml\n";
for (TestConfiguration tc : testConfigurations) {
d += "rectangle \"Test Configuration\\n"+tc.getName()+"\" {\n";
......@@ -416,27 +451,93 @@ public class Standalone {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* @startuml
component Tester {
portout p1c
portout p2c
portout p3c
private void generateBehaviour(String path, EObject model) {
List<TestDescription> testDescriptions = EcoreUtil2.getAllContentsOfType(model, TestDescription.class);
for (TestDescription td : testDescriptions) {
String d = "@startuml\n";
d+="hide footbox\n";
d+="title Foot Box removed\n";
TestConfiguration tc = td.getTestConfiguration();
for (var i : tc.getComponentInstance()) {
if (i.getRole() == ComponentInstanceRole.TESTER) {
d+="participant "+tc.getName()+"_"+i.getName()+" [\n == "
+i.getRole().toString()
+"\n ----\n \"\""
+i.getName()
+" : "
+i.getType().getName()
+"\"\"\n]\n\n";
}
}
for (var i : tc.getComponentInstance()) {
if (i.getRole() == ComponentInstanceRole.SUT) {
d+="participant "+tc.getName()+"_"+i.getName()+" [\n == "
+i.getRole().toString()
+"\n ----\n \"\""
+i.getName()
+" : "
+i.getType().getName()
+"\"\"\n]\n\n";
}
}
if (td.getBehaviourDescription()!= null) {
var b = td.getBehaviourDescription().getBehaviour();
try {
d += processBehaviour(castObject(b.getClass(), b));
} catch (Exception e) {
System.out.println("Error: "+e.getMessage());
}
}
component SUT {
portin p1d
portin p2d
portin p3d
d += "@enduml";
//TODO: need to split behaviours..
System.out.println(d);
try {
//TODO: make configurable
Files.writeString(Path.of(path+"-"+td.getName()+"-behaviour.md"), d);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
p1c <--> p1d
p2c <--> p2d
p3c <--> p3d
@enduml
}
}
private <T> T castObject(Class<T> clazz, Object object) {
return (T) object;
}
private String processBehaviour(Behaviour b) {
String d = "' Not supported yet: "+b.getClass().getName();
System.out.println(d);
return d+"\n";
}
private String processBehaviour(CompoundBehaviour b) {
String d = "";
for (var nested : b.getBlock().getBehaviour()) {
d+=processBehaviour(castObject(nested.getClass(), nested));
}
//TODO: handle prefixes and indentation?
return d;
}
private String processBehaviour(Message b) {
var sc = b.getSourceGate().getComponent();
var c = sc.container().getName()+"_"+sc.getName();
var tc = b.getTarget().get(0).getTargetGate().getComponent();
var t = tc.container().getName()+"_"+tc.getName();
var a = b.getArgument();
String d = "";
//TODO: use node model untils to get text (needs processing)
d += c+" -> "+t+" : "+b.toString()+"\n";
return d;
}
*/
}
private String processComponentInstance(ComponentInstance i) {
String c = "component \"<<"+i.getRole().getName()+">>\\n"+i.getName()+":"+i.getType().getName()+"\" { \n";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment