From f8e81462a59f0a8c41628648706f2b6374c8dbd4 Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Mon, 23 Nov 2020 16:48:55 +0100 Subject: [PATCH] Encapsulation optional (WIP) --- src/Regex.java | 14 ++++++++++++++ src/UMLClass.java | 6 +++--- src/UMLClassView.form | 36 +++++++++++++++++++++++++++--------- src/UMLClassView.java | 43 +++++++++++++++++++++++++++++++++++-------- src/UMLField.java | 26 +++++++++++++++++--------- src/UMLManager.java | 14 ++++++++++++++ src/UMLMethod.java | 18 +++++++++++------- 7 files changed, 121 insertions(+), 36 deletions(-) diff --git a/src/Regex.java b/src/Regex.java index 3f72964..774b8dc 100644 --- a/src/Regex.java +++ b/src/Regex.java @@ -57,4 +57,18 @@ public abstract class Regex { * */ public static final Pattern ARG_SPLIT_REGEX = Pattern.compile(" *(\\w+) *: *(\\w+)"); + + public static final Pattern FIELD_FIND_REGEX_NO_ENCAPSULATION = Pattern.compile(" *(?[+\\-~#])* *(?\\w+) *: *(?\\w+)"); + + public static final Pattern METHOD_FIND_REGEX_NO_ENCAPSULATION = Pattern.compile(" *(?[+\\-~#])* *(?\\w+) *\\( *(?(?: *\\w+ *: *\\w+ *,? *)*) *\\) *(?:: *(?\\w+))?"); + + + public static String getMethodPattern(boolean encapsulation){ + return encapsulation ? METHOD_FIND_REGEX_NO_ENCAPSULATION.pattern() : METHOD_FIND_REGEX.pattern(); + } + + public static String getFieldPattern(boolean encapsulation){ + return encapsulation ? FIELD_FIND_REGEX_NO_ENCAPSULATION.pattern() : FIELD_FIND_REGEX.pattern(); + } + } diff --git a/src/UMLClass.java b/src/UMLClass.java index 2ca4057..a22abcf 100644 --- a/src/UMLClass.java +++ b/src/UMLClass.java @@ -35,10 +35,10 @@ public class UMLClass { for (String line : linesBeheaded) { if (line != null) { - if (line.matches(Regex.METHOD_FIND_REGEX.pattern())) { //MATCHES METHOD + if (line.matches(Regex.getMethodPattern(manager.isIgnoreEcapsulation()))) { //MATCHES METHOD methods.add(new UMLMethod(line, name, manager)); - } else if (line.matches(Regex.FIELD_FIND_REGEX.pattern())) { //MATCHES FIELD - fields.add(new UMLField(line)); + } else if (line.matches(Regex.getFieldPattern(manager.isIgnoreEcapsulation()))) { //MATCHES FIELD + fields.add(new UMLField(line, manager)); } } } diff --git a/src/UMLClassView.form b/src/UMLClassView.form index 601550b..8bd2c67 100644 --- a/src/UMLClassView.form +++ b/src/UMLClassView.form @@ -1,6 +1,6 @@
- + @@ -10,7 +10,7 @@ - + @@ -105,7 +105,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -123,25 +123,43 @@ - + - + - + - + - + + + + + + + + + + + + + + + + + + + diff --git a/src/UMLClassView.java b/src/UMLClassView.java index d259642..369b913 100644 --- a/src/UMLClassView.java +++ b/src/UMLClassView.java @@ -18,8 +18,10 @@ public class UMLClassView { private JButton convertFileButton; private JTextField packagePathField; private JCheckBox watermarkBox; - private JCheckBox generateGetSetButton; - private JCheckBox autoFillConstructor; + private JCheckBox generateGetSetBox; + private JCheckBox autoFillConstructorBox; + private JCheckBox ignoreEncapsulationBox; + private JTextField defaultEncapsulationField; private UMLManager manager; @@ -72,20 +74,45 @@ public class UMLClassView { refreshTextArea(); }); - generateGetSetButton.addActionListener(new ActionListener() { + generateGetSetBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - manager.setGetSetAuto(generateGetSetButton.isSelected()); + manager.setGetSetAuto(generateGetSetBox.isSelected()); refreshTextArea(); } }); - autoFillConstructor.addActionListener(new ActionListener() { + autoFillConstructorBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - manager.setAutoGenerateConstructor(autoFillConstructor.isSelected()); + manager.setAutoGenerateConstructor(autoFillConstructorBox.isSelected()); refreshTextArea(); } }); + ignoreEncapsulationBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + manager.setIgnoreEcapsulation(ignoreEncapsulationBox.isSelected()); + defaultEncapsulationField.setEnabled(ignoreEncapsulationBox.isSelected()); + refreshTextArea(); + } + }); + + defaultEncapsulationField.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + UMLManager.setDefaultEncapsulation(defaultEncapsulationField.getText() + " "); + } + + @Override + public void keyPressed(KeyEvent e) { + UMLManager.setDefaultEncapsulation(defaultEncapsulationField.getText() + " "); + } + + @Override + public void keyReleased(KeyEvent e) { + UMLManager.setDefaultEncapsulation(defaultEncapsulationField.getText() + " "); + } + }); } private void refreshTextArea(){ @@ -107,10 +134,10 @@ public class UMLClassView { } public boolean isGetSetAutoSelected() { - return generateGetSetButton.isSelected(); + return generateGetSetBox.isSelected(); } public boolean isAutoConstructorSelected() { - return autoFillConstructor.isSelected(); + return autoFillConstructorBox.isSelected(); } } diff --git a/src/UMLField.java b/src/UMLField.java index 5aea885..f576a88 100644 --- a/src/UMLField.java +++ b/src/UMLField.java @@ -7,6 +7,8 @@ public class UMLField { private final String name; private final String encapsulation; + private UMLManager manager; + private boolean valid; /** @@ -14,18 +16,24 @@ public class UMLField { * * @param line Format: "- name: String" */ - public UMLField(String line) { + public UMLField(String line, UMLManager manager) { + this.manager = manager; - String formatted = line.replaceAll(Regex.FIELD_FIND_REGEX.pattern(), "$1;$3;$2"); + String formatted = line.replaceAll(Regex.getFieldPattern(manager.isIgnoreEcapsulation()), "$1;$3;$2"); String[] formattedSplit = formatted.split(";"); - this.encapsulation = switch (formattedSplit[0]) { - case "+" -> "public "; - case "-" -> "private "; - case "#" -> "protected "; - case "~" -> ""; - default -> "[undefined] "; - }; + if(!manager.isIgnoreEcapsulation()) { + System.out.println("not ignore"); + this.encapsulation = switch (formattedSplit[0]) { + case "+" -> "public "; + case "-" -> "private "; + case "#" -> "protected "; + case "~" -> ""; + default -> "[undefined] "; + }; + } else { + this.encapsulation = UMLManager.DEFAULT_ENCAPSULATION; + } this.name = formattedSplit[2]; this.dataType = formattedSplit[1]; diff --git a/src/UMLManager.java b/src/UMLManager.java index d3d17e9..a49f887 100644 --- a/src/UMLManager.java +++ b/src/UMLManager.java @@ -8,10 +8,12 @@ import java.util.ArrayList; */ public class UMLManager { + public static String DEFAULT_ENCAPSULATION = ""; private UMLClassView view; private boolean showWatermark; private boolean getSetAuto; private boolean autoFillConstructor; + private boolean ignoreEcapsulation; public UMLManager(UMLClassView view) { this.view = view; @@ -76,4 +78,16 @@ public class UMLManager { public void setAutoGenerateConstructor(boolean selected) { autoFillConstructor = selected; } + + public boolean isIgnoreEcapsulation() { + return ignoreEcapsulation; + } + + public void setIgnoreEcapsulation(boolean ignoreEcapsulation) { + this.ignoreEcapsulation = ignoreEcapsulation; + } + + public static void setDefaultEncapsulation(String defaultEncapsulation) { + DEFAULT_ENCAPSULATION = defaultEncapsulation; + } } diff --git a/src/UMLMethod.java b/src/UMLMethod.java index 9084d37..bfdf122 100644 --- a/src/UMLMethod.java +++ b/src/UMLMethod.java @@ -32,13 +32,17 @@ public class UMLMethod { String formatted = line.replaceAll(Regex.METHOD_FIND_REGEX.pattern(), "$1;$4;$2;$3"); String[] parts = formatted.split(";"); - this.encapsulation = switch (parts[0]) { - case "+" -> "public "; - case "-" -> "private "; - case "#" -> "protected "; - case "~" -> ""; - default -> "[undefined] "; - }; + if(!manager.isIgnoreEcapsulation()) { + this.encapsulation = switch (parts[0]) { + case "+" -> "public "; + case "-" -> "private "; + case "#" -> "protected "; + case "~" -> ""; + default -> "[undefined] "; + }; + } else { + this.encapsulation = UMLManager.DEFAULT_ENCAPSULATION; + } this.name = parts[2];