Skip to content
Snippets Groups Projects
Commit 8b6d5942 authored by jez04's avatar jez04
Browse files

feat: :tada: solution

parent 7b1cfa3a
No related merge requests found
Showing
with 655 additions and 4 deletions
# Eclipse
.classpath
.project
.settings/
# Intellij
.idea/
*.iml
*.iws
# Mac
.DS_Store
# Maven
log/
target/
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-common-v3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>java2-lab02-common-v3</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>21</maven.compiler.release>
<JUnit.version>5.11.0</JUnit.version>
<log4j.version>2.23.1</log4j.version>
<lombok.version>1.18.34</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${JUnit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.0</version>
</plugin>
</plugins>
</build>
</project>
package lab;
package cz.vsb.fei.java2.lab02.common;
import java.util.Random;
......
package cz.vsb.fei.java2.lab02.common;
import java.util.List;
public interface ScoreStorageInterface {
List<Score> getAll();
List<Score> getFirstTen();
void init();
void insertScore(Score score);
}
\ No newline at end of file
module cz.vsb.fei.java2.lab02.common_module {
requires static lombok;
requires org.apache.logging.log4j;
exports cz.vsb.fei.java2.lab02.common;
}
\ No newline at end of file
package cz.vsb.fei.java2.lab01;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
/**
* Unit test for simple App.
*/
class AppTest {
/**
* Rigorous Test :-)
*/
@Test
void shouldAnswerWithTrue() {
assertTrue(true);
}
}
# Eclipse
.classpath
.project
.settings/
# Intellij
.idea/
*.iml
*.iws
# Mac
.DS_Store
# Maven
log/
target/
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-db-v3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>java2-lab02-db-v3</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>21</maven.compiler.release>
<JUnit.version>5.11.0</JUnit.version>
<log4j.version>2.23.1</log4j.version>
<lombok.version>1.18.34</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${JUnit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-common-v3</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.3.232</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.0</version>
</plugin>
</plugins>
</build>
</project>
package lab;
package cz.vsb.fei.java2.lab02.db;
import java.sql.Connection;
import java.sql.DriverManager;
......@@ -9,14 +9,19 @@ import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class DbConnector {
import cz.vsb.fei.java2.lab02.common.Score;
import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
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;");
}
......@@ -35,6 +40,7 @@ public class DbConnector {
return result;
}
@Override
public void init() {
try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
Statement stm = con.createStatement();) {
......@@ -44,6 +50,7 @@ public class DbConnector {
}
}
@Override
public void insertScore(Score score) {
try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
PreparedStatement stm = con.prepareStatement("INSERT INTO scores VALUES (?, ?)");) {
......
import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
import cz.vsb.fei.java2.lab02.db.DbConnector;
module cz.vsb.fei.java2.lab02.db_module {
requires static lombok;
requires org.apache.logging.log4j;
requires transitive cz.vsb.fei.java2.lab02.common_module;
requires java.sql;
exports cz.vsb.fei.java2.lab02.db;
provides ScoreStorageInterface with cz.vsb.fei.java2.lab02.db.DbConnector;
}
\ No newline at end of file
<Configuration>
<Appenders>
<Console name="Console">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"></AppenderRef>
</Root>
</Loggers>
</Configuration>
# Eclipse
.classpath
.project
.settings/
# Intellij
.idea/
*.iml
*.iws
# Mac
.DS_Store
# Maven
log/
target/
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-file-v3</artifactId>
<version>1.0-SNAPSHOT</version>
<name>java2-lab02-file-v3</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>21</maven.compiler.release>
<JUnit.version>5.11.0</JUnit.version>
<log4j.version>2.23.1</log4j.version>
<lombok.version>1.18.34</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${JUnit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-common-v3</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.0</version>
</plugin>
</plugins>
</build>
</project>
package cz.vsb.fei.file;
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 cz.vsb.fei.java2.lab02.common.Score;
import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
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();
}
}
}
import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
module cz.vsb.fei.file_module {
requires static lombok;
requires org.apache.logging.log4j;
requires transitive cz.vsb.fei.java2.lab02.common_module;
exports cz.vsb.fei.file;
provides ScoreStorageInterface with cz.vsb.fei.file.FileStorage;
}
\ No newline at end of file
/target/
......@@ -6,18 +6,29 @@
<artifactId>java2-lab02-v3</artifactId>
<version>0.0.1-SNAPHOST</version>
<packaging>jar</packaging>
<name>java2-lab02-v3</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.3.232</version>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-common-v3</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-db-v3</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cz.vsb.fei.java2</groupId>
<artifactId>java2-lab02-file-v3</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
......@@ -33,11 +44,11 @@
<artifactId>javafx-media</artifactId>
<version>23</version>
</dependency>
<dependency>
<groupId>org.controlsfx</groupId>
<artifactId>controlsfx</artifactId>
<version>11.2.1</version>
</dependency>
<dependency>
<groupId>org.controlsfx</groupId>
<artifactId>controlsfx</artifactId>
<version>11.2.1</version>
</dependency>
<!--
https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
......@@ -76,4 +87,85 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<failOnError>false</failOnError>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.8.1</version>
<executions>
<!-- Setup that goal copy-dependencies should be
automatically executed during phase package-->
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--Specify where should be dependencies (libraries) copied-->
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<archive>
<!--Automatically create and add file MANIFEST.MF into jar and set specified properties-->
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>lab.gui.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- Ignore/Execute plugin execution in Eclipse (error of m2e
eclipse plugin) -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<!-- copy-dependency plugin -->
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
RobotRanger;280
PixelPioneer;82
DigitalDynamo;58
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;
}
}
package lab;
package lab.game;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment