From 501fa2f2935aa59703dfbb0644b029ea89000274 Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Thu, 19 Nov 2020 20:05:35 +0100 Subject: [PATCH] working --- src/UMLClass.java | 17 ++++++++++++++--- src/UMLClassView.form | 24 ++++++++++++++++++++---- src/UMLClassView.java | 8 +++++--- src/UMLField.java | 2 +- src/UMLManager.java | 29 +++++++++++++++++++++++++---- src/UMLMethod.java | 2 +- 6 files changed, 66 insertions(+), 16 deletions(-) diff --git a/src/UMLClass.java b/src/UMLClass.java index 06ce399..b5075f8 100644 --- a/src/UMLClass.java +++ b/src/UMLClass.java @@ -3,11 +3,15 @@ import java.util.ArrayList; public class UMLClass { private String name; + private String packageString; private ArrayList fields = new ArrayList<>(); private ArrayList methods = new ArrayList<>(); - public UMLClass(String classDiagram) { + public UMLClass(String classDiagram, String packageString) { + + this.packageString = packageString; + String[] lines = classDiagram.split("\n"); String[] linesBeheaded = new String[lines.length-1]; @@ -17,9 +21,9 @@ public class UMLClass { for (String line : linesBeheaded) { if(line != null) { - if (line.matches("([+\\-~#]) (.+)\\((.*: .*,?)?\\):? ?(.+)?")) { //MATCHES METHOD + if (line.matches("([+\\-~#]) ?(.+)\\((.*: .*,?)?\\):? ?(.+)?")) { //MATCHES METHOD methods.add(new UMLMethod(line, name)); - } else if (line.matches("([+\\-~#]) ((?:[a-z]|[A-Z]|[0-1])+): (.*)")) { //MATCHES FIELD + } else if (line.matches("([+\\-~#]) ?((?:[a-z]|[A-Z]|[0-1])+): (.*)")) { //MATCHES FIELD fields.add(new UMLField(line)); } } @@ -29,6 +33,9 @@ public class UMLClass { @Override public String toString() { StringBuilder s = new StringBuilder(); + if(!packageString.equals("")){ + s.append("package ").append(packageString).append(";\n\n"); + } s.append("public class ").append(name).append(" {\n\n"); for (UMLField field : fields){ @@ -45,4 +52,8 @@ public class UMLClass { return s.toString(); } + + public String getName() { + return name; + } } diff --git a/src/UMLClassView.form b/src/UMLClassView.form index accbba2..b62c513 100644 --- a/src/UMLClassView.form +++ b/src/UMLClassView.form @@ -17,7 +17,7 @@ - + @@ -30,12 +30,12 @@ - + - + @@ -48,12 +48,28 @@ - + + + + + + + + + + + + + + + + + diff --git a/src/UMLClassView.java b/src/UMLClassView.java index 6a492c3..47b3f1d 100644 --- a/src/UMLClassView.java +++ b/src/UMLClassView.java @@ -11,6 +11,7 @@ public class UMLClassView { private JTextArea outputArea; private JTextField pathField; private JButton convertFileButton; + private JTextField packagePathField; private UMLManager manager; @@ -20,7 +21,7 @@ public class UMLClassView { convertButton.addActionListener(e -> { String text = inputArea.getText(); - UMLClass umlClass = new UMLClass(text); + UMLClass umlClass = new UMLClass(text, ""); outputArea.setText(umlClass.toString()); }); @@ -29,7 +30,7 @@ public class UMLClassView { @Override public void keyPressed(KeyEvent e) { String text = inputArea.getText(); - UMLClass umlClass = new UMLClass(text); + UMLClass umlClass = new UMLClass(text, ""); outputArea.setText(umlClass.toString()); } }); @@ -38,8 +39,9 @@ public class UMLClassView { @Override public void actionPerformed(ActionEvent e) { String path = pathField.getText(); + String packagePath = packagePathField.getText(); XMLParser parser = new XMLParser(path); - manager.parseClasses(parser.getClassesText()); + manager.parseClasses(parser.getClassesText(), packagePath); } }); } diff --git a/src/UMLField.java b/src/UMLField.java index 8433571..87e335e 100644 --- a/src/UMLField.java +++ b/src/UMLField.java @@ -19,7 +19,7 @@ public class UMLField { */ public UMLField(String line) { - String formatted = line.replaceAll("([+\\-~#]) ((?:[a-z]|[A-Z]|[0-1])+): (.*)", "$1;$3;$2"); + String formatted = line.replaceAll("([+\\-~#]) ?((?:[a-z]|[A-Z]|[0-1])+): (.*)", "$1;$3;$2"); String[] formattedSplit = formatted.split(";"); this.encapsulation = switch (formattedSplit[0]) { diff --git a/src/UMLManager.java b/src/UMLManager.java index 81d60b1..8eea906 100644 --- a/src/UMLManager.java +++ b/src/UMLManager.java @@ -1,21 +1,42 @@ +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; public class UMLManager { UMLClassView view; - public UMLManager(UMLClassView view){ + public UMLManager(UMLClassView view) { this.view = view; view.setManager(this); } - public void parseClasses(ArrayList classesText){ + public void parseClasses(ArrayList classesText, String packagePath) { + + String packageString = packagePath.replaceAll(".*src\\\\(.*)", "$1"); + packageString = packageString.replaceAll("\\\\", "."); + ArrayList classes = new ArrayList<>(); - for (String text : classesText){ - classes.add(new UMLClass(text)); + for (String text : classesText) { + classes.add(new UMLClass(text, packageString)); } classes.forEach(e -> System.out.println(e.toString())); + + for (UMLClass c : classes) { + try { + String path = packagePath + "/" + c.getName() + ".java"; + FileWriter fw = new FileWriter(path); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(c.toString()); + bw.close(); + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } } diff --git a/src/UMLMethod.java b/src/UMLMethod.java index bd42b6d..897b28d 100644 --- a/src/UMLMethod.java +++ b/src/UMLMethod.java @@ -29,7 +29,7 @@ public class UMLMethod { * name; * args in the UML format */ - String formatted = line.replaceAll("([+\\-~#]) (.+)\\((.*: .*,?)?\\):? ?(.+)?", "$1;$4;$2;$3"); + String formatted = line.replaceAll("([+\\-~#]) ?(.+)\\((.*: .*,?)?\\):? ?(.+)?", "$1;$4;$2;$3"); String[] parts = formatted.split(";"); this.encapsulation = switch (parts[0]) { case "+" -> "public ";