Loading plugins/org.etsi.mts.tdl.constraints.helper/src/org/etsi/mts/tdl/constraints/helper/ConstraintExporter.java +84 −82 Original line number Original line Diff line number Diff line Loading @@ -20,8 +20,7 @@ public class ConstraintExporter { private OutputFormat format; private OutputFormat format; enum OutputFormat { enum OutputFormat { EVL, EVL, OCL OCL } } public static void main(String[] args) { public static void main(String[] args) { Loading @@ -29,6 +28,8 @@ public class ConstraintExporter { OutputFormat format = OutputFormat.EVL; OutputFormat format = OutputFormat.EVL; String filename = "resources/es_20311901v010501p.docx"; String filename = "resources/es_20311901v010501p.docx"; filename = "resources/es_20311904v010401p.docx"; filename = "resources/es_20311904v010401p.docx"; String[] extraImports = new String[0]; String generatedPackage = "tdl"; for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++) { if (args[i].equalsIgnoreCase("--format")) if (args[i].equalsIgnoreCase("--format")) Loading @@ -40,6 +41,14 @@ public class ConstraintExporter { if (args.length > i + 1) { if (args.length > i + 1) { filename = args[i + 1]; filename = args[i + 1]; } } if (args[i].equalsIgnoreCase("--import")) if (args.length > i + 1) { extraImports = args[i + 1].split(","); } if (args[i].equalsIgnoreCase("--generated-package")) if (args.length > i + 1) { generatedPackage = args[i + 1]; } } } Document doc = DocumentHandler.loadDocument(new File(filename).getAbsolutePath()); Document doc = DocumentHandler.loadDocument(new File(filename).getAbsolutePath()); Loading @@ -47,36 +56,38 @@ public class ConstraintExporter { exporter.format = format; exporter.format = format; String title = doc.getTitle(); String title = doc.getTitle(); title = title.replaceAll(" ", "-"); title = title.replaceAll(" ", "-"); String targetPath = "resources/generated/tdl-generated-"+title+(format == OutputFormat.EVL ? ".evl" : ".ocl"); String targetPath = "resources/generated/tdl-generated-" + title exporter.exportConstraints(doc, targetPath); + (format == OutputFormat.EVL ? ".evl" : ".ocl"); exporter.exportConstraints(doc, generatedPackage, extraImports, targetPath); } } public void exportConstraints(Document doc, String generatedConstraintsPath) { public void exportConstraints(Document doc, String generatedPackage, String[] extraImports, String generatedConstraintsPath) { generatedConstraints = ""; generatedConstraints = ""; String imports = ""; String imports = ""; if (this.format == OutputFormat.OCL) if (this.format == OutputFormat.OCL) { imports = "import 'http://www.etsi.org/spec/TDL/1.4.1'\n\n" imports = "import 'http://www.etsi.org/spec/TDL/1.4.1'\n"; + "package tdl\n\n"; for (String imp : extraImports) { else imports += "import '" + imp + "'\n"; imports = "import \"../library/common.eol\";\n" } + "import \"../library/helper.eol\";\n" imports += "\n"; + "import \"../library/debug.eol\";\n" imports += "package " + generatedPackage + "\n\n"; + "\n"; } else imports = "import \"../library/common.eol\";\n" + "import \"../library/helper.eol\";\n" + "import \"../library/debug.eol\";\n" + "\n"; generatedConstraints += imports; generatedConstraints += imports; processDocumentModel(doc); processDocumentModel(doc); if (this.format == OutputFormat.OCL) if (this.format == OutputFormat.OCL) generatedConstraints += "\n" + "endpackage" + "\n"; generatedConstraints += "\n" + "endpackage" + "\n"; Path gcp = Path.of(generatedConstraintsPath); Path gcp = Path.of(generatedConstraintsPath); try { try { Files.write(gcp, Arrays.asList(generatedConstraints.split("\n")), Files.write(gcp, Arrays.asList(generatedConstraints.split("\n")), StandardOpenOption.WRITE, StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { } catch (IOException e) { // TODO Auto-generated catch block // TODO Auto-generated catch block e.printStackTrace(); e.printStackTrace(); } } } } private void processDocumentModel(Content c) { private void processDocumentModel(Content c) { // DONE: Escape keywords // DONE: Escape keywords // DONE: Export to file tdl-gen.evl (separate function) // DONE: Export to file tdl-gen.evl (separate function) Loading @@ -100,7 +111,6 @@ public class ConstraintExporter { } } } } private String getConstraint(Content cx) { private String getConstraint(Content cx) { if (this.format == OutputFormat.OCL) if (this.format == OutputFormat.OCL) return getOclConstraint(cx); return getOclConstraint(cx); Loading @@ -110,11 +120,9 @@ public class ConstraintExporter { Pattern letPattern = Pattern.compile("\\s*let(.+?)\\s*in\\s(.*)", Pattern.DOTALL); Pattern letPattern = Pattern.compile("\\s*let(.+?)\\s*in\\s(.*)", Pattern.DOTALL); Pattern wsPattern = Pattern.compile("(\\s*)(.*)", Pattern.DOTALL); Pattern wsPattern = Pattern.compile("(\\s*)(.*)", Pattern.DOTALL); private String getEvlConstraint(Content cx) { private String getEvlConstraint(Content cx) { String content = "context " String content = "context " + cx.getParent().getText().replaceAll(".+\\s", "") + " {" + "\n"; +cx.getParent().getText() .replaceAll(".+\\s", "") +" {"+"\n"; for (Content cs : cx.getContent()) { for (Content cs : cx.getContent()) { var lines = Arrays.asList(cs.getText().split("\n")); var lines = Arrays.asList(cs.getText().split("\n")); var idIndex = 2; var idIndex = 2; Loading @@ -134,10 +142,7 @@ public class ConstraintExporter { // idIndex++; // idIndex++; // } // } } } var id = lines.get(idIndex) var id = lines.get(idIndex).replaceAll("inv: ", "").replaceAll(":", ""); .replaceAll("inv: ", "") .replaceAll(":", "") ; var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) .replaceAll("(import|function|guard)([\\W])", "`$1`$2") .replaceAll("(import|function|guard)([\\W])", "`$1`$2") // .replaceAll("\\s+", " ") // .replaceAll("\\s+", " ") Loading Loading @@ -173,8 +178,7 @@ public class ConstraintExporter { content += " //" + title + "\n"; content += " //" + title + "\n"; content += " constraint " + id + " {" + "\n"; content += " constraint " + id + " {" + "\n"; content += " check" + (isStatementBlock ? " " : ": ") + ocl + "\n"; content += " check" + (isStatementBlock ? " " : ": ") + ocl + "\n"; content+=" message: self.prefix() + \n" content += " message: self.prefix() + \n" + " \"" + description + "\"" + "\n"; +" \""+description+"\""+"\n"; content += " }\n" + "\n"; content += " }\n" + "\n"; } else { } else { content += " //" + lines + "\n"; content += " //" + lines + "\n"; Loading @@ -185,10 +189,7 @@ public class ConstraintExporter { } } private String getOclConstraint(Content cx) { private String getOclConstraint(Content cx) { String content = "context " String content = "context " + cx.getParent().getText().replaceAll(".+\\s", "") + "\n"; +cx.getParent().getText() .replaceAll(".+\\s", "") +"\n"; boolean hasConstraints = false; boolean hasConstraints = false; for (Content cs : cx.getContent()) { for (Content cs : cx.getContent()) { var lines = Arrays.asList(cs.getText().split("\n")); var lines = Arrays.asList(cs.getText().split("\n")); Loading @@ -203,10 +204,7 @@ public class ConstraintExporter { description = ""; description = ""; } } } } var id = lines.get(idIndex) var id = lines.get(idIndex).replaceAll("inv: ", "").replaceAll(":", ""); .replaceAll("inv: ", "") .replaceAll(":", "") ; var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) // .replaceAll("(import|function|guard)([\\W])", "`$1`$2") // .replaceAll("(import|function|guard)([\\W])", "`$1`$2") // .replaceAll("\\s+", " ") // .replaceAll("\\s+", " ") Loading @@ -216,6 +214,10 @@ public class ConstraintExporter { if (ocl.trim().startsWith("This")) { if (ocl.trim().startsWith("This")) { ocl = " true" + " --" + ocl.trim(); ocl = " true" + " --" + ocl.trim(); } } //Escape reserved words ocl = Pattern.compile("(?<=\\.)(body)(?=\\s|\\.|-|\\))").matcher(ocl).replaceAll("_'$1'"); content += " -- " + title + "\n"; content += " -- " + title + "\n"; content += " inv " + id + " ('" + description.replaceAll("\\'", "\\\\\\'") + "' + self.toString()):\n"; content += " inv " + id + " ('" + description.replaceAll("\\'", "\\\\\\'") + "' + self.toString()):\n"; content += " " + ocl + "\n"; content += " " + ocl + "\n"; Loading Loading
plugins/org.etsi.mts.tdl.constraints.helper/src/org/etsi/mts/tdl/constraints/helper/ConstraintExporter.java +84 −82 Original line number Original line Diff line number Diff line Loading @@ -20,8 +20,7 @@ public class ConstraintExporter { private OutputFormat format; private OutputFormat format; enum OutputFormat { enum OutputFormat { EVL, EVL, OCL OCL } } public static void main(String[] args) { public static void main(String[] args) { Loading @@ -29,6 +28,8 @@ public class ConstraintExporter { OutputFormat format = OutputFormat.EVL; OutputFormat format = OutputFormat.EVL; String filename = "resources/es_20311901v010501p.docx"; String filename = "resources/es_20311901v010501p.docx"; filename = "resources/es_20311904v010401p.docx"; filename = "resources/es_20311904v010401p.docx"; String[] extraImports = new String[0]; String generatedPackage = "tdl"; for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++) { if (args[i].equalsIgnoreCase("--format")) if (args[i].equalsIgnoreCase("--format")) Loading @@ -40,6 +41,14 @@ public class ConstraintExporter { if (args.length > i + 1) { if (args.length > i + 1) { filename = args[i + 1]; filename = args[i + 1]; } } if (args[i].equalsIgnoreCase("--import")) if (args.length > i + 1) { extraImports = args[i + 1].split(","); } if (args[i].equalsIgnoreCase("--generated-package")) if (args.length > i + 1) { generatedPackage = args[i + 1]; } } } Document doc = DocumentHandler.loadDocument(new File(filename).getAbsolutePath()); Document doc = DocumentHandler.loadDocument(new File(filename).getAbsolutePath()); Loading @@ -47,36 +56,38 @@ public class ConstraintExporter { exporter.format = format; exporter.format = format; String title = doc.getTitle(); String title = doc.getTitle(); title = title.replaceAll(" ", "-"); title = title.replaceAll(" ", "-"); String targetPath = "resources/generated/tdl-generated-"+title+(format == OutputFormat.EVL ? ".evl" : ".ocl"); String targetPath = "resources/generated/tdl-generated-" + title exporter.exportConstraints(doc, targetPath); + (format == OutputFormat.EVL ? ".evl" : ".ocl"); exporter.exportConstraints(doc, generatedPackage, extraImports, targetPath); } } public void exportConstraints(Document doc, String generatedConstraintsPath) { public void exportConstraints(Document doc, String generatedPackage, String[] extraImports, String generatedConstraintsPath) { generatedConstraints = ""; generatedConstraints = ""; String imports = ""; String imports = ""; if (this.format == OutputFormat.OCL) if (this.format == OutputFormat.OCL) { imports = "import 'http://www.etsi.org/spec/TDL/1.4.1'\n\n" imports = "import 'http://www.etsi.org/spec/TDL/1.4.1'\n"; + "package tdl\n\n"; for (String imp : extraImports) { else imports += "import '" + imp + "'\n"; imports = "import \"../library/common.eol\";\n" } + "import \"../library/helper.eol\";\n" imports += "\n"; + "import \"../library/debug.eol\";\n" imports += "package " + generatedPackage + "\n\n"; + "\n"; } else imports = "import \"../library/common.eol\";\n" + "import \"../library/helper.eol\";\n" + "import \"../library/debug.eol\";\n" + "\n"; generatedConstraints += imports; generatedConstraints += imports; processDocumentModel(doc); processDocumentModel(doc); if (this.format == OutputFormat.OCL) if (this.format == OutputFormat.OCL) generatedConstraints += "\n" + "endpackage" + "\n"; generatedConstraints += "\n" + "endpackage" + "\n"; Path gcp = Path.of(generatedConstraintsPath); Path gcp = Path.of(generatedConstraintsPath); try { try { Files.write(gcp, Arrays.asList(generatedConstraints.split("\n")), Files.write(gcp, Arrays.asList(generatedConstraints.split("\n")), StandardOpenOption.WRITE, StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { } catch (IOException e) { // TODO Auto-generated catch block // TODO Auto-generated catch block e.printStackTrace(); e.printStackTrace(); } } } } private void processDocumentModel(Content c) { private void processDocumentModel(Content c) { // DONE: Escape keywords // DONE: Escape keywords // DONE: Export to file tdl-gen.evl (separate function) // DONE: Export to file tdl-gen.evl (separate function) Loading @@ -100,7 +111,6 @@ public class ConstraintExporter { } } } } private String getConstraint(Content cx) { private String getConstraint(Content cx) { if (this.format == OutputFormat.OCL) if (this.format == OutputFormat.OCL) return getOclConstraint(cx); return getOclConstraint(cx); Loading @@ -110,11 +120,9 @@ public class ConstraintExporter { Pattern letPattern = Pattern.compile("\\s*let(.+?)\\s*in\\s(.*)", Pattern.DOTALL); Pattern letPattern = Pattern.compile("\\s*let(.+?)\\s*in\\s(.*)", Pattern.DOTALL); Pattern wsPattern = Pattern.compile("(\\s*)(.*)", Pattern.DOTALL); Pattern wsPattern = Pattern.compile("(\\s*)(.*)", Pattern.DOTALL); private String getEvlConstraint(Content cx) { private String getEvlConstraint(Content cx) { String content = "context " String content = "context " + cx.getParent().getText().replaceAll(".+\\s", "") + " {" + "\n"; +cx.getParent().getText() .replaceAll(".+\\s", "") +" {"+"\n"; for (Content cs : cx.getContent()) { for (Content cs : cx.getContent()) { var lines = Arrays.asList(cs.getText().split("\n")); var lines = Arrays.asList(cs.getText().split("\n")); var idIndex = 2; var idIndex = 2; Loading @@ -134,10 +142,7 @@ public class ConstraintExporter { // idIndex++; // idIndex++; // } // } } } var id = lines.get(idIndex) var id = lines.get(idIndex).replaceAll("inv: ", "").replaceAll(":", ""); .replaceAll("inv: ", "") .replaceAll(":", "") ; var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) .replaceAll("(import|function|guard)([\\W])", "`$1`$2") .replaceAll("(import|function|guard)([\\W])", "`$1`$2") // .replaceAll("\\s+", " ") // .replaceAll("\\s+", " ") Loading Loading @@ -173,8 +178,7 @@ public class ConstraintExporter { content += " //" + title + "\n"; content += " //" + title + "\n"; content += " constraint " + id + " {" + "\n"; content += " constraint " + id + " {" + "\n"; content += " check" + (isStatementBlock ? " " : ": ") + ocl + "\n"; content += " check" + (isStatementBlock ? " " : ": ") + ocl + "\n"; content+=" message: self.prefix() + \n" content += " message: self.prefix() + \n" + " \"" + description + "\"" + "\n"; +" \""+description+"\""+"\n"; content += " }\n" + "\n"; content += " }\n" + "\n"; } else { } else { content += " //" + lines + "\n"; content += " //" + lines + "\n"; Loading @@ -185,10 +189,7 @@ public class ConstraintExporter { } } private String getOclConstraint(Content cx) { private String getOclConstraint(Content cx) { String content = "context " String content = "context " + cx.getParent().getText().replaceAll(".+\\s", "") + "\n"; +cx.getParent().getText() .replaceAll(".+\\s", "") +"\n"; boolean hasConstraints = false; boolean hasConstraints = false; for (Content cs : cx.getContent()) { for (Content cs : cx.getContent()) { var lines = Arrays.asList(cs.getText().split("\n")); var lines = Arrays.asList(cs.getText().split("\n")); Loading @@ -203,10 +204,7 @@ public class ConstraintExporter { description = ""; description = ""; } } } } var id = lines.get(idIndex) var id = lines.get(idIndex).replaceAll("inv: ", "").replaceAll(":", ""); .replaceAll("inv: ", "") .replaceAll(":", "") ; var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) var ocl = String.join("\n ", lines.subList(idIndex + 1, lines.size())) // .replaceAll("(import|function|guard)([\\W])", "`$1`$2") // .replaceAll("(import|function|guard)([\\W])", "`$1`$2") // .replaceAll("\\s+", " ") // .replaceAll("\\s+", " ") Loading @@ -216,6 +214,10 @@ public class ConstraintExporter { if (ocl.trim().startsWith("This")) { if (ocl.trim().startsWith("This")) { ocl = " true" + " --" + ocl.trim(); ocl = " true" + " --" + ocl.trim(); } } //Escape reserved words ocl = Pattern.compile("(?<=\\.)(body)(?=\\s|\\.|-|\\))").matcher(ocl).replaceAll("_'$1'"); content += " -- " + title + "\n"; content += " -- " + title + "\n"; content += " inv " + id + " ('" + description.replaceAll("\\'", "\\\\\\'") + "' + self.toString()):\n"; content += " inv " + id + " ('" + description.replaceAll("\\'", "\\\\\\'") + "' + self.toString()):\n"; content += " " + ocl + "\n"; content += " " + ocl + "\n"; Loading