From 75dcb2c2d462a1353c58a37c2f316e33c25e26b8 Mon Sep 17 00:00:00 2001 From: Felix Homa Date: Sun, 27 Mar 2022 23:18:20 +0200 Subject: [PATCH] EitherNode --- .../pingger/korrekturHelper/AbstractNode.java | 5 +- .../pingger/korrekturHelper/CheckboxNode.java | 11 +- .../pingger/korrekturHelper/EitherNode.java | 130 ++++++++++++++++++ .../korrekturHelper/KorrekturHelper.java | 1 + .../cs/rvs/pingger/korrekturHelper/Utils.java | 20 +++ 5 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/EitherNode.java create mode 100644 src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Utils.java diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/AbstractNode.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/AbstractNode.java index da8295c..795824b 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/AbstractNode.java +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/AbstractNode.java @@ -1,9 +1,11 @@ package de.tuDortmund.cs.rvs.pingger.korrekturHelper; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.util.LinkedHashSet; +import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; @@ -28,11 +30,12 @@ public abstract class AbstractNode implements Node { main = new JPanel(true); main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS)); + main.setBorder(BorderFactory.createLineBorder(Color.GRAY)); content = new JPanel(new BorderLayout(), true); sub = new JPanel(true); sub.setLayout(new BoxLayout(sub, BoxLayout.Y_AXIS)); - sub.setBorder(new EmptyBorder(0, 8, 8, 0)); + sub.setBorder(new EmptyBorder(0, 16, 4, 0)); main.add(content); main.add(sub); diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/CheckboxNode.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/CheckboxNode.java index b384333..2e88909 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/CheckboxNode.java +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/CheckboxNode.java @@ -10,11 +10,6 @@ import javax.swing.JCheckBox; */ public class CheckboxNode extends AbstractNode { - private static String ptsToString(BigDecimal p) - { - return (p.signum() > 0 ? "+" : "") + p.toPlainString(); - } - private final JCheckBox cbx; private final String message; @@ -35,7 +30,7 @@ public class CheckboxNode extends AbstractNode { throw new IllegalArgumentException("Not a [] Node"); } points = new BigDecimal(spl[1]); message = spl[2]; - cbx = new JCheckBox(ptsToString(points) + "P " + message); + cbx = new JCheckBox(Utils.ptsToString(points) + "P " + message); content.add(cbx); } @@ -64,14 +59,14 @@ public class CheckboxNode extends AbstractNode @Override public String toConfigString() { - return "[]\t" + ptsToString(points) + "\t" + message; + return "[]\t" + Utils.ptsToString(points) + "\t" + message; } @Override public String toResultHtml(HtmlContext hc) { return "" - + ptsToString(achievedPoints(hc.mc)) + "P" + message + ""; + + Utils.ptsToString(achievedPoints(hc.mc)) + "P" + message + ""; } } diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/EitherNode.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/EitherNode.java new file mode 100644 index 0000000..8fd87a4 --- /dev/null +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/EitherNode.java @@ -0,0 +1,130 @@ +package de.tuDortmund.cs.rvs.pingger.korrekturHelper; + +import java.math.BigDecimal; +import java.math.MathContext; + +import javax.swing.BoxLayout; +import javax.swing.ButtonGroup; +import javax.swing.JRadioButton; + +/** + * @author Pingger + */ +public class EitherNode extends AbstractNode +{ + private final ButtonGroup bg; + + private final JRadioButton btn_ok, btn_fail; + private final String messageFail; + + private final String messageOK; + private final BigDecimal points; + + /** + * @param config the config String + */ + public EitherNode(String config) + { + if (config.contains("\n")) + { throw new IllegalArgumentException("Bad config! Found line feed!"); } + var spl = config.split("\t"); + if (spl.length != 4 && spl.length != 5) + { throw new IllegalArgumentException("Expected 2, 3 or 4 \\t!"); } + if (!"\\".equals(spl[0])) + { throw new IllegalArgumentException("Expected \\"); } + if (!"|".equals(spl[3])) + { throw new IllegalArgumentException("Expected | after 3rd \\t"); } + this.points = new BigDecimal(spl[1]); + messageOK = spl[2]; + messageFail = spl.length == 3 ? null : spl.length == 4 ? spl[3].substring(1).trim() : spl[4]; + if (points.signum() > 0) + { + btn_ok = new JRadioButton(Utils.ptsToString(points) + "P " + messageOK); + btn_fail = new JRadioButton( + Utils.ptsToString(BigDecimal.ZERO) + "P " + (messageFail == null ? messageOK : messageFail)); + } + else + { + btn_ok = new JRadioButton(Utils.ptsToString(BigDecimal.ZERO) + "P " + messageOK); + btn_fail = new JRadioButton(Utils.ptsToString(points) + "P " + (messageFail == null ? messageOK : messageFail)); + } + + bg = new ButtonGroup(); + bg.add(btn_ok); + bg.add(btn_fail); + + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + content.add(btn_ok); + content.add(btn_fail); + } + + @Override + protected void _reset() + { + bg.clearSelection(); + } + + @Override + public BigDecimal achievedPoints(MathContext mc) + { + if (btn_ok.isSelected()) + { + return switch (points.signum()) + { + case -1 -> BigDecimal.ZERO; + case 1 -> points; + case 0 -> BigDecimal.ZERO; + default -> throw new IllegalArgumentException("Unexpected value: " + points.signum()); + }; + } + if (btn_fail.isSelected()) + { + return switch (points.signum()) + { + case 1 -> BigDecimal.ZERO; + case -1 -> points; + case 0 -> BigDecimal.ZERO; + default -> throw new IllegalArgumentException("Unexpected value: " + points.signum()); + }; + } + return BigDecimal.ZERO; + } + + @Override + public boolean isVisibleInResultHtml() + { return true; } + + @Override + public BigDecimal maximumPoints() + { + return points.signum() < 0 ? BigDecimal.ZERO : points; + } + + @Override + public String toConfigString() + { + return "\\\t" + points.toPlainString() + "\t" + messageOK + (messageFail == null ? "" : ("\t|\t" + messageFail)); + } + + @Override + public String toResultHtml(HtmlContext hc) + { + var signum = 0; + if (points.signum() < 0) + { + signum = achievedPoints(hc.mc).equals(BigDecimal.ZERO) ? 1 : -1; + } + else + { + signum = achievedPoints(hc.mc).equals(BigDecimal.ZERO) ? -1 : 1; + } + return "" + // + "" + // + Utils.ptsToString(achievedPoints(hc.mc)) + // + (points.signum() < 0 ? "" : " / " + maximumPoints()) + "P" + // + "" + // + (btn_fail.isSelected() ? btn_fail.getText() : btn_ok.getText()) + // + ""; + } + +} diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java index a28f419..b874a4b 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java @@ -17,6 +17,7 @@ public class KorrekturHelper var in = KorrekturHelper.class.getClassLoader() .getResourceAsStream("de/tuDortmund/cs/rvs/pingger/korrekturHelper/Test.schema"); in.transferTo(System.out); + in.close(); } } diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Utils.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Utils.java new file mode 100644 index 0000000..70f9c5a --- /dev/null +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Utils.java @@ -0,0 +1,20 @@ +package de.tuDortmund.cs.rvs.pingger.korrekturHelper; + +import java.math.BigDecimal; + +/** + * @author Pingger + */ +public class Utils +{ + + /** + * @param p the {@link BigDecimal} to format + * @return a String for the given {@link BigDecimal} + */ + public static String ptsToString(BigDecimal p) + { + return (p.signum() > 0 ? "+" : "") + p.toPlainString(); + } + +}