diff --git a/.idea/dictionaries/project.xml b/.idea/dictionaries/project.xml
index 46f4d3b..c6bca1c 100644
--- a/.idea/dictionaries/project.xml
+++ b/.idea/dictionaries/project.xml
@@ -13,6 +13,7 @@
toop
vmoptions
xplugin
+ yourturn
\ No newline at end of file
diff --git a/app/src/main/java/org/toop/Main.java b/app/src/main/java/org/toop/Main.java
index 029fa28..ed1297a 100644
--- a/app/src/main/java/org/toop/Main.java
+++ b/app/src/main/java/org/toop/Main.java
@@ -1,11 +1,11 @@
package org.toop;
import org.toop.app.App;
-import org.toop.framework.asset.ResourceLoader;
-import org.toop.framework.asset.ResourceManager;
import org.toop.framework.audio.SoundManager;
import org.toop.framework.networking.NetworkingClientManager;
import org.toop.framework.networking.NetworkingInitializationException;
+import org.toop.framework.resource.ResourceLoader;
+import org.toop.framework.resource.ResourceManager;
public final class Main {
static void main(String[] args) {
diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java
index c4c9251..cb4bef0 100644
--- a/app/src/main/java/org/toop/app/App.java
+++ b/app/src/main/java/org/toop/app/App.java
@@ -9,10 +9,10 @@ import javafx.stage.Stage;
import org.toop.app.layer.Layer;
import org.toop.app.layer.layers.MainLayer;
import org.toop.app.layer.layers.QuitPopup;
-import org.toop.framework.asset.ResourceManager;
-import org.toop.framework.asset.resources.CssAsset;
import org.toop.framework.audio.events.AudioEvents;
import org.toop.framework.eventbus.EventFlow;
+import org.toop.framework.resource.ResourceManager;
+import org.toop.framework.resource.resources.CssAsset;
import org.toop.local.AppContext;
import org.toop.local.AppSettings;
@@ -107,7 +107,7 @@ public final class App extends Application {
try {
root.getChildren().removeLast();
} catch (Exception e) {
- IO.println(e);
+ IO.println(e); // TODO: Use logger
}
}
diff --git a/app/src/main/java/org/toop/app/layer/layers/OptionsPopup.java b/app/src/main/java/org/toop/app/layer/layers/OptionsPopup.java
index 3182812..5dfc130 100644
--- a/app/src/main/java/org/toop/app/layer/layers/OptionsPopup.java
+++ b/app/src/main/java/org/toop/app/layer/layers/OptionsPopup.java
@@ -10,9 +10,9 @@ import org.toop.app.layer.Container;
import org.toop.app.layer.NodeBuilder;
import org.toop.app.layer.Popup;
import org.toop.app.layer.containers.VerticalContainer;
-import org.toop.framework.asset.resources.SettingsAsset;
import org.toop.framework.audio.events.AudioEvents;
import org.toop.framework.eventbus.EventFlow;
+import org.toop.framework.resource.resources.SettingsAsset;
import org.toop.local.AppContext;
import org.toop.local.AppSettings;
diff --git a/app/src/main/java/org/toop/local/AppContext.java b/app/src/main/java/org/toop/local/AppContext.java
index 886b6c6..4d96fb4 100644
--- a/app/src/main/java/org/toop/local/AppContext.java
+++ b/app/src/main/java/org/toop/local/AppContext.java
@@ -1,8 +1,8 @@
package org.toop.local;
import java.util.Locale;
-import org.toop.framework.asset.ResourceManager;
-import org.toop.framework.asset.resources.LocalizationAsset;
+import org.toop.framework.resource.ResourceManager;
+import org.toop.framework.resource.resources.LocalizationAsset;
public class AppContext {
private static final LocalizationAsset localization = ResourceManager.get("localization");
diff --git a/app/src/main/java/org/toop/local/AppSettings.java b/app/src/main/java/org/toop/local/AppSettings.java
index 8f15ab2..70e88bd 100644
--- a/app/src/main/java/org/toop/local/AppSettings.java
+++ b/app/src/main/java/org/toop/local/AppSettings.java
@@ -3,9 +3,9 @@ package org.toop.local;
import java.io.File;
import java.util.Locale;
import org.toop.app.App;
-import org.toop.framework.asset.resources.SettingsAsset;
import org.toop.framework.audio.events.AudioEvents;
import org.toop.framework.eventbus.EventFlow;
+import org.toop.framework.resource.resources.SettingsAsset;
import org.toop.framework.settings.Settings;
public class AppSettings {
diff --git a/framework/src/main/java/org/toop/framework/Logging.java b/framework/src/main/java/org/toop/framework/Logging.java
index abd13cc..ad28f0b 100644
--- a/framework/src/main/java/org/toop/framework/Logging.java
+++ b/framework/src/main/java/org/toop/framework/Logging.java
@@ -12,191 +12,190 @@ import org.apache.logging.log4j.core.config.LoggerConfig;
*
Provides methods to enable or disable logs globally or per class, with support for specifying
* log levels either via {@link Level} enums or string names.
*/
-// Todo: refactor
public final class Logging {
- /** Disables all logging globally by setting the root logger level to {@link Level#OFF}. */
- public static void disableAllLogs() {
- LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
- Configuration config = ctx.getConfiguration();
- LoggerConfig rootLoggerConfig = config.getRootLogger();
- rootLoggerConfig.setLevel(Level.OFF);
- ctx.updateLoggers();
- }
+ /** Disables all logging globally by setting the root logger level to {@link Level#OFF}. */
+ public static void disableAllLogs() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ LoggerConfig rootLoggerConfig = config.getRootLogger();
+ rootLoggerConfig.setLevel(Level.OFF);
+ ctx.updateLoggers();
+ }
- /** Enables all logging globally by setting the root logger level to {@link Level#ALL}. */
- public static void enableAllLogs() {
- LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
- Configuration config = ctx.getConfiguration();
- LoggerConfig rootLoggerConfig = config.getRootLogger();
- rootLoggerConfig.setLevel(Level.ALL);
- ctx.updateLoggers();
- }
+ /** Enables all logging globally by setting the root logger level to {@link Level#ALL}. */
+ public static void enableAllLogs() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ LoggerConfig rootLoggerConfig = config.getRootLogger();
+ rootLoggerConfig.setLevel(Level.ALL);
+ ctx.updateLoggers();
+ }
- /**
- * Enables global logging at a specific level by setting the root logger.
- *
- * @param level the logging level to enable for all logs
- */
- public static void enableAllLogs(Level level) {
- LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
- Configuration config = ctx.getConfiguration();
- LoggerConfig rootLoggerConfig = config.getRootLogger();
- rootLoggerConfig.setLevel(level);
- ctx.updateLoggers();
- }
+ /**
+ * Enables global logging at a specific level by setting the root logger.
+ *
+ * @param level the logging level to enable for all logs
+ */
+ public static void enableAllLogs(Level level) {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ LoggerConfig rootLoggerConfig = config.getRootLogger();
+ rootLoggerConfig.setLevel(level);
+ ctx.updateLoggers();
+ }
- /**
- * Verifies whether the provided string corresponds to a valid class name.
- *
- * @param className fully-qualified class name to check
- * @return true if the class exists, false otherwise
- */
- private static boolean verifyStringIsActualClass(String className) {
- try {
- Class.forName(className);
- return true;
- } catch (ClassNotFoundException e) {
- return false;
- }
- }
+ /**
+ * Verifies whether the provided string corresponds to a valid class name.
+ *
+ * @param className fully-qualified class name to check
+ * @return true if the class exists, false otherwise
+ */
+ private static boolean verifyStringIsActualClass(String className) {
+ try {
+ Class.forName(className);
+ return true;
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
+ }
- /**
- * Internal helper to disable logs for a specific class by name.
- *
- * @param className fully-qualified class name
- */
- private static void disableLogsForClassInternal(String className) {
- LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
- Configuration config = ctx.getConfiguration();
- config.removeLogger(className);
- LoggerConfig specificConfig = new LoggerConfig(className, Level.OFF, false);
- config.addLogger(className, specificConfig);
- ctx.updateLoggers();
- }
+ /**
+ * Internal helper to disable logs for a specific class by name.
+ *
+ * @param className fully-qualified class name
+ */
+ private static void disableLogsForClassInternal(String className) {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.removeLogger(className);
+ LoggerConfig specificConfig = new LoggerConfig(className, Level.OFF, false);
+ config.addLogger(className, specificConfig);
+ ctx.updateLoggers();
+ }
- /**
- * Disables logs for a specific class.
- *
- * @param class_ the class for which logs should be disabled
- * @param type of the class
- */
- public static void disableLogsForClass(Class class_) {
- disableLogsForClassInternal(class_.getName());
- }
+ /**
+ * Disables logs for a specific class.
+ *
+ * @param class_ the class for which logs should be disabled
+ * @param type of the class
+ */
+ public static void disableLogsForClass(Class class_) {
+ disableLogsForClassInternal(class_.getName());
+ }
- /**
- * Disables logs for a class specified by fully-qualified name, if the class exists.
- *
- * @param className fully-qualified class name
- */
- public static void disableLogsForClass(String className) {
- if (verifyStringIsActualClass(className)) {
- disableLogsForClassInternal(className);
- }
- }
+ /**
+ * Disables logs for a class specified by fully-qualified name, if the class exists.
+ *
+ * @param className fully-qualified class name
+ */
+ public static void disableLogsForClass(String className) {
+ if (verifyStringIsActualClass(className)) {
+ disableLogsForClassInternal(className);
+ }
+ }
- /**
- * Internal helper to enable logs for a specific class at a specific level.
- *
- * @param className fully-qualified class name
- * @param level logging level to set
- */
- private static void enableLogsForClassInternal(String className, Level level) {
- LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
- Configuration config = ctx.getConfiguration();
- LoggerConfig loggerConfig = config.getLoggers().get(className);
- if (loggerConfig == null) {
- loggerConfig = new LoggerConfig(className, level, false);
- config.addLogger(className, loggerConfig);
- } else {
- loggerConfig.setLevel(level);
- }
- ctx.updateLoggers();
- }
+ /**
+ * Internal helper to enable logs for a specific class at a specific level.
+ *
+ * @param className fully-qualified class name
+ * @param level logging level to set
+ */
+ private static void enableLogsForClassInternal(String className, Level level) {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ LoggerConfig loggerConfig = config.getLoggers().get(className);
+ if (loggerConfig == null) {
+ loggerConfig = new LoggerConfig(className, level, false);
+ config.addLogger(className, loggerConfig);
+ } else {
+ loggerConfig.setLevel(level);
+ }
+ ctx.updateLoggers();
+ }
- /**
- * Enables logging for a class at a specific level.
- *
- * @param class_ class to configure
- * @param levelToLog the logging level to set
- * @param type of the class
- */
- public static void enableLogsForClass(Class class_, Level levelToLog) {
- enableLogsForClassInternal(class_.getName(), levelToLog);
- }
+ /**
+ * Enables logging for a class at a specific level.
+ *
+ * @param class_ class to configure
+ * @param levelToLog the logging level to set
+ * @param type of the class
+ */
+ public static void enableLogsForClass(Class class_, Level levelToLog) {
+ enableLogsForClassInternal(class_.getName(), levelToLog);
+ }
- /**
- * Enables logging for a class specified by name at a specific level, if the class exists.
- *
- * @param className fully-qualified class name
- * @param levelToLog the logging level to set
- */
- public static void enableLogsForClass(String className, Level levelToLog) {
- if (verifyStringIsActualClass(className)) {
- enableLogsForClassInternal(className, levelToLog);
- }
- }
+ /**
+ * Enables logging for a class specified by name at a specific level, if the class exists.
+ *
+ * @param className fully-qualified class name
+ * @param levelToLog the logging level to set
+ */
+ public static void enableLogsForClass(String className, Level levelToLog) {
+ if (verifyStringIsActualClass(className)) {
+ enableLogsForClassInternal(className, levelToLog);
+ }
+ }
- /**
- * Enables logging for a class specified by name at a specific level using a string.
- *
- * @param className fully-qualified class name
- * @param levelToLog name of the logging level (e.g., "DEBUG", "INFO")
- */
- public static void enableLogsForClass(String className, String levelToLog) {
- Level level = Level.valueOf(levelToLog.trim().toUpperCase());
- if (level != null && verifyStringIsActualClass(className)) {
- enableLogsForClassInternal(className, level);
- }
- }
+ /**
+ * Enables logging for a class specified by name at a specific level using a string.
+ *
+ * @param className fully-qualified class name
+ * @param levelToLog name of the logging level (e.g., "DEBUG", "INFO")
+ */
+ public static void enableLogsForClass(String className, String levelToLog) {
+ Level level = Level.valueOf(levelToLog.trim().toUpperCase());
+ if (level != null && verifyStringIsActualClass(className)) {
+ enableLogsForClassInternal(className, level);
+ }
+ }
- /** Convenience methods for enabling logs at specific levels for classes. */
- public static void enableAllLogsForClass(Class class_) {
- enableLogsForClass(class_, Level.ALL);
- }
+ /** Convenience methods for enabling logs at specific levels for classes. */
+ public static void enableAllLogsForClass(Class class_) {
+ enableLogsForClass(class_, Level.ALL);
+ }
- public static void enableAllLogsForClass(String className) {
- enableLogsForClass(className, Level.ALL);
- }
+ public static void enableAllLogsForClass(String className) {
+ enableLogsForClass(className, Level.ALL);
+ }
- public static void enableDebugLogsForClass(Class class_) {
- enableLogsForClass(class_, Level.DEBUG);
- }
+ public static void enableDebugLogsForClass(Class class_) {
+ enableLogsForClass(class_, Level.DEBUG);
+ }
- public static void enableDebugLogsForClass(String className) {
- enableLogsForClass(className, Level.DEBUG);
- }
+ public static void enableDebugLogsForClass(String className) {
+ enableLogsForClass(className, Level.DEBUG);
+ }
- public static void enableErrorLogsForClass(Class class_) {
- enableLogsForClass(class_, Level.ERROR);
- }
+ public static void enableErrorLogsForClass(Class class_) {
+ enableLogsForClass(class_, Level.ERROR);
+ }
- public static void enableErrorLogsForClass(String className) {
- enableLogsForClass(className, Level.ERROR);
- }
+ public static void enableErrorLogsForClass(String className) {
+ enableLogsForClass(className, Level.ERROR);
+ }
- public static void enableFatalLogsForClass(Class class_) {
- enableLogsForClass(class_, Level.FATAL);
- }
+ public static void enableFatalLogsForClass(Class class_) {
+ enableLogsForClass(class_, Level.FATAL);
+ }
- public static void enableFatalLogsForClass(String className) {
- enableLogsForClass(className, Level.FATAL);
- }
+ public static void enableFatalLogsForClass(String className) {
+ enableLogsForClass(className, Level.FATAL);
+ }
- public static void enableInfoLogsForClass(Class class_) {
- enableLogsForClass(class_, Level.INFO);
- }
+ public static void enableInfoLogsForClass(Class class_) {
+ enableLogsForClass(class_, Level.INFO);
+ }
- public static void enableInfoLogsForClass(String className) {
- enableLogsForClass(className, Level.INFO);
- }
+ public static void enableInfoLogsForClass(String className) {
+ enableLogsForClass(className, Level.INFO);
+ }
- public static void enableTraceLogsForClass(Class class_) {
- enableLogsForClass(class_, Level.TRACE);
- }
+ public static void enableTraceLogsForClass(Class class_) {
+ enableLogsForClass(class_, Level.TRACE);
+ }
- public static void enableTraceLogsForClass(String className) {
- enableLogsForClass(className, Level.TRACE);
- }
-}
\ No newline at end of file
+ public static void enableTraceLogsForClass(String className) {
+ enableLogsForClass(className, Level.TRACE);
+ }
+}
diff --git a/framework/src/main/java/org/toop/framework/audio/AudioVolumeManager.java b/framework/src/main/java/org/toop/framework/audio/AudioVolumeManager.java
index add826b..e97574a 100644
--- a/framework/src/main/java/org/toop/framework/audio/AudioVolumeManager.java
+++ b/framework/src/main/java/org/toop/framework/audio/AudioVolumeManager.java
@@ -68,8 +68,6 @@ public class AudioVolumeManager {
private void handleMusicVolumeChange(AudioEvents.ChangeMusicVolume event) {
this.musicVolume = limitVolume(event.newVolume() / 100);
- System.out.println(this.musicVolume);
- System.out.println(this.volume);
for (MediaPlayer mediaPlayer : sM.getActiveMusic()) {
this.updateMusicVolume(mediaPlayer);
}
diff --git a/framework/src/main/java/org/toop/framework/audio/SoundManager.java b/framework/src/main/java/org/toop/framework/audio/SoundManager.java
index 4e1c8b2..13a98cb 100644
--- a/framework/src/main/java/org/toop/framework/audio/SoundManager.java
+++ b/framework/src/main/java/org/toop/framework/audio/SoundManager.java
@@ -7,12 +7,12 @@ import javax.sound.sampled.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.toop.framework.SnowflakeGenerator;
-import org.toop.framework.asset.ResourceManager;
-import org.toop.framework.asset.ResourceMeta;
-import org.toop.framework.asset.resources.MusicAsset;
-import org.toop.framework.asset.resources.SoundEffectAsset;
import org.toop.framework.audio.events.AudioEvents;
import org.toop.framework.eventbus.EventFlow;
+import org.toop.framework.resource.ResourceManager;
+import org.toop.framework.resource.ResourceMeta;
+import org.toop.framework.resource.resources.MusicAsset;
+import org.toop.framework.resource.resources.SoundEffectAsset;
public class SoundManager {
private static final Logger logger = LogManager.getLogger(SoundManager.class);
@@ -20,8 +20,6 @@ public class SoundManager {
private final Queue backgroundMusicQueue = new LinkedList<>();
private final Map activeSoundEffects = new HashMap<>();
private final HashMap audioResources = new HashMap<>();
- private final SnowflakeGenerator idGenerator =
- new SnowflakeGenerator(); // TODO: Don't create a new generator
private final AudioVolumeManager audioVolumeManager = new AudioVolumeManager(this);
public SoundManager() {
@@ -120,7 +118,9 @@ public class SoundManager {
logger.info("Playing background music: {}", ma.getFile().getName());
logger.info(
"Background music next in line: {}",
- backgroundMusicQueue.peek() != null ? backgroundMusicQueue.peek().getFile().getName() : null);
+ backgroundMusicQueue.peek() != null
+ ? backgroundMusicQueue.peek().getFile().getName()
+ : null);
}
private long playSound(String audioFileName, boolean loop)
@@ -149,10 +149,10 @@ public class SoundManager {
logger.debug("Playing sound: {}", asset.getFile().getName());
// Generate id for clip
- long clipId = idGenerator.nextId();
+ long clipId = new SnowflakeGenerator().nextId();
// store it so we can stop it later
- activeSoundEffects.put(clipId, clip); // TODO: Do on snowflake for specific sound to stop
+ activeSoundEffects.put(clipId, clip);
// remove when finished (only for non-looping sounds)
clip.addLineListener(
diff --git a/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java b/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java
index 9c313d1..d8ed2b9 100644
--- a/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java
+++ b/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java
@@ -45,8 +45,8 @@ public class NetworkingClientManager {
}
long startClientRequest(String ip, int port) {
- long connectionId = new SnowflakeGenerator().nextId(); // TODO: Maybe use the one generated
- try { // With EventFlow
+ long connectionId = new SnowflakeGenerator().nextId();
+ try {
NetworkingClient client =
new NetworkingClient(
() -> new NetworkingGameClientHandler(connectionId),
@@ -81,19 +81,13 @@ public class NetworkingClientManager {
void handleStartClient(NetworkEvents.StartClient event) {
long id = this.startClientRequest(event.ip(), event.port());
new Thread(
- () -> {
- try {
- Thread.sleep(100); // TODO: Is this a good idea?
+ () ->
new EventFlow()
.addPostEvent(
NetworkEvents.StartClientResponse.class,
id,
event.eventSnowflake())
- .asyncPostEvent();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- })
+ .asyncPostEvent())
.start();
}
@@ -185,7 +179,7 @@ public class NetworkingClientManager {
void handleCloseClient(NetworkEvents.CloseClient event) {
NetworkingClient client = this.networkClients.get(event.clientId());
- client.closeConnection(); // TODO: Check if not blocking, what if error, mb not remove?
+ client.closeConnection();
this.networkClients.remove(event.clientId());
logger.info("Client {} closed successfully.", event.clientId());
}
diff --git a/framework/src/main/java/org/toop/framework/networking/NetworkingGameClientHandler.java b/framework/src/main/java/org/toop/framework/networking/NetworkingGameClientHandler.java
index 4e04c56..8c97f60 100644
--- a/framework/src/main/java/org/toop/framework/networking/NetworkingGameClientHandler.java
+++ b/framework/src/main/java/org/toop/framework/networking/NetworkingGameClientHandler.java
@@ -74,7 +74,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter {
gameWinConditionHandler(recSrvRemoved);
return;
default:
- return;
+ // return
}
} else {
@@ -93,10 +93,10 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter {
helpHandler(recSrvRemoved);
return;
default:
- return;
+ // return
}
} else {
- return; // TODO: Should be an error.
+ logger.error("Could not parse: {}", rec);
}
}
}
diff --git a/framework/src/main/java/org/toop/framework/asset/ResourceLoader.java b/framework/src/main/java/org/toop/framework/resource/ResourceLoader.java
similarity index 86%
rename from framework/src/main/java/org/toop/framework/asset/ResourceLoader.java
rename to framework/src/main/java/org/toop/framework/resource/ResourceLoader.java
index 829b982..dcada62 100644
--- a/framework/src/main/java/org/toop/framework/asset/ResourceLoader.java
+++ b/framework/src/main/java/org/toop/framework/resource/ResourceLoader.java
@@ -1,4 +1,4 @@
-package org.toop.framework.asset;
+package org.toop.framework.resource;
import java.io.File;
import java.util.*;
@@ -9,12 +9,13 @@ import java.util.function.Function;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.reflections.Reflections;
-import org.toop.framework.asset.events.AssetLoaderEvents;
-import org.toop.framework.asset.resources.*;
-import org.toop.framework.asset.types.BundledResource;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.PreloadResource;
import org.toop.framework.eventbus.EventFlow;
+import org.toop.framework.resource.events.AssetLoaderEvents;
+import org.toop.framework.resource.exceptions.CouldNotCreateResourceFactoryException;
+import org.toop.framework.resource.resources.*;
+import org.toop.framework.resource.types.BundledResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.PreloadResource;
/**
* Responsible for loading assets from a file system directory into memory.
@@ -141,19 +142,24 @@ public class ResourceLoader {
}
/** Maps a file to a resource instance based on its extension and registered factories. */
- private T resourceMapper(File file, Class type) {
+ private T resourceMapper(File file)
+ throws CouldNotCreateResourceFactoryException, IllegalArgumentException {
String ext = getExtension(file.getName());
Function factory = registry.get(ext);
- if (factory == null) return null;
+ if (factory == null)
+ throw new CouldNotCreateResourceFactoryException(registry, file.getName());
BaseResource resource = factory.apply(file);
- if (!type.isInstance(resource)) {
+ if (resource == null) {
throw new IllegalArgumentException(
- "File " + file.getName() + " is not of type " + type.getSimpleName());
+ "File "
+ + file.getName()
+ + " is not of type "
+ + BaseResource.class.getSimpleName());
}
- return type.cast(resource);
+ return ((Class) BaseResource.class).cast(resource);
}
/** Loads the given list of files into assets, handling bundled and preload resources. */
@@ -162,7 +168,14 @@ public class ResourceLoader {
for (File file : files) {
boolean skipAdd = false;
- BaseResource resource = resourceMapper(file, BaseResource.class);
+ BaseResource resource = null;
+ try {
+ resource = resourceMapper(file);
+ } catch (CouldNotCreateResourceFactoryException _) {
+ logger.warn("Could not create resource for: {}", file);
+ } catch (IllegalArgumentException e) {
+ logger.error(e);
+ }
switch (resource) {
case null -> {
continue;
@@ -216,7 +229,7 @@ public class ResourceLoader {
* {@link FileExtension}.
*/
private void autoRegisterResources() {
- Reflections reflections = new Reflections("org.toop.framework.asset.resources");
+ Reflections reflections = new Reflections("org.toop.framework.resource.resources");
Set> classes = reflections.getSubTypesOf(BaseResource.class);
for (Class extends BaseResource> cls : classes) {
diff --git a/framework/src/main/java/org/toop/framework/asset/ResourceManager.java b/framework/src/main/java/org/toop/framework/resource/ResourceManager.java
similarity index 84%
rename from framework/src/main/java/org/toop/framework/asset/ResourceManager.java
rename to framework/src/main/java/org/toop/framework/resource/ResourceManager.java
index 404b2f5..8bc2d97 100644
--- a/framework/src/main/java/org/toop/framework/asset/ResourceManager.java
+++ b/framework/src/main/java/org/toop/framework/resource/ResourceManager.java
@@ -1,16 +1,15 @@
-package org.toop.framework.asset;
+package org.toop.framework.resource;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.toop.framework.asset.resources.*;
+import org.toop.framework.resource.exceptions.ResourceNotFoundException;
+import org.toop.framework.resource.resources.*;
/**
* Centralized manager for all loaded assets in the application.
*
- * {@code ResourceManager} maintains a thread-safe registry of {@link ResourceMeta} objects and provides
- * utility methods to retrieve assets by name, ID, or type. It works together with {@link
+ *
{@code ResourceManager} maintains a thread-safe registry of {@link ResourceMeta} objects and
+ * provides utility methods to retrieve assets by name, ID, or type. It works together with {@link
* ResourceLoader} to register assets automatically when they are loaded from the file system.
*
*
Key responsibilities:
@@ -49,7 +48,7 @@ import org.toop.framework.asset.resources.*;
*
*/
public class ResourceManager {
- private static final Logger logger = LogManager.getLogger(ResourceManager.class);
+ // private static final Logger logger = LogManager.getLogger(ResourceManager.class);
private static final Map> assets =
new ConcurrentHashMap<>();
@@ -61,7 +60,7 @@ public class ResourceManager {
* @param loader the loader that has already loaded assets
*/
public static synchronized void loadAssets(ResourceLoader loader) {
- for (var asset : loader.getAssets()) {
+ for (ResourceMeta extends BaseResource> asset : loader.getAssets()) {
assets.put(asset.getName(), asset);
}
}
@@ -77,12 +76,7 @@ public class ResourceManager {
public static T get(String name) {
ResourceMeta asset = (ResourceMeta) assets.get(name);
if (asset == null) {
- throw new TypeNotPresentException(
- name,
- new RuntimeException(
- String.format(
- "Type %s not present",
- name))); // TODO: Create own exception, BAM
+ throw new ResourceNotFoundException(name);
}
return asset.getResource();
}
diff --git a/framework/src/main/java/org/toop/framework/asset/ResourceMeta.java b/framework/src/main/java/org/toop/framework/resource/ResourceMeta.java
similarity index 85%
rename from framework/src/main/java/org/toop/framework/asset/ResourceMeta.java
rename to framework/src/main/java/org/toop/framework/resource/ResourceMeta.java
index 4632624..4312b84 100644
--- a/framework/src/main/java/org/toop/framework/asset/ResourceMeta.java
+++ b/framework/src/main/java/org/toop/framework/resource/ResourceMeta.java
@@ -1,7 +1,7 @@
-package org.toop.framework.asset;
+package org.toop.framework.resource;
import org.toop.framework.SnowflakeGenerator;
-import org.toop.framework.asset.resources.BaseResource;
+import org.toop.framework.resource.resources.BaseResource;
public class ResourceMeta {
private final Long id;
diff --git a/framework/src/main/java/org/toop/framework/asset/events/AssetLoaderEvents.java b/framework/src/main/java/org/toop/framework/resource/events/AssetLoaderEvents.java
similarity index 84%
rename from framework/src/main/java/org/toop/framework/asset/events/AssetLoaderEvents.java
rename to framework/src/main/java/org/toop/framework/resource/events/AssetLoaderEvents.java
index b19709c..04ef018 100644
--- a/framework/src/main/java/org/toop/framework/asset/events/AssetLoaderEvents.java
+++ b/framework/src/main/java/org/toop/framework/resource/events/AssetLoaderEvents.java
@@ -1,4 +1,4 @@
-package org.toop.framework.asset.events;
+package org.toop.framework.resource.events;
import org.toop.framework.eventbus.events.EventWithoutSnowflake;
diff --git a/framework/src/main/java/org/toop/framework/resource/exceptions/CouldNotCreateResourceFactoryException.java b/framework/src/main/java/org/toop/framework/resource/exceptions/CouldNotCreateResourceFactoryException.java
new file mode 100644
index 0000000..aa7b3c0
--- /dev/null
+++ b/framework/src/main/java/org/toop/framework/resource/exceptions/CouldNotCreateResourceFactoryException.java
@@ -0,0 +1,12 @@
+package org.toop.framework.resource.exceptions;
+
+import java.util.Map;
+
+public class CouldNotCreateResourceFactoryException extends RuntimeException {
+ public CouldNotCreateResourceFactoryException(Map, ?> registry, String fileName) {
+ super(
+ String.format(
+ "Could not create resource factory for: %s, isRegistryEmpty: %b",
+ fileName, registry.isEmpty()));
+ }
+}
diff --git a/framework/src/main/java/org/toop/framework/resource/exceptions/IsNotAResourceException.java b/framework/src/main/java/org/toop/framework/resource/exceptions/IsNotAResourceException.java
new file mode 100644
index 0000000..41abbde
--- /dev/null
+++ b/framework/src/main/java/org/toop/framework/resource/exceptions/IsNotAResourceException.java
@@ -0,0 +1,7 @@
+package org.toop.framework.resource.exceptions;
+
+public class IsNotAResourceException extends RuntimeException {
+ public IsNotAResourceException(Class clazz, String message) {
+ super(clazz.getName() + " does not implement BaseResource");
+ }
+}
diff --git a/framework/src/main/java/org/toop/framework/resource/exceptions/ResourceNotFoundException.java b/framework/src/main/java/org/toop/framework/resource/exceptions/ResourceNotFoundException.java
new file mode 100644
index 0000000..c75de1e
--- /dev/null
+++ b/framework/src/main/java/org/toop/framework/resource/exceptions/ResourceNotFoundException.java
@@ -0,0 +1,7 @@
+package org.toop.framework.resource.exceptions;
+
+public class ResourceNotFoundException extends RuntimeException {
+ public ResourceNotFoundException(String name) {
+ super("Could not find resource: " + name);
+ }
+}
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/BaseResource.java b/framework/src/main/java/org/toop/framework/resource/resources/BaseResource.java
similarity index 84%
rename from framework/src/main/java/org/toop/framework/asset/resources/BaseResource.java
rename to framework/src/main/java/org/toop/framework/resource/resources/BaseResource.java
index e913026..72da47c 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/BaseResource.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/BaseResource.java
@@ -1,4 +1,4 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.*;
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/CssAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/CssAsset.java
similarity index 73%
rename from framework/src/main/java/org/toop/framework/asset/resources/CssAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/CssAsset.java
index f0e6977..0d056ae 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/CssAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/CssAsset.java
@@ -1,7 +1,7 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.File;
-import org.toop.framework.asset.types.FileExtension;
+import org.toop.framework.resource.types.FileExtension;
@FileExtension({"css"})
public class CssAsset extends BaseResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/FontAsset.java
similarity index 91%
rename from framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/FontAsset.java
index e804ab0..da9c709 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/FontAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/FontAsset.java
@@ -1,11 +1,11 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javafx.scene.text.Font;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.PreloadResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.PreloadResource;
@FileExtension({"ttf", "otf"})
public class FontAsset extends BaseResource implements PreloadResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/ImageAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/ImageAsset.java
similarity index 86%
rename from framework/src/main/java/org/toop/framework/asset/resources/ImageAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/ImageAsset.java
index 27d6ef3..2e6b417 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/ImageAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/ImageAsset.java
@@ -1,10 +1,10 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.File;
import java.io.FileInputStream;
import javafx.scene.image.Image;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.LoadableResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.LoadableResource;
@FileExtension({"png", "jpg", "jpeg"})
public class ImageAsset extends BaseResource implements LoadableResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/JsonAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/JsonAsset.java
similarity index 93%
rename from framework/src/main/java/org/toop/framework/asset/resources/JsonAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/JsonAsset.java
index 9d9c516..c13849c 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/JsonAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/JsonAsset.java
@@ -1,4 +1,4 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -6,8 +6,8 @@ import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.LoadableResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.LoadableResource;
@FileExtension({"json"})
public class JsonAsset extends BaseResource implements LoadableResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/LocalizationAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/LocalizationAsset.java
similarity index 95%
rename from framework/src/main/java/org/toop/framework/asset/resources/LocalizationAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/LocalizationAsset.java
index 763f332..2bd2333 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/LocalizationAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/LocalizationAsset.java
@@ -1,11 +1,11 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
-import org.toop.framework.asset.types.BundledResource;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.LoadableResource;
+import org.toop.framework.resource.types.BundledResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.LoadableResource;
/**
* Represents a localization resource asset that loads and manages property files containing
@@ -38,7 +38,7 @@ public class LocalizationAsset extends BaseResource implements LoadableResource,
private final String baseName = "localization";
/** Fallback locale used when no matching locale is found. */
- private final Locale fallback = Locale.forLanguageTag("en_US");
+ private final Locale fallback = Locale.forLanguageTag("en");
/**
* Constructs a new LocalizationAsset for the specified file.
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/MusicAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java
similarity index 81%
rename from framework/src/main/java/org/toop/framework/asset/resources/MusicAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java
index 1d79c88..d60b6bc 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/MusicAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java
@@ -1,9 +1,9 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.*;
import javafx.scene.media.Media;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.LoadableResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.LoadableResource;
@FileExtension({"mp3"})
public class MusicAsset extends BaseResource implements LoadableResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/SettingsAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java
similarity index 97%
rename from framework/src/main/java/org/toop/framework/asset/resources/SettingsAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java
index d329d98..7728c9a 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/SettingsAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java
@@ -1,4 +1,4 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.File;
import java.util.Locale;
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/SoundEffectAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java
similarity index 93%
rename from framework/src/main/java/org/toop/framework/asset/resources/SoundEffectAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java
index b85951b..c55306a 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/SoundEffectAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java
@@ -1,10 +1,10 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.*;
import java.nio.file.Files;
import javax.sound.sampled.*;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.LoadableResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.LoadableResource;
@FileExtension({"wav"})
public class SoundEffectAsset extends BaseResource implements LoadableResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/resources/TextAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/TextAsset.java
similarity index 85%
rename from framework/src/main/java/org/toop/framework/asset/resources/TextAsset.java
rename to framework/src/main/java/org/toop/framework/resource/resources/TextAsset.java
index 88c9c33..9d91405 100644
--- a/framework/src/main/java/org/toop/framework/asset/resources/TextAsset.java
+++ b/framework/src/main/java/org/toop/framework/resource/resources/TextAsset.java
@@ -1,11 +1,11 @@
-package org.toop.framework.asset.resources;
+package org.toop.framework.resource.resources;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import org.toop.framework.asset.types.FileExtension;
-import org.toop.framework.asset.types.LoadableResource;
+import org.toop.framework.resource.types.FileExtension;
+import org.toop.framework.resource.types.LoadableResource;
@FileExtension({"txt", "json", "xml"})
public class TextAsset extends BaseResource implements LoadableResource {
diff --git a/framework/src/main/java/org/toop/framework/asset/types/BundledResource.java b/framework/src/main/java/org/toop/framework/resource/types/BundledResource.java
similarity index 95%
rename from framework/src/main/java/org/toop/framework/asset/types/BundledResource.java
rename to framework/src/main/java/org/toop/framework/resource/types/BundledResource.java
index a243188..ca63407 100644
--- a/framework/src/main/java/org/toop/framework/asset/types/BundledResource.java
+++ b/framework/src/main/java/org/toop/framework/resource/types/BundledResource.java
@@ -1,7 +1,7 @@
-package org.toop.framework.asset.types;
+package org.toop.framework.resource.types;
import java.io.File;
-import org.toop.framework.asset.ResourceLoader;
+import org.toop.framework.resource.ResourceLoader;
/**
* Represents a resource that can be composed of multiple files, or "bundled" together under a
diff --git a/framework/src/main/java/org/toop/framework/asset/types/FileExtension.java b/framework/src/main/java/org/toop/framework/resource/types/FileExtension.java
similarity index 89%
rename from framework/src/main/java/org/toop/framework/asset/types/FileExtension.java
rename to framework/src/main/java/org/toop/framework/resource/types/FileExtension.java
index ab70275..df30efd 100644
--- a/framework/src/main/java/org/toop/framework/asset/types/FileExtension.java
+++ b/framework/src/main/java/org/toop/framework/resource/types/FileExtension.java
@@ -1,11 +1,11 @@
-package org.toop.framework.asset.types;
+package org.toop.framework.resource.types;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.toop.framework.asset.ResourceLoader;
-import org.toop.framework.asset.resources.BaseResource;
+import org.toop.framework.resource.ResourceLoader;
+import org.toop.framework.resource.resources.BaseResource;
/**
* Annotation to declare which file extensions a {@link BaseResource} subclass can handle.
diff --git a/framework/src/main/java/org/toop/framework/asset/types/LoadableResource.java b/framework/src/main/java/org/toop/framework/resource/types/LoadableResource.java
similarity index 95%
rename from framework/src/main/java/org/toop/framework/asset/types/LoadableResource.java
rename to framework/src/main/java/org/toop/framework/resource/types/LoadableResource.java
index d43f9c0..32fb0bc 100644
--- a/framework/src/main/java/org/toop/framework/asset/types/LoadableResource.java
+++ b/framework/src/main/java/org/toop/framework/resource/types/LoadableResource.java
@@ -1,6 +1,6 @@
-package org.toop.framework.asset.types;
+package org.toop.framework.resource.types;
-import org.toop.framework.asset.ResourceLoader;
+import org.toop.framework.resource.ResourceLoader;
/**
* Represents a resource that can be explicitly loaded and unloaded.
diff --git a/framework/src/main/java/org/toop/framework/asset/types/PreloadResource.java b/framework/src/main/java/org/toop/framework/resource/types/PreloadResource.java
similarity index 92%
rename from framework/src/main/java/org/toop/framework/asset/types/PreloadResource.java
rename to framework/src/main/java/org/toop/framework/resource/types/PreloadResource.java
index bf4fafd..28f8734 100644
--- a/framework/src/main/java/org/toop/framework/asset/types/PreloadResource.java
+++ b/framework/src/main/java/org/toop/framework/resource/types/PreloadResource.java
@@ -1,6 +1,6 @@
-package org.toop.framework.asset.types;
+package org.toop.framework.resource.types;
-import org.toop.framework.asset.ResourceLoader;
+import org.toop.framework.resource.ResourceLoader;
/**
* Marker interface for resources that should be **automatically loaded** by the {@link