Loading plugins/org.etsi.mts.tdl.constraints.helper/src/org/etsi/mts/tdl/constraints/helper/ConstraintExporter.java +85 −2 Original line number Diff line number Diff line Loading @@ -14,25 +14,55 @@ public class ConstraintExporter { private String generatedConstraints = ""; private OutputFormat format; enum OutputFormat { EVL, OCL } public static void main(String[] args) { OutputFormat format = OutputFormat.EVL; String filename = "resources/es_20311901v010501p.docx"; filename = "resources/es_20311904v010401p.docx"; for (int i = 0; i < args.length; i++) { if (args[i].equalsIgnoreCase("--format")) if (args.length > i + 1) { if (args[i + 1].equalsIgnoreCase("ocl")) format = OutputFormat.OCL; } if (args[i].equalsIgnoreCase("--in")) if (args.length > i + 1) { filename = args[i + 1]; } } Document doc = DocumentHandler.loadDocument(new File(filename).getAbsolutePath()); ConstraintExporter exporter = new ConstraintExporter(); exporter.format = format; String title = doc.getTitle(); title = title.replaceAll(" ", "-"); String targetPath = "resources/generated/tdl-generated-"+title+".evl"; String targetPath = "resources/generated/tdl-generated-"+title+(format == OutputFormat.EVL ? ".evl" : ".ocl"); exporter.exportConstraints(doc, targetPath); } public void exportConstraints(Document doc, String generatedConstraintsPath) { generatedConstraints = ""; String imports = "import \"../library/common.eol\";\n" String imports = ""; if (this.format == OutputFormat.OCL) imports = "import 'tdl.ecore'\n\n" + "package tdl\n\n"; else imports = "import \"../library/common.eol\";\n" + "import \"../library/helper.eol\";\n" + "import \"../library/debug.eol\";\n" + "\n"; generatedConstraints+=imports; processDocumentModel(doc); if (this.format == OutputFormat.OCL) generatedConstraints+= "\n" + "endpackage" + "\n"; Path gcp = Path.of(generatedConstraintsPath); try { Files.write(gcp, Arrays.asList(generatedConstraints.split("\n")), StandardOpenOption.CREATE); Loading Loading @@ -68,6 +98,13 @@ public class ConstraintExporter { private String getConstraint(Content cx) { if (this.format == OutputFormat.OCL) return getOclConstraint(cx); else return getEvlConstraint(cx); } private String getEvlConstraint(Content cx) { String content = "context " +cx.getParent().getText() .replaceAll(".+\\s", "") Loading Loading @@ -117,4 +154,50 @@ public class ConstraintExporter { return content; } private String getOclConstraint(Content cx) { String content = "context " +cx.getParent().getText() .replaceAll(".+\\s", "") +"\n"; boolean hasConstraints = false; for (Content cs : cx.getContent()) { var lines = Arrays.asList(cs.getText().split("\n")); var idIndex = 2; if (lines.size()>3) { var title = lines.get(0); var description = lines.get(1); if (!lines.get(2).trim().startsWith("inv:")) { if (lines.get(0).trim().startsWith("inv:")) { idIndex = 0; title = ""; description = ""; } } var id = lines.get(idIndex) .replaceAll("inv: ", "") .replaceAll(":", "") ; var ocl = String.join("\n ",lines.subList(idIndex+1, lines.size())) // .replaceAll("(import|function|guard)([\\W])", "`$1`$2") //.replaceAll("\\s+", " ") ; if (ocl.trim().startsWith("This")) { ocl = " true"+" --"+ocl.trim(); } content+=" -- "+title+"\n"; content+=" inv "+id + " ('" + description.replaceAll("\\'", "\\\\\\'") +"' + self.toString()):\n"; content+=" "+ocl+"\n"; content+=" \n\n"; hasConstraints = true; } else { content+=" -- "+lines+"\n"; } } if (!hasConstraints) return ""; content+="\n"+"\n"; return content; } } Loading
plugins/org.etsi.mts.tdl.constraints.helper/src/org/etsi/mts/tdl/constraints/helper/ConstraintExporter.java +85 −2 Original line number Diff line number Diff line Loading @@ -14,25 +14,55 @@ public class ConstraintExporter { private String generatedConstraints = ""; private OutputFormat format; enum OutputFormat { EVL, OCL } public static void main(String[] args) { OutputFormat format = OutputFormat.EVL; String filename = "resources/es_20311901v010501p.docx"; filename = "resources/es_20311904v010401p.docx"; for (int i = 0; i < args.length; i++) { if (args[i].equalsIgnoreCase("--format")) if (args.length > i + 1) { if (args[i + 1].equalsIgnoreCase("ocl")) format = OutputFormat.OCL; } if (args[i].equalsIgnoreCase("--in")) if (args.length > i + 1) { filename = args[i + 1]; } } Document doc = DocumentHandler.loadDocument(new File(filename).getAbsolutePath()); ConstraintExporter exporter = new ConstraintExporter(); exporter.format = format; String title = doc.getTitle(); title = title.replaceAll(" ", "-"); String targetPath = "resources/generated/tdl-generated-"+title+".evl"; String targetPath = "resources/generated/tdl-generated-"+title+(format == OutputFormat.EVL ? ".evl" : ".ocl"); exporter.exportConstraints(doc, targetPath); } public void exportConstraints(Document doc, String generatedConstraintsPath) { generatedConstraints = ""; String imports = "import \"../library/common.eol\";\n" String imports = ""; if (this.format == OutputFormat.OCL) imports = "import 'tdl.ecore'\n\n" + "package tdl\n\n"; else imports = "import \"../library/common.eol\";\n" + "import \"../library/helper.eol\";\n" + "import \"../library/debug.eol\";\n" + "\n"; generatedConstraints+=imports; processDocumentModel(doc); if (this.format == OutputFormat.OCL) generatedConstraints+= "\n" + "endpackage" + "\n"; Path gcp = Path.of(generatedConstraintsPath); try { Files.write(gcp, Arrays.asList(generatedConstraints.split("\n")), StandardOpenOption.CREATE); Loading Loading @@ -68,6 +98,13 @@ public class ConstraintExporter { private String getConstraint(Content cx) { if (this.format == OutputFormat.OCL) return getOclConstraint(cx); else return getEvlConstraint(cx); } private String getEvlConstraint(Content cx) { String content = "context " +cx.getParent().getText() .replaceAll(".+\\s", "") Loading Loading @@ -117,4 +154,50 @@ public class ConstraintExporter { return content; } private String getOclConstraint(Content cx) { String content = "context " +cx.getParent().getText() .replaceAll(".+\\s", "") +"\n"; boolean hasConstraints = false; for (Content cs : cx.getContent()) { var lines = Arrays.asList(cs.getText().split("\n")); var idIndex = 2; if (lines.size()>3) { var title = lines.get(0); var description = lines.get(1); if (!lines.get(2).trim().startsWith("inv:")) { if (lines.get(0).trim().startsWith("inv:")) { idIndex = 0; title = ""; description = ""; } } var id = lines.get(idIndex) .replaceAll("inv: ", "") .replaceAll(":", "") ; var ocl = String.join("\n ",lines.subList(idIndex+1, lines.size())) // .replaceAll("(import|function|guard)([\\W])", "`$1`$2") //.replaceAll("\\s+", " ") ; if (ocl.trim().startsWith("This")) { ocl = " true"+" --"+ocl.trim(); } content+=" -- "+title+"\n"; content+=" inv "+id + " ('" + description.replaceAll("\\'", "\\\\\\'") +"' + self.toString()):\n"; content+=" "+ocl+"\n"; content+=" \n\n"; hasConstraints = true; } else { content+=" -- "+lines+"\n"; } } if (!hasConstraints) return ""; content+="\n"+"\n"; return content; } }