summaryrefslogtreecommitdiff
path: root/graphs/java/singleton
diff options
context:
space:
mode:
Diffstat (limited to 'graphs/java/singleton')
-rw-r--r--graphs/java/singleton/.gitignore38
-rw-r--r--graphs/java/singleton/pom.xml141
-rw-r--r--graphs/java/singleton/src/main/java/fr/epita/assistants/logger/Logger.java62
-rw-r--r--graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/SingletonEnumLogger.java49
-rw-r--r--graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/StaticSingletonLogger.java54
5 files changed, 344 insertions, 0 deletions
diff --git a/graphs/java/singleton/.gitignore b/graphs/java/singleton/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/graphs/java/singleton/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store \ No newline at end of file
diff --git a/graphs/java/singleton/pom.xml b/graphs/java/singleton/pom.xml
new file mode 100644
index 0000000..6bb46cb
--- /dev/null
+++ b/graphs/java/singleton/pom.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>fr.epita.assistants</groupId>
+ <artifactId>singleton</artifactId>
+ <version>1.0</version>
+
+ <properties>
+ <versions.java>21</versions.java>
+ <versions.junit>5.9.1</versions.junit>
+ <versions.maven-compiler-plugin>3.13.0</versions.maven-compiler-plugin>
+ <versions.maven-surefire-plugin>3.5.0</versions.maven-surefire-plugin>
+ <versions.maven-jar-plugin>3.1.1</versions.maven-jar-plugin>
+ <versions.maven-install-plugin>3.1.0</versions.maven-install-plugin>
+ <versions.slf4j>1.7.36</versions.slf4j>
+ <versions.archunit>1.2.0</versions.archunit>
+
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+ <surefire.reportsDirectory>${project.build.directory}/surefire-reports</surefire.reportsDirectory>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <version>${versions.junit}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.tngtech.archunit</groupId>
+ <artifactId>archunit-junit5</artifactId>
+ <version>${versions.archunit}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit-platform</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>3.9.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.9.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-monitor</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0.24</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-filtering</artifactId>
+ <version>3.3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>1.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-profile</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-registry</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>classworlds</groupId>
+ <artifactId>classworlds</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ <version>1.9.3</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${versions.maven-compiler-plugin}</version>
+ <configuration>
+ <source>${versions.java}</source>
+ <target>${versions.java}</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>${versions.maven-install-plugin}</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ <configuration>
+ <reportsDirectory>${surefire.reportsDirectory}</reportsDirectory>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/graphs/java/singleton/src/main/java/fr/epita/assistants/logger/Logger.java b/graphs/java/singleton/src/main/java/fr/epita/assistants/logger/Logger.java
new file mode 100644
index 0000000..4cc59f8
--- /dev/null
+++ b/graphs/java/singleton/src/main/java/fr/epita/assistants/logger/Logger.java
@@ -0,0 +1,62 @@
+package fr.epita.assistants.logger;
+
+/**
+ * A standard logger interface
+ */
+public interface Logger {
+ /**
+ * The Level enum, representing the gravity of a log message.
+ */
+ enum Level {
+ INFO,
+ WARN,
+ ERROR
+ }
+
+ /**
+ * Formats a message and returns it as a string
+ * @param level The gravity level of the logged message.
+ * @param message The logged message.
+ * @return
+ */
+ static String getFormattedLog(final Level level, final String message) {
+ return '[' +
+ level.toString() +
+ "] " +
+ message;
+ }
+
+ /**
+ * Outputs the logged message with the format '[LEVEL] Message' to stderr.
+ *
+ * @param level The gravity level of the logged message.
+ * @param message The logged message.
+ */
+ void log(final Level level, final String message);
+
+ /**
+ * Getter for infoCounter.
+ *
+ * @return infoCounter.
+ */
+ int getInfoCounter();
+
+ /**
+ * Getter for warnCounter.
+ *
+ * @return warnCounter.
+ */
+ int getWarnCounter();
+
+ /**
+ * Getter for errorCounter.
+ *
+ * @return errorCounter.
+ */
+ int getErrorCounter();
+
+ /**
+ * Resets the counters.
+ */
+ void reset();
+}
diff --git a/graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/SingletonEnumLogger.java b/graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/SingletonEnumLogger.java
new file mode 100644
index 0000000..4fb969e
--- /dev/null
+++ b/graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/SingletonEnumLogger.java
@@ -0,0 +1,49 @@
+package fr.epita.assistants.singleton;
+
+import fr.epita.assistants.logger.Logger;
+
+public enum SingletonEnumLogger implements Logger {
+ INSTANCE;
+ int infoCounter;
+ int errorCounter;
+ int warnCounter;
+
+ @Override
+ public void log(Level level, String message) {
+ switch (level)
+ {
+ case INFO:
+ infoCounter++;
+ break;
+ case WARN:
+ warnCounter++;
+ break;
+ case ERROR:
+ errorCounter++;
+ break;
+ }
+ System.err.println(Logger.getFormattedLog(level, message));
+ }
+
+ @Override
+ public int getInfoCounter() {
+ return infoCounter;
+ }
+
+ @Override
+ public int getWarnCounter() {
+ return warnCounter;
+ }
+
+ @Override
+ public int getErrorCounter() {
+ return errorCounter;
+ }
+
+ @Override
+ public void reset() {
+ infoCounter = 0;
+ warnCounter = 0;
+ errorCounter = 0;
+ }
+}
diff --git a/graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/StaticSingletonLogger.java b/graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/StaticSingletonLogger.java
new file mode 100644
index 0000000..51d1801
--- /dev/null
+++ b/graphs/java/singleton/src/main/java/fr/epita/assistants/singleton/StaticSingletonLogger.java
@@ -0,0 +1,54 @@
+package fr.epita.assistants.singleton;
+
+import fr.epita.assistants.logger.Logger;
+
+public class StaticSingletonLogger implements Logger {
+ int infoCounter;
+ int errorCounter;
+ int warnCounter;
+ private StaticSingletonLogger() {
+ infoCounter = 0;
+ errorCounter = 0;
+ warnCounter = 0;
+ }
+
+ private static class InstanceHolder {
+ private static final StaticSingletonLogger _INSTANCE = new StaticSingletonLogger();
+ }
+
+ public static StaticSingletonLogger getInstance() {
+ return InstanceHolder._INSTANCE;
+ }
+ @Override
+ public void log(Level level, String message) {
+ switch (level)
+ {
+ case INFO -> infoCounter++;
+ case WARN -> warnCounter++;
+ case ERROR -> errorCounter++;
+ }
+ System.err.println(Logger.getFormattedLog(level, message));
+ }
+
+ @Override
+ public int getInfoCounter() {
+ return infoCounter;
+ }
+
+ @Override
+ public int getWarnCounter() {
+ return warnCounter;
+ }
+
+ @Override
+ public int getErrorCounter() {
+ return errorCounter;
+ }
+
+ @Override
+ public void reset() {
+ infoCounter = 0;
+ warnCounter = 0;
+ errorCounter = 0;
+ }
+}