diff --git a/README.md b/README.md index 0c8cc5d..f988709 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Die folgende Tabelle zeigt Ihnen die Themen der Woche und welche Kapitel Sie bis ## Freiwillige Übungen -Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](pr2-lecture-STG/uebungen/src/branch/main/readme.md) +Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](https://gitty.informatik.hs-mannheim.de/pr2-lecture-STG/uebungen) ## Assignments diff --git a/bin/submit.sh b/bin/submit.sh new file mode 100755 index 0000000..8b456a9 --- /dev/null +++ b/bin/submit.sh @@ -0,0 +1,66 @@ +#!/usr/bin/bash + +# Fail on first error +set -e + +# check how we have been called +if [ ! "$0" == "bin/submit.sh" ]; then + echo -e "\e[31m" + echo "💣 Das Skript muss aus dem Hauptverzeichnis des Projektes" + echo "💣 mit bin/submit.sh aufgerufen werden." + echo -e "\e[0m" + exit 1 +fi + +echo "***************************************************************" +echo "Abgabe einreichen" +echo "***************************************************************" +echo "" +cd sources + +# Test, if project builds +echo "------------------------------------------------------------------" +echo "Build..." +echo "" +if ! mvn; then + echo -e "\e[31m" + echo "💣 Projekt baut nicht und kann deswegen nicht abgegeben werden." + echo "💣 Bitte beheben Sie alle gemeldeten Fehler und versuchen Sie " + echo "💣 es dann erneut " + echo -e "\e[0m" + exit 1 +else + echo -e "\e[32m" + echo "✅ Projekt gebaut " + echo -e "\e[0m" +fi + +# Test, if all changes are committed +echo "------------------------------------------------------------------" +echo "Teste git-Staus..." +if ! git status | grep -q "nothing to commit" && ! git status | grep -q "nichts zu committen" ; then + echo -e "\e[31m" + echo "💣 Bitte checken Sie alle Änderungen per git ein. " + echo -e "\e[0m" + exit 1 +else + echo -e "\e[32m" + echo "✅ Alle Dateien eingecheckt " + echo -e "\e[0m" +fi + +# Submit +echo "------------------------------------------------------------------" +echo "Sende Lösung..." +if ! git push origin main; then + echo -e "\e[31m" + echo "💣 Push nicht erfolgreich. Bitte beheben Sie den Fehler und " + echo "💣 starten Sie das Skript erneut. " + echo -e "\e[0m" + exit 1 +else + echo -e "\e[32m" + echo "✅ Aktuelle Lösungen eingereicht " + echo -e "\e[0m" +fi + diff --git a/bin/update.sh b/bin/update.sh new file mode 100755 index 0000000..6f34e0a --- /dev/null +++ b/bin/update.sh @@ -0,0 +1,66 @@ +#!/usr/bin/bash + +# Fail on first error +set -e + +# check how we have been called +if [ ! "$0" == "bin/update.sh" ]; then + echo -e "\e[31m" + echo "💣 Das Skript muss aus dem Hauptverzeichnis des Projektes" + echo "💣 mit bin/update.sh oder bash bin/update.sh aufgerufen werden." + echo -e "\e[0m" + exit 1 +fi + +# Check the integrity of the .assignments directory +if [ -d ".assignments" ] && [ ! -d ".assignments/.git" ]; then + echo -e "\e[31m" + echo "Nicht korrektes .assignments-Verzeichnis. Wird gelöscht." + echo "Bitte achten Sie darauf, das .assignments-Verzeichnis nicht" + echo "einzuchecken." + echo -ne "\e[0m" + rm -rf ".assignments" +fi + +# Clone repo if not already present +if [ ! -d ".assignments" ]; then + echo -e "\e[32m" + echo "Clone Repository mit den Aufgaben" + echo -ne "\e[0m" + git clone gitea@gitty.informatik.hs-mannheim.de:pr2-lecture-STG/assignments.git .assignments + mkdir -p sources/src/main/java +fi + +# Sync exercises with local directory +echo -e "\e[32m" +echo "---------------------------------------------------------------" +echo "Hole neue Aufgaben und Quelltexte " +echo "---------------------------------------------------------------" +echo -ne "\e[0m" + +(cd .assignments && git pull origin main) +rsync --ignore-existing -raz .assignments/sources/ sources/ + +for dir in .assignments/Assignment_*; do + rsync --ignore-existing -raz "$dir" ./ +done + +# Assignment files +rsync --ignore-existing -raz --include='Assignment_*' --exclude='*' .assignments/* ./ + +# Libraries +rsync -raz .assignments/sources/lib/ ./sources/lib + +# Main readme +cp .assignments/readme.md README.md + +# Update scripts +cp .assignments/bin/submit.sh bin/submit.sh + +if [ -f .assignments/bin/update.sh ]; then + # Remove myself + rm bin/update.sh + + # Copy the new version at the old location + cp .assignments/bin/update.sh bin/update.sh +fi diff --git a/help/eclipse.md b/help/eclipse.md new file mode 100644 index 0000000..390a573 --- /dev/null +++ b/help/eclipse.md @@ -0,0 +1,31 @@ +## Tabs in Eclipse + +Eclipse verwendet standardmäßig Tabulatoren für die Einrückung von Quelltexten. Da dies aber dem Coding-Standard widerspricht und auch von den Check-Tools bemängelt wird, sollten Sie Eclipse entsprechend konfigurieren. + +Öffnen Sie die Properties für das aktuelle Projekt über `File` -> `Properties`. + + + +Wählen Sie im Dialog die Option `Java Code Style` und dann `Formater`. Setzen Sie das Häkchen bei `Enable project specific settings` und klicken Sie auf `New`. + + + +Geben Sie dem Profil einen Namen, z.B. `PR2`. + + + +Wählen Sie unter dem Punkt `Indentation` als `Tab policy` den Eintrag `Spaces only` uns setzen Sie die Breiten auf jeweils `4`. + +Schließen Sie den Dialog mit `OK` und das Properties-Fenster mit `Apply and Close`. + +## Encoding und Zeilenende + +Eclipse verwendet teilweise ein anderes Encoding als UTF-8 und benutzt Windows-Zeilenenden. Um dies zu verhindern nehmen Sie bitte folgende Einstellung vor: + +Öffnen Sie die Properties für das aktuelle Projekt über `File` -> `Properties`. + +Wählen Sie im Dialog die Option `Resources`. + + + +Setzen Sie die Option `Text file encoding` auf `UTF-8` und `New text file line delimiter` auf `Unix`. diff --git a/help/img/crlf.png b/help/img/crlf.png new file mode 100644 index 0000000..c50499f Binary files /dev/null and b/help/img/crlf.png differ diff --git a/help/img/tab_1.png b/help/img/tab_1.png new file mode 100644 index 0000000..41b2246 Binary files /dev/null and b/help/img/tab_1.png differ diff --git a/help/img/tab_2.png b/help/img/tab_2.png new file mode 100644 index 0000000..198b7e7 Binary files /dev/null and b/help/img/tab_2.png differ diff --git a/help/img/tab_3.png b/help/img/tab_3.png new file mode 100644 index 0000000..b460f2a Binary files /dev/null and b/help/img/tab_3.png differ diff --git a/help/softwareausstattung.md b/help/softwareausstattung.md new file mode 100644 index 0000000..9cbfb3b --- /dev/null +++ b/help/softwareausstattung.md @@ -0,0 +1,9 @@ +## Softwareausstattung + + * **Ubuntu Linux** als Installation oder VM + * **Java JDK 21**
`sudo apt install openjdk-21-jdk openjdk-21-source openjdk-21-doc` + * **Git** und Git-Frontends
`sudo apt install git meld git-cola` + * **Maven 3.6 oder neuer**
`sudo apt install maven` + * **Eclipse**
Von der [Webseite](https://www.eclipse.org/downloads/) herunterladen und installieren. Bitte verwenden Sie die Version **Eclipse IDE for Java Developers** + +Eine Anleitung zur Installation von Ubuntu Linux finden Sie [hier](https://github.com/informatik-mannheim/linux-hsma/blob/master/doc/readme.md). Diese Anleitung bezieht sich auf Ubuntu 21.04, funktioniert so aber auch mit einer neueren Version. diff --git a/sources/pom.xml b/sources/pom.xml new file mode 100644 index 0000000..9ea6d57 --- /dev/null +++ b/sources/pom.xml @@ -0,0 +1,132 @@ + + 4.0.0 + de.hs_mannheim.pr2 + solutions + 1.0-SNAPSHOT + jar + + PR2 Excercises + + + UTF-8 + 17 + 17 + 5.9.1 + 1.9.1 + + + + jitpack.io + https://jitpack.io + + + + install + ${basedir}/target + ${project.artifactId}-${project.version} + + + maven-compiler-plugin + 3.10.1 + + + maven-surefire-plugin + 3.0.0-M7 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.2.0 + + + com.puppycrawl.tools + checkstyle + 10.4 + + + + checkstyle.xml + true + true + false + + + + validate + validate + + check + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.19.0 + + + ./pmd.xml + + true + true + + + + + check + + + + + + + + + + com.github.thomsmits + game-framework + v1.0 + + + org.junit.jupiter + junit-jupiter-engine + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-api + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-params + ${junit.jupiter.version} + + + org.junit.platform + junit-platform-suite + ${junit.platform.version} + + + org.junit.vintage + junit-vintage-engine + ${junit.jupiter.version} + + + org.jfree + jfreechart + 1.5.3 + + + + diff --git a/sources/src/main/java/pr2/bootstrap/hello/.gitkeep b/sources/src/main/java/pr2/bootstrap/hello/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sources/src/main/java/pr2/bootstrap/hello/Greeter.java b/sources/src/main/java/pr2/bootstrap/hello/Greeter.java new file mode 100644 index 0000000..0b7107b --- /dev/null +++ b/sources/src/main/java/pr2/bootstrap/hello/Greeter.java @@ -0,0 +1,16 @@ +package pr2.bootstrap.hello; + +/** + * Eine freundliche Klasse, die gerne Menschen begrüßt. + */ +public class Greeter { + + /** + * Begrüßt die Person. + * + * @param name Name der Person, die begrüßt wird. + */ + public void greet(String name) { + System.out.printf("Hallo %s\n", name); + } +} diff --git a/sources/src/main/java/pr2/bootstrap/hello/HelloWorld.java b/sources/src/main/java/pr2/bootstrap/hello/HelloWorld.java new file mode 100644 index 0000000..9caaecd --- /dev/null +++ b/sources/src/main/java/pr2/bootstrap/hello/HelloWorld.java @@ -0,0 +1,22 @@ +package pr2.bootstrap.hello; + +/** + * Hello World Programm. + */ +public class HelloWorld { + + /** + * Einstieg ins Programm. Der Name wird aus dem ersten + * Kommandozeilenargument genommen. + * + * @param args Argumente. + */ + public static void main(String[] args) { + Greeter g = new Greeter(); + + // TODO: Wenn kein Argument auf der Kommandozeile gegeben wurde, + // TODO: nehmen Sie als Namen "", andernfalls den + // TODO: Namen aus dem ersten Argument. + // TODO: greet Methode auf g rufen + } +}