diff --git a/src/main/java/schule/ngb/zm/Constants.java b/src/main/java/schule/ngb/zm/Constants.java index feda9f3..ba37cd4 100644 --- a/src/main/java/schule/ngb/zm/Constants.java +++ b/src/main/java/schule/ngb/zm/Constants.java @@ -23,7 +23,7 @@ import java.util.function.DoubleUnaryOperator; * aktuell gehalten werden (beispielsweise {@link #runtime}). *
* Für die Implementierung eigener Klassen ist es oft hilfreich von - * {@code Constants} zu erben, um die Methoden und Konstanten einfach im + * {@code Constants} zu erben, um die Methoden und Konstanten einfacher im * Programm nutzen zu können. *
* class MyClass extends Constants {
@@ -1255,7 +1255,7 @@ public class Constants {
public static final double distance( double fromX, double fromY, double toX, double toY ) {
double diffX = toX - fromX;
double diffY = toY - fromY;
- return sqrt(diffX*diffX + diffY*diffY);
+ return sqrt(diffX * diffX + diffY * diffY);
}
/**
@@ -1416,6 +1416,7 @@ public class Constants {
* @param Datentyp des Elements.
* @return Ein zufälliges Element aus dem Array.
*/
+ @SafeVarargs
public static final T choice( T... values ) {
return values[random(0, values.length - 1)];
}
diff --git a/src/main/java/schule/ngb/zm/Strokeable.java b/src/main/java/schule/ngb/zm/Strokeable.java
index 36b0e29..22b4921 100644
--- a/src/main/java/schule/ngb/zm/Strokeable.java
+++ b/src/main/java/schule/ngb/zm/Strokeable.java
@@ -201,6 +201,8 @@ public interface Strokeable extends Drawable {
* Kontureigenschaften zu erstellen. Der aktuelle {@code Stroke} wird
* zwischengespeichert.
*
+ * @param strokeType
+ * @param strokeWeight
* @return Ein {@code Stroke} mit den passenden Kontureigenschaften.
*/
static Stroke createStroke( Options.StrokeType strokeType, double strokeWeight ) {
diff --git a/src/main/java/schule/ngb/zm/anim/AnimationGroup.java b/src/main/java/schule/ngb/zm/anim/AnimationGroup.java
index 16b24ac..c1de074 100644
--- a/src/main/java/schule/ngb/zm/anim/AnimationGroup.java
+++ b/src/main/java/schule/ngb/zm/anim/AnimationGroup.java
@@ -9,7 +9,6 @@ public class AnimationGroup extends Animation {
List> anims;
-
private boolean overrideEasing = false;
private int overrideRuntime = -1;
diff --git a/src/main/java/schule/ngb/zm/util/Faker.java b/src/main/java/schule/ngb/zm/util/Faker.java
index 6e9c62c..cb4d0d7 100644
--- a/src/main/java/schule/ngb/zm/util/Faker.java
+++ b/src/main/java/schule/ngb/zm/util/Faker.java
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
-import java.util.function.Function;
+import java.util.function.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -28,10 +28,10 @@ import static java.lang.Math.log;
import static schule.ngb.zm.Constants.random;
/**
- * Hilfsklasse, um zufällige Beispieldaten zu erzeugen.
+ * Eine Helferklasse, um zufällige Beispieldaten zu erzeugen.
*
- * Die Klasse kann verschiedene Arten realistischer Beispieldaten erzeugen,
- * unter anderem Namen, E-Mail-Adressen, Passwörter oder Platzhalter-Bilder.
+ * Die Klasse kann verschiedene Arten realistischer Beispieldaten erzeugen.
+ * Unter anderem Namen, E-Mail-Adressen, Passwörter oder Platzhalter-Bilder.
*/
@SuppressWarnings( "unused" )
public final class Faker {
@@ -45,11 +45,6 @@ public final class Faker {
*/
public static final String FAKE_IMG_URL = "https://loremflickr.com/%d/%d";
- public static void main( String[] args ) {
- String text = Faker.fakeText(2000, 8);
- System.out.println(text);
- }
-
/**
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Benutzerdaten.
*
@@ -83,8 +78,8 @@ public final class Faker {
/**
- * Erzeugt ein Array mit den angegebenen Anzahl zufälliger Namen (Vor- und
- * Nachname).
+ * Erzeugt ein Array mit den angegebenen Anzahl zufälliger Namen im Format
+ * "Vorname Nachname".
*
* @param count Anzahl der Beispieldaten.
* @return Ein Array mit den Beispieldaten.
@@ -140,7 +135,7 @@ public final class Faker {
/**
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger
- * {@code Date}-Objekte.
+ * {@code LocalDate}-Objekte, die ein Datum ohne Uhrzeit beschreiben.
*
* @param count Anzahl der Beispieldaten.
* @return Ein Array mit den Beispieldaten.
@@ -158,6 +153,14 @@ public final class Faker {
return result;
}
+ /**
+ * Erzeugt ein Array mit den angegebenen Anzahl zufälliger
+ * {@code LocalDateTime}-Objekte, die einen Zeitpunkt mit Dateum und Uhrzeit
+ * beschreiben,
+ *
+ * @param count Anzahl der Beispieldaten.
+ * @return Ein Array mit den Beispieldaten.
+ */
public static LocalDateTime[] fakeDatetimes( int count ) {
long nowEpoch = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
long from = LocalDateTime.ofEpochSecond(nowEpoch - 18 * 365, 0, ZoneOffset.UTC).toEpochSecond(ZoneOffset.UTC);
@@ -171,6 +174,17 @@ public final class Faker {
return result;
}
+ /**
+ * Erzeugt einen Blindtext mit der angegebenen Anzahl Worten, aufgeteilt in
+ * die angegebene Anzahl Absätze.
+ *
+ * Abssätze werden duch einen doppelten Zeilenumbruch {@code \n\n}
+ * getrennt.
+ *
+ * @param words Anzahl Wörter im Text insgesamt.
+ * @param paragraphs Anzahl Absätze.
+ * @return Ein zufälliger Blindtext.
+ */
public static String fakeText( int words, int paragraphs ) {
String basetext = "";
try(
@@ -204,6 +218,16 @@ public final class Faker {
return result;
}
+ /**
+ * Erzeugt ein Array mit der angegebenen Anzahl zufällig erzeugter Integer
+ * im angegebenen Bereich.
+ *
+ * @param count Anzahl der Zahlen im Array.
+ * @param min Untere Grenze der Zufallszahlen.
+ * @param max Obere Grenze der Zufallszahlen.
+ * @return Ein Array mit Zufallszahlen.
+ * @see Constants#random(int, int)
+ */
public static int[] fakeIntArray( int count, int min, int max ) {
int[] arr = new int[count];
for( int i = 0; i < count; i++ ) {
@@ -212,14 +236,56 @@ public final class Faker {
return arr;
}
+ /**
+ * Erzeugt eine Liste mit der angegebenen Anzahl zufällig erzeugter Integer
+ * im angegebenen Bereich.
+ *
+ * Ist {@code list} ein Listenobjekt, werden dei Zahlen an diese angehängt.
+ * Wird {@code null} übergeben, wird eine neue {@link ArrayList} erzeugt.
+ *
+ * @param count Anzahl der erzeugten Zahlen.
+ * @param min Untere Grenze der Zufallszahlen.
+ * @param max Obere Grenze der Zufallszahlen.
+ * @param list Eine Liste, die befüllt werden soll, oder {@code null}.
+ * @return Ein Array mit Zufallszahlen.
+ * @see Constants#random(int, int)
+ */
public static List fakeIntegerList( int count, int min, int max, List list ) {
- if( list == null ) {
- list = new ArrayList<>(count);
- }
+ List result = (list == null) ? new ArrayList<>(count) : list;
+ fakeIntegers(count, min, max, result::add);
+ return result;
+ }
+
+ /**
+ * Erzeugt die angegebene Anzahl Zufallszahlen im angegebenen Bereich und
+ * übergibt sie an den angegebenen {@code Consumer}.
+ *
+ * Ein typischer Aufruf, um eine {@code #LinkedList} mit 100 Zufallszahlen
+ * zu erzeugen könnte so aussehen:
+ *
+ * List<Integer> l = new LinkedList<>();
+ * Faker.fakeIntegers(100, 0, 100, l::add);
+ *
+ *
+ * @param count Anzahl der erzeugten Zahlen.
+ * @param min Untere Grenze der Zufallszahlen.
+ * @param max Obere Grenze der Zufallszahlen.
+ * @param con {@code Consumer} für die Zahlen.
+ */
+ public static void fakeIntegers( int count, int min, int max, Consumer con ) {
for( int i = 0; i < count; i++ ) {
- list.add(random(min, max));
+ con.accept(random(min, max));
}
- return list;
+ }
+
+ public static L fakeIntegers( int count, int min, int max, Supplier sup, BiConsumer con ) {
+ L result = sup.get();
+
+ for( int i = 0; i < count; i++ ) {
+ con.accept(result, random(min, max));
+ }
+
+ return result;
}
@SuppressWarnings( "unchecked" )
diff --git a/src/main/java/schule/ngb/zm/util/io/FontLoader.java b/src/main/java/schule/ngb/zm/util/io/FontLoader.java
index 122edc6..bb0b327 100644
--- a/src/main/java/schule/ngb/zm/util/io/FontLoader.java
+++ b/src/main/java/schule/ngb/zm/util/io/FontLoader.java
@@ -5,14 +5,21 @@ import schule.ngb.zm.util.Validator;
import java.awt.Font;
import java.awt.FontFormatException;
+import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.net.MalformedURLException;
import java.util.Map;
-import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+/**
+ * Eine Helferklasse mit Klassenmethoden, um Schriftarten zu laden.
+ *
+ * Schriftarten können von verschiedenen Quellen geladen werden. Schriftarten,
+ * die aus Dateien geladen wurden, werden in einem internen Cache gespeichert
+ * und nachfolgende Versuche, dieselbe Schriftart zu laden, werden aus dem Cache
+ * bedient.
+ */
public class FontLoader {
private static final Map fontCache = new ConcurrentHashMap<>();
@@ -22,11 +29,12 @@ public class FontLoader {
*
* Die Methode kann eine Liste von Schriften bekommen und probiert diese
* nacheinander zu laden. Die erste Schrift, die Fehlerfrei geladen werden
- * kann, wird zurückgegeben. Kann keine der Schriften geladen werden, ist das
- * Ergebnis {@code null}.
+ * kann, wird zurückgegeben. Kann keine der Schriften geladen werden, ist
+ * das Ergebnis {@code null}.
*
- * Die gefundene Schrift wird unter ihrem Dateinamen in den Schriftenspeicher
- * geladen und kann danach in der Zeichenmaschine benutzt werden.
+ * Die gefundene Schrift wird unter ihrem Dateinamen in den
+ * Schriftenspeicher geladen und kann danach in der Zeichenmaschine benutzt
+ * werden.
*
* Eine Datei mit dem Namen "fonts/Font-Name.ttf" würde mit dem Namen
* "Font-Name" geladen und kann danach zum Beispiel in einem
@@ -96,11 +104,12 @@ public class FontLoader {
*
* Die Methode kann eine Liste von Schriften bekommen und probiert diese
* nacheinander zu laden. Die erste Schrift, die Fehlerfrei geladen werden
- * kann, wird zurückgegeben. Kann keine der Schriften geladen werden, ist das
- * Ergebnis {@code null}.
+ * kann, wird zurückgegeben. Kann keine der Schriften geladen werden, ist
+ * das Ergebnis {@code null}.
*
- * Die gefundene Schrift wird unter ihrem Dateinamen in den Schriftenspeicher
- * geladen und kann danach in der Zeichenmaschine benutzt werden.
+ * Die gefundene Schrift wird unter ihrem Dateinamen in den
+ * Schriftenspeicher geladen und kann danach in der Zeichenmaschine benutzt
+ * werden.
*
* Eine Datei mit dem Namen "fonts/Font-Name.ttf" würde mit dem Namen
* "Font-Name" geladen und kann danach zum Beispiel in einem
@@ -113,7 +122,7 @@ public class FontLoader {
* @see #loadFont(String, String)
*/
public static Font loadFonts( String name, String... sources ) {
- for( String fontSource: sources ) {
+ for( String fontSource : sources ) {
// TODO: Ignore exceptions in this case and throw own at end?
Font font = loadFont(name, fontSource);
if( font != null ) {
diff --git a/src/main/java/schule/ngb/zm/util/io/ImageLoader.java b/src/main/java/schule/ngb/zm/util/io/ImageLoader.java
index cd8e448..0d8ae45 100644
--- a/src/main/java/schule/ngb/zm/util/io/ImageLoader.java
+++ b/src/main/java/schule/ngb/zm/util/io/ImageLoader.java
@@ -18,6 +18,13 @@ import java.lang.ref.SoftReference;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+/**
+ * Eine Helferklasse mit Klassenmethoden, um Bilder zu laden.
+ *
+ * Bilder können von verschiedenen Quellen als {@link Image} geladen werden. Die
+ * Objekte werden in einem internen Cache gespeichert und nachfolgende Versuche,
+ * dieselbe Quelle zu laden, werden aus dem Cache bedient.
+ */
public final class ImageLoader {
public static boolean caching = true;