summaryrefslogtreecommitdiff
path: root/graphs/java/singleton/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'graphs/java/singleton/src/main')
-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
3 files changed, 165 insertions, 0 deletions
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;
+ }
+}