Initial Data Commit

This commit is contained in:
Felix Homa 2022-03-27 22:05:25 +02:00
parent 0f56755b6a
commit ad432c45fb
Signed by: felix.homa
GPG Key ID: 43610F311720D3DA
17 changed files with 475 additions and 0 deletions

38
.classpath Normal file
View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

23
.project Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>KorrekturHelper</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=17

View File

@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

43
pom.xml Normal file
View File

@ -0,0 +1,43 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.tuDortmund.cs.rvs.pingger</groupId>
<artifactId>KorrekturHelper</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>KorrekturHelper</name>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-jlink-plugin</artifactId>
<version>3.1.0</version>
<extensions>true</extensions>
<configuration>
<goal>jlink</goal>
<compress>2</compress>
<noHeaderFiles>true</noHeaderFiles>
<noManPages>true</noManPages>
<output>${project.build.directory}/jlink_output</output>
<addModules>
<addModule>java.compiler</addModule>
<addModule>java.datatransfer</addModule>
<addModule>java.desktop</addModule>
<addModule>java.instrument</addModule>
<addModule>java.logging</addModule>
<addModule>java.management</addModule>
<addModule>java.naming</addModule>
<addModule>java.prefs</addModule>
<addModule>java.rmi</addModule>
<addModule>java.scripting</addModule>
<addModule>java.sql</addModule>
<addModule>java.xml</addModule>
<addModule>jdk.compiler</addModule>
<addModule>jdk.unsupported</addModule>
</addModules>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,60 @@
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.LinkedHashSet;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
/**
* @author Pingger
*/
public abstract class AbstractNode extends JPanel implements Node
{
private static final long serialVersionUID = 2766238124985613235L;
/** Content-Panel */
protected final JPanel content;
private final JPanel sub;
/** Sub-Nodes */
protected final LinkedHashSet<Node> subNodes = new LinkedHashSet<>();
/**
*
*/
public AbstractNode()
{
super(true);
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
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));
add(content);
add(sub);
}
@Override
public void addSubNode(Node n)
{
subNodes.add(n);
sub.add(n.getComponent());
}
@Override
public Component getComponent()
{ return this; }
@Override
public LinkedHashSet<Node> getSubNodes()
{ return subNodes; }
@Override
public void reset()
{
subNodes.forEach(Node::reset);
}
}

View File

