From 32abe746ff57ad39e42459b188740b278fb4ec50 Mon Sep 17 00:00:00 2001
From: jez04 <david.jezek@post.cz>
Date: Mon, 3 Mar 2025 02:42:19 +0100
Subject: [PATCH] feat: lab03 assigment

---
 java2-lab02-v1/.gitignore => .gitignore       |   0
 java2-lab02-v1/README.md => README.md         |   0
 .../main/java/lab/ScoreStorageFactory.java    |  39 -------
 build-and-run.sh => old/build-and-run.sh      |   0
 .../java2-lab02-common-v1}/.gitignore         |   0
 .../java2-lab02-common-v1}/pom.xml            |   0
 .../cz/vsb/fei/java2/lab02/common/Score.java  |   0
 .../lab02/common/ScoreStorageInterface.java   |   0
 .../src/main/java/module-info.java            |   0
 .../java/cz/vsb/fei/java2/lab01/AppTest.java  |   0
 .../java2-lab02-db-v1}/.gitignore             |   0
 .../java2-lab02-db-v1}/pom.xml                |   0
 .../vsb/fei/java2/lab02/db/DbConnector.java   |   0
 .../src/main/java/module-info.java            |   0
 .../src/main/resources/log4j2.xml             |   0
 .../java2-lab02-file-v1}/.gitignore           |   0
 .../java2-lab02-file-v1}/pom.xml              |   0
 .../java/cz/vsb/fei/file/FileStorage.java     |   0
 .../src/main/java/module-info.java            |   0
 run.sh => old/run.sh                          |   0
 java2-lab02-v1/pom.xml => pom.xml             |  21 +---
 java2-lab02-v1/scores.csv => scores.csv       |   0
 src/main/java/lab/Setting.java                |  64 +++++++++++
 src/main/java/lab/data/Score.java             |  64 +++++++++++
 .../main/java/lab/game/Bullet.java            |   0
 .../main/java/lab/game/BulletAnimated.java    |   0
 .../main/java/lab/game/Cannon.java            |   0
 .../main/java/lab/game/Collisionable.java     |   0
 .../main/java/lab/game/DrawableSimulable.java |   0
 .../main/java/lab/game/DrawingThread.java     |   0
 .../main/java/lab/game/HitListener.java       |   0
 .../main/java/lab/game/Routines.java          |   0
 .../src => src}/main/java/lab/game/Ufo.java   |   8 +-
 .../src => src}/main/java/lab/game/World.java |  24 ++--
 .../main/java/lab/game/WorldEntity.java       |   2 +-
 .../src => src}/main/java/lab/gui/App.java    |   2 +
 .../main/java/lab/gui/GameController.java     | 105 +++++++++---------
 src/main/java/lab/storage/DbConnector.java    |  63 +++++++++++
 src/main/java/lab/storage/FileStorage.java    |  56 ++++++++++
 .../lab/storage/ScoreStorageInterface.java    |  17 +++
 .../src => src}/main/java/module-info.java    |   8 +-
 .../lab/game/fireball-transparent.gif         | Bin
 .../main/resources/lab/game/ufo-small.gif     | Bin
 .../main/resources/lab/game/ufo.gif           | Bin
 .../main/resources/lab/gui/application.css    |   0
 .../main/resources/lab/gui/gameWindow.fxml    |   0
 .../jez04/structure/test/AllOfContinue.java   |   0
 .../java/jez04/structure/test/ClassExist.java |   0
 .../structure/test/ClassStructureTest.java    |   0
 .../structure/test/ContainsInnerClasses.java  |   0
 .../java/jez04/structure/test/HasMethod.java  |   0
 .../jez04/structure/test/HasProperty.java     |   0
 .../jez04/structure/test/IsDescendatOf.java   |   0
 .../jez04/structure/test/IsInterface.java     |   0
 .../structure/test/ResourceContains.java      |   0
 .../jez04/structure/test/SrcContains.java     |   0
 .../jez04/structure/test/StructureHelper.java |   0
 .../structure/test/StructureMatcher.java      |   0
 58 files changed, 344 insertions(+), 129 deletions(-)
 rename java2-lab02-v1/.gitignore => .gitignore (100%)
 rename java2-lab02-v1/README.md => README.md (100%)
 delete mode 100644 java2-lab02-v1/src/main/java/lab/ScoreStorageFactory.java
 rename build-and-run.sh => old/build-and-run.sh (100%)
 rename {java2-lab02-common-v1 => old/java2-lab02-common-v1}/.gitignore (100%)
 rename {java2-lab02-common-v1 => old/java2-lab02-common-v1}/pom.xml (100%)
 rename {java2-lab02-common-v1 => old/java2-lab02-common-v1}/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java (100%)
 rename {java2-lab02-common-v1 => old/java2-lab02-common-v1}/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java (100%)
 rename {java2-lab02-common-v1 => old/java2-lab02-common-v1}/src/main/java/module-info.java (100%)
 rename {java2-lab02-common-v1 => old/java2-lab02-common-v1}/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java (100%)
 rename {java2-lab02-db-v1 => old/java2-lab02-db-v1}/.gitignore (100%)
 rename {java2-lab02-db-v1 => old/java2-lab02-db-v1}/pom.xml (100%)
 rename {java2-lab02-db-v1 => old/java2-lab02-db-v1}/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java (100%)
 rename {java2-lab02-db-v1 => old/java2-lab02-db-v1}/src/main/java/module-info.java (100%)
 rename {java2-lab02-db-v1 => old/java2-lab02-db-v1}/src/main/resources/log4j2.xml (100%)
 rename {java2-lab02-file-v1 => old/java2-lab02-file-v1}/.gitignore (100%)
 rename {java2-lab02-file-v1 => old/java2-lab02-file-v1}/pom.xml (100%)
 rename {java2-lab02-file-v1 => old/java2-lab02-file-v1}/src/main/java/cz/vsb/fei/file/FileStorage.java (100%)
 rename {java2-lab02-file-v1 => old/java2-lab02-file-v1}/src/main/java/module-info.java (100%)
 rename run.sh => old/run.sh (100%)
 rename java2-lab02-v1/pom.xml => pom.xml (89%)
 rename java2-lab02-v1/scores.csv => scores.csv (100%)
 create mode 100644 src/main/java/lab/Setting.java
 create mode 100644 src/main/java/lab/data/Score.java
 rename {java2-lab02-v1/src => src}/main/java/lab/game/Bullet.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/BulletAnimated.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/Cannon.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/Collisionable.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/DrawableSimulable.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/DrawingThread.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/HitListener.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/Routines.java (100%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/Ufo.java (83%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/World.java (81%)
 rename {java2-lab02-v1/src => src}/main/java/lab/game/WorldEntity.java (89%)
 rename {java2-lab02-v1/src => src}/main/java/lab/gui/App.java (95%)
 rename {java2-lab02-v1/src => src}/main/java/lab/gui/GameController.java (51%)
 create mode 100644 src/main/java/lab/storage/DbConnector.java
 create mode 100644 src/main/java/lab/storage/FileStorage.java
 create mode 100644 src/main/java/lab/storage/ScoreStorageInterface.java
 rename {java2-lab02-v1/src => src}/main/java/module-info.java (50%)
 rename {java2-lab02-v1/src => src}/main/resources/lab/game/fireball-transparent.gif (100%)
 rename {java2-lab02-v1/src => src}/main/resources/lab/game/ufo-small.gif (100%)
 rename {java2-lab02-v1/src => src}/main/resources/lab/game/ufo.gif (100%)
 rename {java2-lab02-v1/src => src}/main/resources/lab/gui/application.css (100%)
 rename {java2-lab02-v1/src => src}/main/resources/lab/gui/gameWindow.fxml (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/AllOfContinue.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/ClassExist.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/ClassStructureTest.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/ContainsInnerClasses.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/HasMethod.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/HasProperty.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/IsDescendatOf.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/IsInterface.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/ResourceContains.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/SrcContains.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/StructureHelper.java (100%)
 rename {java2-lab02-v1/src => src}/test/java/jez04/structure/test/StructureMatcher.java (100%)

diff --git a/java2-lab02-v1/.gitignore b/.gitignore
similarity index 100%
rename from java2-lab02-v1/.gitignore
rename to .gitignore
diff --git a/java2-lab02-v1/README.md b/README.md
similarity index 100%
rename from java2-lab02-v1/README.md
rename to README.md
diff --git a/java2-lab02-v1/src/main/java/lab/ScoreStorageFactory.java b/java2-lab02-v1/src/main/java/lab/ScoreStorageFactory.java
deleted file mode 100644
index b613d07..0000000
--- a/java2-lab02-v1/src/main/java/lab/ScoreStorageFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package lab;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Random;
-import java.util.ServiceLoader;
-
-import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
-import javafx.scene.control.Alert;
-import javafx.scene.control.ButtonType;
-import javafx.stage.Modality;
-import javafx.scene.control.Alert.AlertType;
-
-public class ScoreStorageFactory {
-
-	private static ScoreStorageInterface instance;
-
-	private ScoreStorageFactory() {
-		/* hide public one constructor */
-	}
-
-	public static ScoreStorageInterface getInstance() {
-		if (instance == null) {
-			List<ScoreStorageInterface> availableImplementations = new ArrayList<>();
-			ServiceLoader.load(ScoreStorageInterface.class).forEach(availableImplementations::add);
-			if (availableImplementations.isEmpty()) {
-				throw new NoSuchElementException(
-						"Service loader did not find any implementation of interface ScoreStorageInterface.");
-			}
-			instance = availableImplementations.get(new Random().nextInt(availableImplementations.size()));
-			Alert info = new Alert(AlertType.INFORMATION,
-					String.format("Storage %s selected.", instance.getClass().getName()), ButtonType.OK);
-			info.initModality(Modality.WINDOW_MODAL);
-			info.showAndWait();
-		}
-		return instance;
-	}
-}
diff --git a/build-and-run.sh b/old/build-and-run.sh
similarity index 100%
rename from build-and-run.sh
rename to old/build-and-run.sh
diff --git a/java2-lab02-common-v1/.gitignore b/old/java2-lab02-common-v1/.gitignore
similarity index 100%
rename from java2-lab02-common-v1/.gitignore
rename to old/java2-lab02-common-v1/.gitignore
diff --git a/java2-lab02-common-v1/pom.xml b/old/java2-lab02-common-v1/pom.xml
similarity index 100%
rename from java2-lab02-common-v1/pom.xml
rename to old/java2-lab02-common-v1/pom.xml
diff --git a/java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java b/old/java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java
similarity index 100%
rename from java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java
rename to old/java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java
diff --git a/java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java b/old/java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java
similarity index 100%
rename from java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java
rename to old/java2-lab02-common-v1/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java
diff --git a/java2-lab02-common-v1/src/main/java/module-info.java b/old/java2-lab02-common-v1/src/main/java/module-info.java
similarity index 100%
rename from java2-lab02-common-v1/src/main/java/module-info.java
rename to old/java2-lab02-common-v1/src/main/java/module-info.java
diff --git a/java2-lab02-common-v1/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java b/old/java2-lab02-common-v1/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java
similarity index 100%
rename from java2-lab02-common-v1/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java
rename to old/java2-lab02-common-v1/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java
diff --git a/java2-lab02-db-v1/.gitignore b/old/java2-lab02-db-v1/.gitignore
similarity index 100%
rename from java2-lab02-db-v1/.gitignore
rename to old/java2-lab02-db-v1/.gitignore
diff --git a/java2-lab02-db-v1/pom.xml b/old/java2-lab02-db-v1/pom.xml
similarity index 100%
rename from java2-lab02-db-v1/pom.xml
rename to old/java2-lab02-db-v1/pom.xml
diff --git a/java2-lab02-db-v1/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java b/old/java2-lab02-db-v1/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java
similarity index 100%
rename from java2-lab02-db-v1/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java
rename to old/java2-lab02-db-v1/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java
diff --git a/java2-lab02-db-v1/src/main/java/module-info.java b/old/java2-lab02-db-v1/src/main/java/module-info.java
similarity index 100%
rename from java2-lab02-db-v1/src/main/java/module-info.java
rename to old/java2-lab02-db-v1/src/main/java/module-info.java
diff --git a/java2-lab02-db-v1/src/main/resources/log4j2.xml b/old/java2-lab02-db-v1/src/main/resources/log4j2.xml
similarity index 100%
rename from java2-lab02-db-v1/src/main/resources/log4j2.xml
rename to old/java2-lab02-db-v1/src/main/resources/log4j2.xml
diff --git a/java2-lab02-file-v1/.gitignore b/old/java2-lab02-file-v1/.gitignore
similarity index 100%
rename from java2-lab02-file-v1/.gitignore
rename to old/java2-lab02-file-v1/.gitignore
diff --git a/java2-lab02-file-v1/pom.xml b/old/java2-lab02-file-v1/pom.xml
similarity index 100%
rename from java2-lab02-file-v1/pom.xml
rename to old/java2-lab02-file-v1/pom.xml
diff --git a/java2-lab02-file-v1/src/main/java/cz/vsb/fei/file/FileStorage.java b/old/java2-lab02-file-v1/src/main/java/cz/vsb/fei/file/FileStorage.java
similarity index 100%
rename from java2-lab02-file-v1/src/main/java/cz/vsb/fei/file/FileStorage.java
rename to old/java2-lab02-file-v1/src/main/java/cz/vsb/fei/file/FileStorage.java
diff --git a/java2-lab02-file-v1/src/main/java/module-info.java b/old/java2-lab02-file-v1/src/main/java/module-info.java
similarity index 100%
rename from java2-lab02-file-v1/src/main/java/module-info.java
rename to old/java2-lab02-file-v1/src/main/java/module-info.java
diff --git a/run.sh b/old/run.sh
similarity index 100%
rename from run.sh
rename to old/run.sh
diff --git a/java2-lab02-v1/pom.xml b/pom.xml
similarity index 89%
rename from java2-lab02-v1/pom.xml
rename to pom.xml
index a2b751b..4ea98d1 100644
--- a/java2-lab02-v1/pom.xml
+++ b/pom.xml
@@ -3,10 +3,10 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>cz.vsb.fei.java2</groupId>
-	<artifactId>java2-lab02-v1</artifactId>
+	<artifactId>java2-lab03-v1</artifactId>
 	<version>0.0.1-SNAPHOST</version>
 
-	<name></name>
+	<name>java2-lab03-v1</name>
 	<packaging>jar</packaging>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -15,19 +15,10 @@
 	</properties>
 	<dependencies>
 		<dependency>
-			<groupId>cz.vsb.fei.java2</groupId>
-			<artifactId>java2-lab02-common-v1</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>cz.vsb.fei.java2</groupId>
-			<artifactId>java2-lab02-db-v1</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>cz.vsb.fei.java2</groupId>
-			<artifactId>java2-lab02-file-v1</artifactId>
-			<version>1.0-SNAPSHOT</version>
+			<groupId>com.h2database</groupId>
+			<artifactId>h2</artifactId>
+			<version>2.3.232</version>
+			<scope>runtime</scope>
 		</dependency>
 
 		<dependency>
diff --git a/java2-lab02-v1/scores.csv b/scores.csv
similarity index 100%
rename from java2-lab02-v1/scores.csv
rename to scores.csv
diff --git a/src/main/java/lab/Setting.java b/src/main/java/lab/Setting.java
new file mode 100644
index 0000000..b8fe27c
--- /dev/null
+++ b/src/main/java/lab/Setting.java
@@ -0,0 +1,64 @@
+package lab;
+
+import lab.storage.DbConnector;
+import lab.storage.ScoreStorageInterface;
+
+public class Setting {
+
+	private static Setting instance;
+
+	private ScoreStorageInterface scoreStorageInterface = new DbConnector();
+	private double gravity = 9.81;
+	private double normalBulletSpeed = 30;
+	private int numberOfUfos = 3;
+	private double ufoMinPercentageHeight = 0.3;
+	private double ufoMinSpeed = 70;
+	private double ufoMaxSpeed = 150;
+	private double bulletMinSpeed = 30;
+	private double bulletMaxSpeed = 300;
+
+	public static void configure(Setting setting) {
+		instance = setting;
+	}
+
+	public static Setting getInstance() {
+		return instance;
+	}
+
+	public double getGravity() {
+		return gravity;
+	}
+
+	public double getNormalBulletSpeed() {
+		return normalBulletSpeed;
+	}
+
+	public int getNumberOfUfos() {
+		return numberOfUfos;
+	}
+
+	public ScoreStorageInterface getScoreStorageInterface() {
+		return scoreStorageInterface;
+	}
+
+	public double getUfoMinPercentageHeight() {
+		return ufoMinPercentageHeight;
+	}
+
+	public double getUfoMinSpeed() {
+		return ufoMinSpeed;
+	}
+
+	public double getUfoMaxSpeed() {
+		return ufoMaxSpeed;
+	}
+
+	public double getBulletMinSpeed() {
+		return bulletMinSpeed;
+	}
+
+	public double getBulletMaxSpeed() {
+		return bulletMaxSpeed;
+	}
+
+}
diff --git a/src/main/java/lab/data/Score.java b/src/main/java/lab/data/Score.java
new file mode 100644
index 0000000..01dc746
--- /dev/null
+++ b/src/main/java/lab/data/Score.java
@@ -0,0 +1,64 @@
+package lab.data;
+
+import java.util.Random;
+
+public class Score {
+
+	private static final Random RANDOM = new Random();
+	
+	private String name;
+	private int points;
+	
+	public Score(String name, int points) {
+		this.name = name;
+		this.points = points;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int getPoints() {
+		return points;
+	}
+
+	public void setPoints(int points) {
+		this.points = points;
+	}
+
+	@Override
+	public String toString() {
+		return "Score [name=" + name + ", points=" + points + "]";
+	}
+	
+	public static Score generate() {
+		return new Score(getRandomNick(), RANDOM.nextInt(50, 300));
+	}
+	
+	public static final String[] nicks = { "CyberSurfer", "PixelPioneer", "SocialSavvy", "DigitalDynamo", "ByteBuddy", "InstaGuru",
+			"TikTokTornado", "SnapMaster", "TweetTrendsetter", "ChatChampion", "HashtagHero", "EmojiEnthusiast",
+			"StoryStylist", "SelfieStar", "FilterFanatic", "VlogVirtuoso", "Memelord", "InfluencerInsider",
+			"StreamSupreme", "GeekyGizmo", "CodeCommander", "JavaJuggernaut", "ByteNinja", "SyntaxSamurai",
+			"ClassyCoder", "ObjectOmnipotent", "LoopLegend", "VariableVirtuoso", "DebugDemon", "CompilerCrusader",
+			"PixelProdigy", "VirtualVoyager", "AlgorithmAce", "DataDynamo", "ExceptionExpert", "BugBuster",
+			"SyntaxSorcerer", "CodeCrusader", "JavaJester", "NerdyNavigator", "CryptoCaptain", "SocialButterfly",
+			"AppArchitect", "WebWizard", "FunctionFreak", "PixelArtist", "CyberPhantom", "HackHero", "CacheChampion",
+			"ScreenSage", "WebWeaver", "LogicLover", "BitBlazer", "NetworkNomad", "ProtocolPioneer", "BinaryBoss",
+			"StackSultan", "SocialScribe", "RenderRuler", "ScriptSorcerer", "HTMLHero", "PixelProwler", "FrameFreak",
+			"DataDreamer", "BotBuilder", "ByteBishop", "KeyboardKnight", "DesignDaredevil", "JavaJuggler",
+			"SyntaxStrategist", "TechTactician", "ProgramProdigy", "BinaryBard", "PixelPoet", "GigabyteGuru",
+			"TechTrekker", "NetworkNinja", "DataDetective", "MatrixMaster", "CodeConductor", "AppAlchemist",
+			"ServerSage", "ClusterChampion", "ScriptSensei", "KeyboardKicker", "CacheCrafter", "SocialSpark",
+			"BinaryBeast", "CodeConnoisseur", "BitBrain", "VirtualVanguard", "SystemSculptor", "RenderRogue",
+			"CryptoConqueror", "MachineMonarch", "PixelPal", "CompilerCaptain", "BitBuilder", "TechTitan",
+			"CloudConqueror", "EchoExplorer", "FunctionFanatic", "RobotRanger" };
+	
+	public static String getRandomNick() {
+		return nicks[RANDOM.nextInt(nicks.length)];
+	}
+
+}
diff --git a/java2-lab02-v1/src/main/java/lab/game/Bullet.java b/src/main/java/lab/game/Bullet.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/Bullet.java
rename to src/main/java/lab/game/Bullet.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/BulletAnimated.java b/src/main/java/lab/game/BulletAnimated.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/BulletAnimated.java
rename to src/main/java/lab/game/BulletAnimated.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/Cannon.java b/src/main/java/lab/game/Cannon.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/Cannon.java
rename to src/main/java/lab/game/Cannon.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/Collisionable.java b/src/main/java/lab/game/Collisionable.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/Collisionable.java
rename to src/main/java/lab/game/Collisionable.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/DrawableSimulable.java b/src/main/java/lab/game/DrawableSimulable.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/DrawableSimulable.java
rename to src/main/java/lab/game/DrawableSimulable.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/DrawingThread.java b/src/main/java/lab/game/DrawingThread.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/DrawingThread.java
rename to src/main/java/lab/game/DrawingThread.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/HitListener.java b/src/main/java/lab/game/HitListener.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/HitListener.java
rename to src/main/java/lab/game/HitListener.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/Routines.java b/src/main/java/lab/game/Routines.java
similarity index 100%
rename from java2-lab02-v1/src/main/java/lab/game/Routines.java
rename to src/main/java/lab/game/Routines.java
diff --git a/java2-lab02-v1/src/main/java/lab/game/Ufo.java b/src/main/java/lab/game/Ufo.java
similarity index 83%
rename from java2-lab02-v1/src/main/java/lab/game/Ufo.java
rename to src/main/java/lab/game/Ufo.java
index 462bcc9..3aca92b 100644
--- a/java2-lab02-v1/src/main/java/lab/game/Ufo.java
+++ b/src/main/java/lab/game/Ufo.java
@@ -6,6 +6,7 @@ import javafx.geometry.Point2D;
 import javafx.geometry.Rectangle2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.image.Image;
+import lab.Setting;
 
 public class Ufo extends WorldEntity implements Collisionable {
 
@@ -14,8 +15,11 @@ public class Ufo extends WorldEntity implements Collisionable {
 	private Point2D velocity;
 
 	public Ufo(World world) {
-		this(world, new Point2D(RANDOM.nextDouble(world.getWidth()), RANDOM.nextDouble(0, world.getHeight() * 0.3)),
-				new Point2D(RANDOM.nextDouble(70, 150), 0));
+		this(world,
+				new Point2D(RANDOM.nextDouble(world.getWidth()),
+						RANDOM.nextDouble(0, world.getHeight() * Setting.getInstance().getUfoMinPercentageHeight())),
+				new Point2D(RANDOM.nextDouble(Setting.getInstance().getUfoMinSpeed(),
+						Setting.getInstance().getUfoMaxSpeed()), 0));
 	}
 
 	public Ufo(World world, Point2D position, Point2D velocity) {
diff --git a/java2-lab02-v1/src/main/java/lab/game/World.java b/src/main/java/lab/game/World.java
similarity index 81%
rename from java2-lab02-v1/src/main/java/lab/game/World.java
rename to src/main/java/lab/game/World.java
index 1a49271..6404f19 100644
--- a/java2-lab02-v1/src/main/java/lab/game/World.java
+++ b/src/main/java/lab/game/World.java
@@ -2,24 +2,24 @@ package lab.game;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
+import lab.Setting;
 
 public class World {
 
-	public static final Point2D GRAVITY = new Point2D(0, 9.81);
+	public static final Point2D GRAVITY = new Point2D(0, Setting.getInstance().getGravity());
 	private final double width;
 
 	private final double height;
 
 	private List<DrawableSimulable> entities;
-	private Collection<DrawableSimulable> entitiesToRemove = new LinkedList<DrawableSimulable>();
-	private Collection<DrawableSimulable> entitiesToAdd = new LinkedList<DrawableSimulable>();
-	
+	private Collection<DrawableSimulable> entitiesToRemove = new LinkedList<>();
+	private Collection<DrawableSimulable> entitiesToAdd = new LinkedList<>();
+
 	private Cannon cannon;
 //	private BulletAnimated bulletAnimated;
 
@@ -28,12 +28,11 @@ public class World {
 		this.height = height;
 		entities = new ArrayList<>();
 		cannon = new Cannon(this, new Point2D(0, height - 20), -45);
-//		bulletAnimated = new BulletAnimated(this, cannon, new Point2D(0, height), new Point2D(50, -80),
-//				GRAVITY);
 		entities.add(cannon);
-		entities.add(new Bullet(this, new Point2D(0, height), new Point2D(30, -30), new Point2D(0, 9.81)));
-//		entities.add(bulletAnimated);
-		for (int i = 0; i < 3; i++) {
+		entities.add(new Bullet(this, new Point2D(0, height),
+				new Point2D(Setting.getInstance().getNormalBulletSpeed(), -Setting.getInstance().getNormalBulletSpeed()),
+				GRAVITY));
+		for (int i = 0; i < Setting.getInstance().getNumberOfUfos(); i++) {
 			entities.add(new Ufo(this));
 		}
 	}
@@ -73,13 +72,14 @@ public class World {
 	public double getWidth() {
 		return width;
 	}
-	
+
 	public void add(DrawableSimulable entity) {
 		entitiesToAdd.add(entity);
 	}
+
 	public void remove(DrawableSimulable entity) {
 		entitiesToRemove.add(entity);
-		
+
 	}
 
 	public double getHeight() {
diff --git a/java2-lab02-v1/src/main/java/lab/game/WorldEntity.java b/src/main/java/lab/game/WorldEntity.java
similarity index 89%
rename from java2-lab02-v1/src/main/java/lab/game/WorldEntity.java
rename to src/main/java/lab/game/WorldEntity.java
index e858399..73e0f0b 100644
--- a/java2-lab02-v1/src/main/java/lab/game/WorldEntity.java
+++ b/src/main/java/lab/game/WorldEntity.java
@@ -8,7 +8,7 @@ public abstract  class WorldEntity implements DrawableSimulable{
 	protected final World world;
 	protected Point2D position;
 
-	public WorldEntity(World world, Point2D position) {
+	protected WorldEntity(World world, Point2D position) {
 		this.world = world;
 		this.position = position;
 	}
diff --git a/java2-lab02-v1/src/main/java/lab/gui/App.java b/src/main/java/lab/gui/App.java
similarity index 95%
rename from java2-lab02-v1/src/main/java/lab/gui/App.java
rename to src/main/java/lab/gui/App.java
index 115b897..d36a948 100644
--- a/java2-lab02-v1/src/main/java/lab/gui/App.java
+++ b/src/main/java/lab/gui/App.java
@@ -6,6 +6,7 @@ import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
+import lab.Setting;
 
 /**
  * Class <b>App</b> - extends class Application and it is an entry point of the
@@ -17,6 +18,7 @@ public class App extends Application {
 
 	private GameController gameController;
 	public static void main(String[] args) {
+		Setting.configure(new Setting());
 		launch(args);
 	}
 
diff --git a/java2-lab02-v1/src/main/java/lab/gui/GameController.java b/src/main/java/lab/gui/GameController.java
similarity index 51%
rename from java2-lab02-v1/src/main/java/lab/gui/GameController.java
rename to src/main/java/lab/gui/GameController.java
index 6fa4faf..26a8a6a 100644
--- a/java2-lab02-v1/src/main/java/lab/gui/GameController.java
+++ b/src/main/java/lab/gui/GameController.java
@@ -2,7 +2,6 @@ package lab.gui;
 
 import java.util.List;
 
-import cz.vsb.fei.java2.lab02.common.Score;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.geometry.Point2D;
@@ -13,21 +12,22 @@ import javafx.scene.control.Slider;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
 import javafx.scene.control.cell.PropertyValueFactory;
-import lab.ScoreStorageFactory;
+import lab.Setting;
+import lab.data.Score;
 import lab.game.BulletAnimated;
 import lab.game.DrawingThread;
 import lab.game.World;
 
 public class GameController {
 
-    @FXML
-    private Button btnGenerateScore;
+	@FXML
+	private Button btnGenerateScore;
 
-    @FXML
-    private Button btnLoadAll;
+	@FXML
+	private Button btnLoadAll;
 
-    @FXML
-    private Button btnLoadFirstTen;
+	@FXML
+	private Button btnLoadFirstTen;
 
 	@FXML
 	private Slider angle;
@@ -39,60 +39,54 @@ public class GameController {
 	private Canvas canvas;
 
 	@FXML
-    private TableView<Score> scores;
+	private TableView<Score> scores;
 
 	@FXML
-    private TableColumn<Score, String> nickColumn;
-
-    @FXML
-    private TableColumn<Score, Integer> pointsColumn;
+	private TableColumn<Score, String> nickColumn;
 
+	@FXML
+	private TableColumn<Score, Integer> pointsColumn;
 
 	private DrawingThread timer;
 
-    @FXML
-    private Label hits;
-    private int hitcount = 0;
+	@FXML
+	private Label hits;
+	private int hitcount = 0;
+
 	@FXML
 	void fire(ActionEvent event) {
 		double angle = timer.getWorld().getCannon().getAngle();
 		double angleRad = Math.toRadians(angle);
 		double speedValue = speed.getValue();
-		Point2D velocity = new Point2D(
-				Math.cos(angleRad)*speedValue, 
-				Math.sin(angleRad)*speedValue); 
-		BulletAnimated bulletAnimated = new BulletAnimated(
-				timer.getWorld(), 
-				timer.getWorld().getCannon(),
-				timer.getWorld().getCannon().getPosition(), 
-				velocity, World.GRAVITY);
+		Point2D velocity = new Point2D(Math.cos(angleRad) * speedValue, Math.sin(angleRad) * speedValue);
+		BulletAnimated bulletAnimated = new BulletAnimated(timer.getWorld(), timer.getWorld().getCannon(),
+				timer.getWorld().getCannon().getPosition(), velocity, World.GRAVITY);
 		timer.getWorld().add(bulletAnimated);
 		bulletAnimated.addHitListener(this::increaseHits);
-		bulletAnimated.addHitListener(
-				() -> System.out.println("au!!!!"));
+		bulletAnimated.addHitListener(() -> System.out.println("au!!!!"));
 	}
 
-    @FXML
-    void btnGenerateScoreAction(ActionEvent event) {
-    	Score score = Score.generate();
-    	this.scores.getItems().add(score);
-    	ScoreStorageFactory.getInstance().insertScore(score);
-    }
-
-    @FXML
-    void btnLoadAllAction(ActionEvent event) {
-    	updateScoreTable(ScoreStorageFactory.getInstance().getAll());
-    }
-
-    @FXML
-    void btnLoadFirstTenAction(ActionEvent event) {
-    	updateScoreTable(ScoreStorageFactory.getInstance().getFirstTen());
-    }
-    
-    private void updateScoreTable(List<Score> scores) {
-    	this.scores.getItems().clear();
-    	this.scores.getItems().addAll(scores);
-    }
+	@FXML
+	void btnGenerateScoreAction(ActionEvent event) {
+		Score score = Score.generate();
+		this.scores.getItems().add(score);
+		Setting.getInstance().getScoreStorageInterface().insertScore(score);
+	}
+
+	@FXML
+	void btnLoadAllAction(ActionEvent event) {
+		updateScoreTable(Setting.getInstance().getScoreStorageInterface().getAll());
+	}
+
+	@FXML
+	void btnLoadFirstTenAction(ActionEvent event) {
+		updateScoreTable(Setting.getInstance().getScoreStorageInterface().getFirstTen());
+	}
+
+	private void updateScoreTable(List<Score> scores) {
+		this.scores.getItems().clear();
+		this.scores.getItems().addAll(scores);
+	}
 
 	private void updateHits() {
 		hits.setText(String.format("Hit count: %03d", hitcount));
@@ -102,27 +96,28 @@ public class GameController {
 		hitcount++;
 		updateHits();
 	}
-	
+
 	@FXML
 	void initialize() {
 		assert angle != null : "fx:id=\"angle\" was not injected: check your FXML file 'gameWindow.fxml'.";
 		assert canvas != null : "fx:id=\"canvas\" was not injected: check your FXML file 'gameWindow.fxml'.";
 		assert speed != null : "fx:id=\"speed\" was not injected: check your FXML file 'gameWindow.fxml'.";
+		speed.setMin(Setting.getInstance().getBulletMinSpeed());
+		speed.setMax(Setting.getInstance().getBulletMaxSpeed());
 		timer = new DrawingThread(canvas);
 		timer.start();
 		angle.valueProperty().addListener(
-				(observable, oldValue, newValue) -> 
-					timer.getWorld().getCannon().setAngle(newValue.doubleValue()));
-		
+				(observable, oldValue, newValue) -> timer.getWorld().getCannon().setAngle(newValue.doubleValue()));
+
 		nickColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
 		pointsColumn.setCellValueFactory(new PropertyValueFactory<>("points"));
-		
+
 		initStorage();
 	}
-	
+
 	private void initStorage() {
-		ScoreStorageFactory.getInstance().init();
-		scores.getItems().addAll(ScoreStorageFactory.getInstance().getAll());
+		Setting.getInstance().getScoreStorageInterface().init();
+		scores.getItems().addAll(Setting.getInstance().getScoreStorageInterface().getAll());
 	}
 
 	public void stop() {
diff --git a/src/main/java/lab/storage/DbConnector.java b/src/main/java/lab/storage/DbConnector.java
new file mode 100644
index 0000000..7511c9a
--- /dev/null
+++ b/src/main/java/lab/storage/DbConnector.java
@@ -0,0 +1,63 @@
+package lab.storage;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+import lab.data.Score;
+
+public class DbConnector implements ScoreStorageInterface {
+
+	private static final String JDBC_CONECTIN_STRING = "jdbc:h2:file:./scoreDB";
+
+	@Override
+	public List<Score> getAll() {
+		return queryScore("select * from scores;");
+	}
+
+	@Override
+	public List<Score> getFirstTen() {
+		return queryScore("select * from scores order by points  desc limit 10;");
+	}
+
+	private List<Score> queryScore(String query) {
+		List<Score> result = new ArrayList<>();
+		try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
+				Statement stm = con.createStatement();
+				ResultSet rs = stm.executeQuery(query);) {
+			while (rs.next()) {
+				result.add(new Score(rs.getString("nick"), rs.getInt("points")));
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+
+	@Override
+	public void init() {
+		try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
+				Statement stm = con.createStatement();) {
+			stm.executeUpdate("CREATE TABLE if not exists scores (nick VARCHAR(50) NOT NULL, points INT NOT NULL);");
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public void insertScore(Score score) {
+		try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
+				PreparedStatement stm = con.prepareStatement("INSERT INTO scores VALUES (?, ?)");) {
+			stm.setString(1, score.getName());
+			stm.setInt(2, score.getPoints());
+			stm.executeUpdate();
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/lab/storage/FileStorage.java b/src/main/java/lab/storage/FileStorage.java
new file mode 100644
index 0000000..a3228c1
--- /dev/null
+++ b/src/main/java/lab/storage/FileStorage.java
@@ -0,0 +1,56 @@
+package lab.storage;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Stream;
+
+import lab.data.Score;
+
+public class FileStorage implements ScoreStorageInterface {
+
+	private static final String SCORE_FILE_NAME = "scores.csv";
+
+	@Override
+	public List<Score> getAll() {
+		if (Files.exists(Paths.get(SCORE_FILE_NAME))) {
+			try (Stream<String> lines = Files.lines(Paths.get(SCORE_FILE_NAME))) {
+				List<Score> result = lines.map(line -> line.split(";"))
+						.map(parts -> new Score(parts[0], Integer.parseInt(parts[1]))).toList();
+				return new ArrayList<>(result);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return new ArrayList<>();
+	}
+
+	@Override
+	public List<Score> getFirstTen() {
+		List<Score> all = getAll();
+		Collections.sort(all, Comparator.comparing(Score::getPoints).reversed());
+		return all.subList(0, 10);
+	}
+
+	@Override
+	public void init() {
+		/* noting to do */
+	}
+
+	@Override
+	public void insertScore(Score score) {
+		List<Score> all = getAll();
+		all.add(score);
+		List<String> lines = all.stream().map(s -> String.format("%s;%d", s.getName(), s.getPoints())).toList();
+		try {
+			Files.write(Paths.get(SCORE_FILE_NAME), lines, StandardOpenOption.CREATE);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/lab/storage/ScoreStorageInterface.java b/src/main/java/lab/storage/ScoreStorageInterface.java
new file mode 100644
index 0000000..67ee80d
--- /dev/null
+++ b/src/main/java/lab/storage/ScoreStorageInterface.java
@@ -0,0 +1,17 @@
+package lab.storage;
+
+import java.util.List;
+
+import lab.data.Score;
+
+public interface ScoreStorageInterface {
+
+	List<Score> getAll();
+
+	List<Score> getFirstTen();
+
+	void init();
+
+	void insertScore(Score score);
+
+}
\ No newline at end of file
diff --git a/java2-lab02-v1/src/main/java/module-info.java b/src/main/java/module-info.java
similarity index 50%
rename from java2-lab02-v1/src/main/java/module-info.java
rename to src/main/java/module-info.java
index 3c46773..02438d1 100644
--- a/java2-lab02-v1/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -1,11 +1,9 @@
-import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
-
-module cz.vsb.fei.java2.lab02_module {
+module cz.vsb.fei.java2.lab03_module {
     requires transitive javafx.controls;
     requires javafx.fxml;
     requires javafx.base;
-	requires cz.vsb.fei.java2.lab02.common_module;
+	requires java.sql;
     opens lab.gui to javafx.fxml;
+    opens lab.data to javafx.base;
     exports lab.gui to javafx.fxml,javafx.graphics;
-    uses ScoreStorageInterface;
 }
\ No newline at end of file
diff --git a/java2-lab02-v1/src/main/resources/lab/game/fireball-transparent.gif b/src/main/resources/lab/game/fireball-transparent.gif
similarity index 100%
rename from java2-lab02-v1/src/main/resources/lab/game/fireball-transparent.gif
rename to src/main/resources/lab/game/fireball-transparent.gif
diff --git a/java2-lab02-v1/src/main/resources/lab/game/ufo-small.gif b/src/main/resources/lab/game/ufo-small.gif
similarity index 100%
rename from java2-lab02-v1/src/main/resources/lab/game/ufo-small.gif
rename to src/main/resources/lab/game/ufo-small.gif
diff --git a/java2-lab02-v1/src/main/resources/lab/game/ufo.gif b/src/main/resources/lab/game/ufo.gif
similarity index 100%
rename from java2-lab02-v1/src/main/resources/lab/game/ufo.gif
rename to src/main/resources/lab/game/ufo.gif
diff --git a/java2-lab02-v1/src/main/resources/lab/gui/application.css b/src/main/resources/lab/gui/application.css
similarity index 100%
rename from java2-lab02-v1/src/main/resources/lab/gui/application.css
rename to src/main/resources/lab/gui/application.css
diff --git a/java2-lab02-v1/src/main/resources/lab/gui/gameWindow.fxml b/src/main/resources/lab/gui/gameWindow.fxml
similarity index 100%
rename from java2-lab02-v1/src/main/resources/lab/gui/gameWindow.fxml
rename to src/main/resources/lab/gui/gameWindow.fxml
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/AllOfContinue.java b/src/test/java/jez04/structure/test/AllOfContinue.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/AllOfContinue.java
rename to src/test/java/jez04/structure/test/AllOfContinue.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/ClassExist.java b/src/test/java/jez04/structure/test/ClassExist.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/ClassExist.java
rename to src/test/java/jez04/structure/test/ClassExist.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/ClassStructureTest.java b/src/test/java/jez04/structure/test/ClassStructureTest.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/ClassStructureTest.java
rename to src/test/java/jez04/structure/test/ClassStructureTest.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/ContainsInnerClasses.java b/src/test/java/jez04/structure/test/ContainsInnerClasses.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/ContainsInnerClasses.java
rename to src/test/java/jez04/structure/test/ContainsInnerClasses.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/HasMethod.java b/src/test/java/jez04/structure/test/HasMethod.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/HasMethod.java
rename to src/test/java/jez04/structure/test/HasMethod.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/HasProperty.java b/src/test/java/jez04/structure/test/HasProperty.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/HasProperty.java
rename to src/test/java/jez04/structure/test/HasProperty.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/IsDescendatOf.java b/src/test/java/jez04/structure/test/IsDescendatOf.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/IsDescendatOf.java
rename to src/test/java/jez04/structure/test/IsDescendatOf.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/IsInterface.java b/src/test/java/jez04/structure/test/IsInterface.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/IsInterface.java
rename to src/test/java/jez04/structure/test/IsInterface.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/ResourceContains.java b/src/test/java/jez04/structure/test/ResourceContains.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/ResourceContains.java
rename to src/test/java/jez04/structure/test/ResourceContains.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/SrcContains.java b/src/test/java/jez04/structure/test/SrcContains.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/SrcContains.java
rename to src/test/java/jez04/structure/test/SrcContains.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/StructureHelper.java b/src/test/java/jez04/structure/test/StructureHelper.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/StructureHelper.java
rename to src/test/java/jez04/structure/test/StructureHelper.java
diff --git a/java2-lab02-v1/src/test/java/jez04/structure/test/StructureMatcher.java b/src/test/java/jez04/structure/test/StructureMatcher.java
similarity index 100%
rename from java2-lab02-v1/src/test/java/jez04/structure/test/StructureMatcher.java
rename to src/test/java/jez04/structure/test/StructureMatcher.java
-- 
GitLab