More Work
This commit is contained in:
parent
ad432c45fb
commit
7eb519f9b5
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
target/
|
|
@ -11,11 +11,12 @@ import javax.swing.border.EmptyBorder;
|
||||||
/**
|
/**
|
||||||
* @author Pingger
|
* @author Pingger
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractNode extends JPanel implements Node
|
public abstract class AbstractNode implements Node
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 2766238124985613235L;
|
|
||||||
/** Content-Panel */
|
/** Content-Panel */
|
||||||
protected final JPanel content;
|
protected final JPanel content;
|
||||||
|
private final JPanel main;
|
||||||
|
|
||||||
private final JPanel sub;
|
private final JPanel sub;
|
||||||
/** Sub-Nodes */
|
/** Sub-Nodes */
|
||||||
protected final LinkedHashSet<Node> subNodes = new LinkedHashSet<>();
|
protected final LinkedHashSet<Node> subNodes = new LinkedHashSet<>();
|
||||||
|
@ -25,18 +26,23 @@ public abstract class AbstractNode extends JPanel implements Node
|
||||||
*/
|
*/
|
||||||
public AbstractNode()
|
public AbstractNode()
|
||||||
{
|
{
|
||||||
super(true);
|
main = new JPanel(true);
|
||||||
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
content = new JPanel(new BorderLayout(), true);
|
content = new JPanel(new BorderLayout(), true);
|
||||||
sub = new JPanel(true);
|
sub = new JPanel(true);
|
||||||
sub.setLayout(new BoxLayout(sub, BoxLayout.Y_AXIS));
|
sub.setLayout(new BoxLayout(sub, BoxLayout.Y_AXIS));
|
||||||
sub.setBorder(new EmptyBorder(0, 8, 8, 0));
|
sub.setBorder(new EmptyBorder(0, 8, 8, 0));
|
||||||
|
|
||||||
add(content);
|
main.add(content);
|
||||||
add(sub);
|
main.add(sub);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets this node
|
||||||
|
*/
|
||||||
|
protected abstract void _reset();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addSubNode(Node n)
|
public void addSubNode(Node n)
|
||||||
{
|
{
|
||||||
|
@ -46,7 +52,7 @@ public abstract class AbstractNode extends JPanel implements Node
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getComponent()
|
public Component getComponent()
|
||||||
{ return this; }
|
{ return main; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LinkedHashSet<Node> getSubNodes()
|
public LinkedHashSet<Node> getSubNodes()
|
||||||
|
@ -55,6 +61,7 @@ public abstract class AbstractNode extends JPanel implements Node
|
||||||
@Override
|
@Override
|
||||||
public void reset()
|
public void reset()
|
||||||
{
|
{
|
||||||
|
_reset();
|
||||||
subNodes.forEach(Node::reset);
|
subNodes.forEach(Node::reset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,13 +5,25 @@ import java.math.MathContext;
|
||||||
|
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Pingger
|
||||||
|
*/
|
||||||
public class CheckboxNode extends AbstractNode
|
public class CheckboxNode extends AbstractNode
|
||||||
{
|
{
|
||||||
|
private static String ptsToString(BigDecimal p)
|
||||||
|
{
|
||||||
|
return (p.signum() > 0 ? "+" : "") + p.toPlainString();
|
||||||
|
}
|
||||||
|
|
||||||
private final JCheckBox cbx;
|
private final JCheckBox cbx;
|
||||||
|
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
||||||
private final BigDecimal points;
|
private final BigDecimal points;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param configString config String to parse
|
||||||
|
*/
|
||||||
public CheckboxNode(String configString)
|
public CheckboxNode(String configString)
|
||||||
{
|
{
|
||||||
if (configString.contains("\n"))
|
if (configString.contains("\n"))
|
||||||
|
@ -23,7 +35,14 @@ public class CheckboxNode extends AbstractNode
|
||||||
{ throw new IllegalArgumentException("Not a [] Node"); }
|
{ throw new IllegalArgumentException("Not a [] Node"); }
|
||||||
points = new BigDecimal(spl[1]);
|
points = new BigDecimal(spl[1]);
|
||||||
message = spl[2];
|
message = spl[2];
|
||||||
cbx = new JCheckBox();
|
cbx = new JCheckBox(ptsToString(points) + "P " + message);
|
||||||
|
content.add(cbx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void _reset()
|
||||||
|
{
|
||||||
|
cbx.setSelected(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -45,14 +64,14 @@ public class CheckboxNode extends AbstractNode
|
||||||
@Override
|
@Override
|
||||||
public String toConfigString()
|
public String toConfigString()
|
||||||
{
|
{
|
||||||
return "[]\t" + (points.signum() > 0 ? "+" : "") + points.toPlainString() + "\t" + message;
|
return "[]\t" + ptsToString(points) + "\t" + message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toResultHtml()
|
public String toResultHtml(HtmlContext hc)
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
return "<li" + hc.styleText(points.signum()) + "><span" + hc.stylePts(points.signum()) + ">"
|
||||||
return null;
|
+ ptsToString(achievedPoints(hc.mc)) + "P</span>" + message + "</li>";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
|
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.MathContext;
|
import java.math.MathContext;
|
||||||
|
@ -13,7 +14,6 @@ public class HeaderNode extends AbstractNode
|
||||||
{
|
{
|
||||||
private static final String[] configStyles = { "", "#", "##", "###", "####", "#####", "######", "*", "_" };
|
private static final String[] configStyles = { "", "#", "##", "###", "####", "#####", "######", "*", "_" };
|
||||||
private static final String[] htmlStyles = { "", "h1", "h2", "h3", "h4", "h5", "h6", "b", "i" };
|
private static final String[] htmlStyles = { "", "h1", "h2", "h3", "h4", "h5", "h6", "b", "i" };
|
||||||
private static final long serialVersionUID = -5511548087337263042L;
|
|
||||||
|
|
||||||
private static int indexOf(String[] array, String elem)
|
private static int indexOf(String[] array, String elem)
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,13 @@ public class HeaderNode extends AbstractNode
|
||||||
lbl.setFont(new Font(lbl.getFont().getFontName(), Font.ITALIC, lbl.getFont().getSize()));
|
lbl.setFont(new Font(lbl.getFont().getFontName(), Font.ITALIC, lbl.getFont().getSize()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
content.add(lbl, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void _reset()
|
||||||
|
{
|
||||||
|
// does nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -109,7 +116,7 @@ public class HeaderNode extends AbstractNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toResultHtml()
|
public String toResultHtml(HtmlContext hc)
|
||||||
{
|
{
|
||||||
return (style == 0 ? "" : "<" + htmlStyles[style] + (css == null ? "" : " style=\"" + css + "\"") + ">") + message
|
return (style == 0 ? "" : "<" + htmlStyles[style] + (css == null ? "" : " style=\"" + css + "\"") + ">") + message
|
||||||
+ (style == 0 ? "" : "</" + htmlStyles[style] + ">");
|
+ (style == 0 ? "" : "</" + htmlStyles[style] + ">");
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
|
||||||
|
|
||||||
|
import java.math.MathContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Pingger
|
||||||
|
*/
|
||||||
|
public class HtmlContext
|
||||||
|
{
|
||||||
|
/** Style for the Points, when the best case Points have been achieved */
|
||||||
|
public String fullPtsStyle = "";
|
||||||
|
/** Style for the Text, when the best case Points have been achieved */
|
||||||
|
public String fullPtsTextStyle = "";
|
||||||
|
/** {@link MathContext} for Output */
|
||||||
|
public MathContext mc;
|
||||||
|
/** Style for the Points, when the worst case Points have been achieved */
|
||||||
|
public String noPtsStyle = "";
|
||||||
|
/** Style for the Text, when the best case Points have been achieved */
|
||||||
|
public String noPtsTextStyle = "";
|
||||||
|
/**
|
||||||
|
* Style for the Points, when neither best nor worst case Points have been
|
||||||
|
* achieved
|
||||||
|
*/
|
||||||
|
public String partialPtsStyle = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Style for the Text, when neither best nor worst case Points have been
|
||||||
|
* achieved
|
||||||
|
*/
|
||||||
|
public String partialPtsTextStyle = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param signum the style-signum -1 worst case, 0 partial case, 1 best case
|
||||||
|
* @return the style tag-parameter for the given signum for the Points
|
||||||
|
*/
|
||||||
|
public String stylePts(int signum)
|
||||||
|
{
|
||||||
|
return switch (signum)
|
||||||
|
{
|
||||||
|
case 0 -> partialPtsStyle.isBlank() ? "" : " style=\"" + partialPtsStyle + "\"";
|
||||||
|
case 1 -> fullPtsStyle.isBlank() ? "" : " style=\"" + fullPtsStyle + "\"";
|
||||||
|
case -1 -> noPtsStyle.isBlank() ? "" : " style=\"" + noPtsStyle + "\"";
|
||||||
|
default -> throw new IllegalArgumentException("Signum must be one of -1, 0, 1");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param signum the style-signum -1 worst case, 0 partial case, 1 best case
|
||||||
|
* @return the style tag-parameter for the given signum for the Text
|
||||||
|
*/
|
||||||
|
public String styleText(int signum)
|
||||||
|
{
|
||||||
|
return switch (signum)
|
||||||
|
{
|
||||||
|
case 0 -> partialPtsTextStyle.isBlank() ? "" : " style=\"" + partialPtsTextStyle + "\"";
|
||||||
|
case 1 -> fullPtsTextStyle.isBlank() ? "" : " style=\"" + fullPtsTextStyle + "\"";
|
||||||
|
case -1 -> noPtsTextStyle.isBlank() ? "" : " style=\"" + noPtsTextStyle + "\"";
|
||||||
|
default -> throw new IllegalArgumentException("Signum must be one of -1, 0, 1");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,9 +2,16 @@ package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Pingger
|
||||||
|
*/
|
||||||
public class KorrekturHelper
|
public class KorrekturHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param args [0] input File
|
||||||
|
* @throws IOException in case reading the input file fails
|
||||||
|
*/
|
||||||
public static void main(String[] args) throws IOException
|
public static void main(String[] args) throws IOException
|
||||||
{
|
{
|
||||||
var in = KorrekturHelper.class.getClassLoader()
|
var in = KorrekturHelper.class.getClassLoader()
|
||||||
|
|
|
@ -55,7 +55,9 @@ public interface Node
|
||||||
String toConfigString();
|
String toConfigString();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the current Result-HTML
|
* @param hc the HtmlContext
|
||||||
|
* @return the current Result-HTML (regardless of
|
||||||
|
* {@link #isVisibleInResultHtml()})
|
||||||
*/
|
*/
|
||||||
String toResultHtml();
|
String toResultHtml(HtmlContext hc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
|
// Kommentare
|
||||||
|
// :base gibt die Start-Punkte an
|
||||||
:base 0.0
|
:base 0.0
|
||||||
|
// Design für Punkte. Pts ist dabei für die Punkte, PtsText für den Text. die Punkte zählen als Teil des Textes (<li style=PtsText><span style=Pts>'Punkte'</span>Text</li>)
|
||||||
|
// full -> best-Case
|
||||||
:fullPts color: #0f0;
|
:fullPts color: #0f0;
|
||||||
:fullPtsText
|
:fullPtsText
|
||||||
|
// no -> worst-case
|
||||||
:noPts color: #f00;
|
:noPts color: #f00;
|
||||||
:noPtsText
|
:noPtsText
|
||||||
|
// partial -> alle verbleibenden Fälle. Sonderfall: Elemente die 0 Punkte bringen (egal was ausgewählt ist) haben auch diesen Fall!
|
||||||
:partialPts color: #fb0;
|
:partialPts color: #fb0;
|
||||||
:partialPtsText
|
:partialPtsText
|
||||||
!header # Test-Schema
|
!header # Test-Schema
|
||||||
|
@ -21,4 +27,17 @@
|
||||||
2.5 Halbe Punkte
|
2.5 Halbe Punkte
|
||||||
50% Halbe Punkte in Prozent
|
50% Halbe Punkte in Prozent
|
||||||
1/3 Ein Drittel Punkte als Bruch
|
1/3 Ein Drittel Punkte als Bruch
|
||||||
0 Null Punkte
|
0 Null Punkte
|
||||||
|
\\ 5.0 Text der immer angezeigt wird. Dadurch wird der Text bei den Punkten zur Begründung
|
||||||
|
5.0 Volle Punkte
|
||||||
|
2.5 Halbe Punkte
|
||||||
|
50% Halbe Punkte in Prozent
|
||||||
|
1/3 Ein Drittel Punkte als Bruch
|
||||||
|
0 Null Punkte
|
||||||
|
\\ 5.0 Text der immer angezeigt wird. Dadurch wird der Text bei den Punkten zur Begründung (Multi-Select anstatt Radio-Box, das kann nicht gemischt werden!)
|
||||||
|
[] 1.0 Ziel 1
|
||||||
|
[] 1.0 Ziel 2
|
||||||
|
[] 2.0 Ziel 3
|
||||||
|
[] 0.5 Ziel 4
|
||||||
|
[] 0.5 Ziel 5
|
||||||
|
// Zeilenumbruch am Ende der Datei wichtig!
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,24 +0,0 @@
|
||||||
:base 0.0
|
|
||||||
:fullPts color: #0f0;
|
|
||||||
:fullPtsText
|
|
||||||
:noPts color: #f00;
|
|
||||||
:noPtsText
|
|
||||||
:partialPts color: #fb0;
|
|
||||||
:partialPtsText
|
|
||||||
!header # Test-Schema
|
|
||||||
[] -0.5 Punktabzug
|
|
||||||
[] +0.5 Bonus-Punkt
|
|
||||||
!header ## Sub-Header zum versteck-Test
|
|
||||||
[] -0.5 Punktabzug (uncheck um Sub-Header zu verstecken)
|
|
||||||
!header ## Sub-Header für Punkte
|
|
||||||
\ 1.0 Element existiert | Element existiert nicht
|
|
||||||
\ 2 Anderes Element existiert | Anderes Element fehlt
|
|
||||||
\ 1.5 Beispiel | fehlt
|
|
||||||
[] -0.5 Punktabzug weil is so.
|
|
||||||
!header ## Sub-Header für Punkte Multiline
|
|
||||||
\\ 5.0
|
|
||||||
5.0 Volle Punkte
|
|
||||||
2.5 Halbe Punkte
|
|
||||||
50% Halbe Punkte in Prozent
|
|
||||||
1/3 Ein Drittel Punkte als Bruch
|
|
||||||
0 Null Punkte
|
|
Reference in New Issue