@ -0,0 +1,58 @@
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
import java.math.BigDecimal;
import java.math.MathContext;
import javax.swing.JCheckBox;
public class CheckboxNode extends AbstractNode
{
private final JCheckBox cbx;
private final String message;
private final BigDecimal points;
public CheckboxNode(String configString)
{
if (configString.contains("\n"))
{ throw new IllegalArgumentException("Bad config! Found line feed!"); }
var spl = configString.split("\t");
if (spl.length != 3)
{ throw new IllegalArgumentException("Bad Config String! Expected 2 \\t"); }
if (!"[]".equals(spl[0]))
{ throw new IllegalArgumentException("Not a [] Node"); }
points = new BigDecimal(spl[1]);
message = spl[2];
cbx = new JCheckBox();
}
@Override
public BigDecimal achievedPoints(MathContext mc)
{
return cbx.isSelected() ? points : BigDecimal.ZERO;
}
@Override
public boolean isVisibleInResultHtml()
{ return cbx.isSelected(); }
@Override
public BigDecimal maximumPoints()
{
return BigDecimal.ZERO;
}
@Override
public String toConfigString()
{
return "[]\t" + (points.signum() > 0 ? "+" : "") + points.toPlainString() + "\t" + message;
}
@Override
public String toResultHtml()
{
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,118 @@
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
import java.awt.Font;
import java.math.BigDecimal;
import java.math.MathContext;
import javax.swing.JLabel;
/**
* @author Pingger
*/
public class HeaderNode extends AbstractNode
{
private static final String[] configStyles = { "", "#", "##", "###", "####", "#####", "######", "*", "_" };
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)
{
for (var i = 0; i < array.length; i++)
{
if (elem.equals(array[i]))
{ return i; }
}
return -1;
}
/** Additional CSS */
protected final String css;
/** Text to display */
protected final String message;
/** type of header (h#, b, i) */
protected final int style;
/**
* Load from config String
*
* @param config the config String
*/
public HeaderNode(String config)
{
if (config.contains("\n"))
{ throw new IllegalArgumentException("Bad config! Found line feed!"); }
var spl = config.split("\t");
if (spl.length < 3 || spl.length > 4)
{ throw new IllegalArgumentException("Bad Config String! Expected 2 or 3 \\t"); }
if (!"!header".equals(spl[0]))
{ throw new IllegalArgumentException("Not a !header Node"); }
style = indexOf(configStyles, spl[1]);
if (style == -1)
{ throw new IllegalArgumentException("Bad Style!"); }
message = spl[2];
if (spl.length == 3)
{
css = null;
}
else
{
css = spl[3];
}
var lbl = new JLabel(message);
switch (style)
{
case 0:
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
lbl.setFont(new Font(lbl.getFont().getFontName(), Font.PLAIN,
(int) (lbl.getFont().getSize() * (1.0 + (6 - style) / 6))));
break;
case 7:
lbl.setFont(new Font(lbl.getFont().getFontName(), Font.BOLD, lbl.getFont().getSize()));
break;
case 8:
lbl.setFont(new Font(lbl.getFont().getFontName(), Font.ITALIC, lbl.getFont().getSize()));
break;
}
}
@Override
public BigDecimal achievedPoints(MathContext mc)
{
return BigDecimal.ZERO;
}
@Override
public boolean isVisibleInResultHtml()
{ return subNodes.stream().anyMatch(Node::isVisibleInResultHtml); }
@Override
public BigDecimal maximumPoints()
{
return BigDecimal.ZERO;
}
@Override
public String toConfigString()
{
return "!header\t" + configStyles[style] + "\t" + message + (css == null ? "" : "\t" + css);
}
@Override
public String toResultHtml()
{
return (style == 0 ? "" : "<" + htmlStyles[style] + (css == null ? "" : " style=\"" + css + "\"") + ">") + message
+ (style == 0 ? "" : "</" + htmlStyles[style] + ">");
}
}

View File

@ -0,0 +1,15 @@
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
import java.io.IOException;
public class KorrekturHelper
{
public static void main(String[] args) throws IOException
{
var in = KorrekturHelper.class.getClassLoader()
.getResourceAsStream("de/tuDortmund/cs/rvs/pingger/korrekturHelper/Test.schema");
in.transferTo(System.out);
}
}

View File

@ -0,0 +1,61 @@
package de.tuDortmund.cs.rvs.pingger.korrekturHelper;
import java.awt.Component;
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.LinkedHashSet;
/**
* @author Pingger
*/
public interface Node
{
/**
* @param mc the {@link MathContext}
* @return the achieved Points
*/
BigDecimal achievedPoints(MathContext mc);
/**
* Adds a Sub-Node to this Node
*
* @param n the Sub-Node to add
*/
void addSubNode(Node n);
/**
* @return the AWT-Component for Displaying
*/
Component getComponent();
/**
* @return all Sub-Nodes
*/
LinkedHashSet<Node> getSubNodes();
/**
* @return whether this Element should be visible in the Result HTML
*/
boolean isVisibleInResultHtml();
/**
* @return the maximum Points
*/
BigDecimal maximumPoints();
/**
* Resets this Element and all sub-elements to their defaults
*/
void reset();
/**
* @return this Node as a Config-String (with which this Node can be correctly
* parsed again using the Constructor)
*/
String toConfigString();
/**
* @return the current Result-HTML
*/
String toResultHtml();
}

View File

@ -0,0 +1,24 @@
: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

View File

@ -0,0 +1,24 @@
: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