Loading plugins/org.etsi.mts.tdl.standalone/src/org/etsi/mts/tdl/standalone/Standalone.java +118 −5 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ import java.security.CodeSource; import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.Consumer; import java.util.stream.Collectors; Loading @@ -18,6 +19,7 @@ import java.util.stream.Collectors; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.epsilon.evl.execute.UnsatisfiedConstraint; Loading @@ -26,10 +28,13 @@ import org.eclipse.ocl.pivot.utilities.OCL; import org.eclipse.ocl.pivot.utilities.ParserException; import org.eclipse.ocl.pivot.utilities.Query; import org.eclipse.xtext.EcoreUtil2; import org.etsi.mts.tdl.ComponentInstance; 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.StructuredDataType; import org.etsi.mts.tdl.TestConfiguration; import org.etsi.mts.tdl.tdlPackage; import org.etsi.mts.tdl.asn2tdl.ASN2TDLTranslator; import org.etsi.mts.tdl.constraints.evl.Validator; Loading Loading @@ -58,7 +63,7 @@ public class Standalone { validateOCL, validate, translate, exportDoc, exportJSON, importOpenAPI, importASN1, importJSON, openAPIDoc,exportTTCN3 openAPIDoc,exportTTCN3,generateDiagrams } public static void main(String[] args) throws Exception { Loading @@ -74,11 +79,35 @@ public class Standalone { // app.path = "examples/json/model.json"; app.path = "examples/validation/Naming.tdltx"; app.path = "examples/validation/Example.tdltx"; if (args.length < 1) { System.out.println("Usage: standalone [path] [modes]\n" +" path\tPath to the source(s) to process\n" +" modes\tOne or more modes to apply\n" +"Modes supported: "+Arrays.asList(MODE.values())); return; } app.path = args[0]; if (args.length == 2) { for (String a : args[1].split(",")) { try { app.modes.add(MODE.valueOf(MODE.class, a)); } catch (Exception e) { System.err.println("ERROR: "+e.getLocalizedMessage()); } } } else { System.err.println("ERROR: No mode selected!"); return; } app.recursive = false; app.modes.add(MODE.list); app.modes.add(MODE.validate); app.modes.add(MODE.exportDoc); app.modes.add(MODE.exportTTCN3); // app.modes.add(MODE.list); // app.modes.add(MODE.validate); // app.modes.add(MODE.exportDoc); // app.modes.add(MODE.exportTTCN3); // targetExtension = "tdl"; // app.modes.add(MODE.translate); Loading Loading @@ -154,6 +183,12 @@ public class Standalone { app.processElements(path, asnExtension, app::importASN1); } if (app.selected(MODE.generateDiagrams)) { String path = pathOrDefault(app.path, "examples/validation/Example.tdltx"); app.processElements(path, asnExtension, app::generateDiagrams); } if (app.selected(MODE.debug)) { //individual file without dependencies app.processElements("examples/basics/Sample.tdltx", app::listElements); Loading Loading @@ -338,6 +373,84 @@ public class Standalone { } } private void generateDiagrams(String path) { Resource resource = TDLHelper.load(path); //export to external generator EObject model = resource.getContents().get(0); List<TestConfiguration> testConfigurations = EcoreUtil2.getAllContentsOfType(model, TestConfiguration.class); String d = "@startuml\n"; for (TestConfiguration tc : testConfigurations) { d += "rectangle \"Test Configuration\\n"+tc.getName()+"\" {\n"; for (var i : tc.getComponentInstance()) { if (i.getRole() == ComponentInstanceRole.TESTER) { d += processComponentInstance(i); } } for (var i : tc.getComponentInstance()) { if (i.getRole() == ComponentInstanceRole.SUT) { d += processComponentInstance(i); } } for (var i : tc.getConnection()) { var e0 = i.getEndPoint().get(0); var e1 = i.getEndPoint().get(1); if (e0.getComponent().getRole().equals(ComponentInstanceRole.SUT)) { var e = e1; e1 = e0; e0 = e; } String c = ""+e0.getComponent().getName()+"_"+e0.getGate().getName()+"" +" <--> " +""+e1.getComponent().getName()+"_"+e1.getGate().getName()+"" +"\n"; d+=c; } d +="\n}\n"; } d += "@enduml"; System.out.println(d); try { //TODO: make configurable Files.writeString(Path.of(path+"-config.md"), d); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * @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 String processComponentInstance(ComponentInstance i) { String c = "component \"<<"+i.getRole().getName()+">>\\n"+i.getName()+":"+i.getType().getName()+"\" { \n"; String portType = "portout"; if (i.getRole().equals(ComponentInstanceRole.SUT)) { portType = "portin"; } for (var g : i.getType().getGateInstance()) { c+=" "+portType+" \""+g.getName()+":"+g.getType().getName()+"\" as "+i.getName()+"_"+g.getName()+"\n"; } c+="\n}\n"; return c; } private void importASN1(String path) { importData(path, new ASN2TDLTranslator()); Loading Loading
plugins/org.etsi.mts.tdl.standalone/src/org/etsi/mts/tdl/standalone/Standalone.java +118 −5 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ import java.security.CodeSource; import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.Consumer; import java.util.stream.Collectors; Loading @@ -18,6 +19,7 @@ import java.util.stream.Collectors; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.epsilon.evl.execute.UnsatisfiedConstraint; Loading @@ -26,10 +28,13 @@ import org.eclipse.ocl.pivot.utilities.OCL; import org.eclipse.ocl.pivot.utilities.ParserException; import org.eclipse.ocl.pivot.utilities.Query; import org.eclipse.xtext.EcoreUtil2; import org.etsi.mts.tdl.ComponentInstance; 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.StructuredDataType; import org.etsi.mts.tdl.TestConfiguration; import org.etsi.mts.tdl.tdlPackage; import org.etsi.mts.tdl.asn2tdl.ASN2TDLTranslator; import org.etsi.mts.tdl.constraints.evl.Validator; Loading Loading @@ -58,7 +63,7 @@ public class Standalone { validateOCL, validate, translate, exportDoc, exportJSON, importOpenAPI, importASN1, importJSON, openAPIDoc,exportTTCN3 openAPIDoc,exportTTCN3,generateDiagrams } public static void main(String[] args) throws Exception { Loading @@ -74,11 +79,35 @@ public class Standalone { // app.path = "examples/json/model.json"; app.path = "examples/validation/Naming.tdltx"; app.path = "examples/validation/Example.tdltx"; if (args.length < 1) { System.out.println("Usage: standalone [path] [modes]\n" +" path\tPath to the source(s) to process\n" +" modes\tOne or more modes to apply\n" +"Modes supported: "+Arrays.asList(MODE.values())); return; } app.path = args[0]; if (args.length == 2) { for (String a : args[1].split(",")) { try { app.modes.add(MODE.valueOf(MODE.class, a)); } catch (Exception e) { System.err.println("ERROR: "+e.getLocalizedMessage()); } } } else { System.err.println("ERROR: No mode selected!"); return; } app.recursive = false; app.modes.add(MODE.list); app.modes.add(MODE.validate); app.modes.add(MODE.exportDoc); app.modes.add(MODE.exportTTCN3); // app.modes.add(MODE.list); // app.modes.add(MODE.validate); // app.modes.add(MODE.exportDoc); // app.modes.add(MODE.exportTTCN3); // targetExtension = "tdl"; // app.modes.add(MODE.translate); Loading Loading @@ -154,6 +183,12 @@ public class Standalone { app.processElements(path, asnExtension, app::importASN1); } if (app.selected(MODE.generateDiagrams)) { String path = pathOrDefault(app.path, "examples/validation/Example.tdltx"); app.processElements(path, asnExtension, app::generateDiagrams); } if (app.selected(MODE.debug)) { //individual file without dependencies app.processElements("examples/basics/Sample.tdltx", app::listElements); Loading Loading @@ -338,6 +373,84 @@ public class Standalone { } } private void generateDiagrams(String path) { Resource resource = TDLHelper.load(path); //export to external generator EObject model = resource.getContents().get(0); List<TestConfiguration> testConfigurations = EcoreUtil2.getAllContentsOfType(model, TestConfiguration.class); String d = "@startuml\n"; for (TestConfiguration tc : testConfigurations) { d += "rectangle \"Test Configuration\\n"+tc.getName()+"\" {\n"; for (var i : tc.getComponentInstance()) { if (i.getRole() == ComponentInstanceRole.TESTER) { d += processComponentInstance(i); } } for (var i : tc.getComponentInstance()) { if (i.getRole() == ComponentInstanceRole.SUT) { d += processComponentInstance(i); } } for (var i : tc.getConnection()) { var e0 = i.getEndPoint().get(0); var e1 = i.getEndPoint().get(1); if (e0.getComponent().getRole().equals(ComponentInstanceRole.SUT)) { var e = e1; e1 = e0; e0 = e; } String c = ""+e0.getComponent().getName()+"_"+e0.getGate().getName()+"" +" <--> " +""+e1.getComponent().getName()+"_"+e1.getGate().getName()+"" +"\n"; d+=c; } d +="\n}\n"; } d += "@enduml"; System.out.println(d); try { //TODO: make configurable Files.writeString(Path.of(path+"-config.md"), d); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * @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 String processComponentInstance(ComponentInstance i) { String c = "component \"<<"+i.getRole().getName()+">>\\n"+i.getName()+":"+i.getType().getName()+"\" { \n"; String portType = "portout"; if (i.getRole().equals(ComponentInstanceRole.SUT)) { portType = "portin"; } for (var g : i.getType().getGateInstance()) { c+=" "+portType+" \""+g.getName()+":"+g.getType().getName()+"\" as "+i.getName()+"_"+g.getName()+"\n"; } c+="\n}\n"; return c; } private void importASN1(String path) { importData(path, new ASN2TDLTranslator()); Loading