diff --git a/src/main/java/com/mediamanager/service/delegate/ServiceLocator.java b/src/main/java/com/mediamanager/service/delegate/ServiceLocator.java new file mode 100644 index 0000000..69886f4 --- /dev/null +++ b/src/main/java/com/mediamanager/service/delegate/ServiceLocator.java @@ -0,0 +1,45 @@ +package com.mediamanager.service.delegate; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.HashMap; +import java.util.Map; + +public class ServiceLocator { + private static final Logger logger = LogManager.getLogger(ServiceLocator.class); + private final Map, Object> services = new HashMap<>(); + + public void register(Class serviceClass, T serviceInstance) { + if (serviceInstance == null) { + throw new IllegalArgumentException("Service instance cannot be null"); + } + services.put(serviceClass, serviceInstance); + logger.debug("Registered service: {} -> {}", + serviceClass.getSimpleName(), + serviceInstance.getClass().getSimpleName()); + } + + @SuppressWarnings("unchecked") + public T get(Class serviceClass) { + return (T) services.get(serviceClass); + } + + public boolean has(Class serviceClass) { + return services.containsKey(serviceClass); + } + public int size() { + return services.size(); + } + public void logRegisteredServices() { + logger.info("Registered services: {}", services.size()); + + + services.forEach((clazz, instance) -> + logger.info(" - {} -> {}", + clazz.getSimpleName(), + instance.getClass().getSimpleName()) + ); + } +} + diff --git a/src/main/java/com/mediamanager/service/delegate/annotation/Action.java b/src/main/java/com/mediamanager/service/delegate/annotation/Action.java new file mode 100644 index 0000000..cac0db7 --- /dev/null +++ b/src/main/java/com/mediamanager/service/delegate/annotation/Action.java @@ -0,0 +1,13 @@ +package com.mediamanager.service.delegate.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface Action { + + String value(); +} diff --git a/src/main/java/com/mediamanager/service/delegate/handler/CloseHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/CloseHandler.java index de59bf3..9e9c658 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/CloseHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/CloseHandler.java @@ -6,9 +6,11 @@ import com.mediamanager.protocol.TestProtocol.CloseCommand; import com.mediamanager.protocol.TestProtocol.CloseResponse; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +@Action("close") public class CloseHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(CloseHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/EchoHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/EchoHandler.java index 1e7ece9..657c2e7 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/EchoHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/EchoHandler.java @@ -6,9 +6,11 @@ import com.mediamanager.protocol.TestProtocol.EchoCommand; // ← Import import com.mediamanager.protocol.TestProtocol.EchoResponse; // ← Import import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +@Action("echo") public class EchoHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(EchoHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/HeartbeatHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/HeartbeatHandler.java index 20e3d6d..d79270c 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/HeartbeatHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/HeartbeatHandler.java @@ -6,9 +6,11 @@ import com.mediamanager.protocol.TestProtocol.HeartbeatCommand; import com.mediamanager.protocol.TestProtocol.HeartbeatResponse; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +@Action("heartbeat") public class HeartbeatHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(HeartbeatHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/genre/CreateGenreHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/genre/CreateGenreHandler.java index 93b530a..569b119 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/genre/CreateGenreHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/genre/CreateGenreHandler.java @@ -7,10 +7,12 @@ import com.mediamanager.model.Genre; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.protocol.messages.GenreMessages; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import com.mediamanager.service.genre.GenreService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +@Action("genre.create") public class CreateGenreHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(CreateGenreHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/genre/DeleteGenreHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/genre/DeleteGenreHandler.java index 61f90df..bffdb1e 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/genre/DeleteGenreHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/genre/DeleteGenreHandler.java @@ -5,10 +5,12 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.protocol.messages.GenreMessages; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import com.mediamanager.service.genre.GenreService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +@Action("genre.delete") public class DeleteGenreHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(DeleteGenreHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreByIdHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreByIdHandler.java index 77ce9e3..9dfb2db 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreByIdHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreByIdHandler.java @@ -7,12 +7,14 @@ import com.mediamanager.model.Genre; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.protocol.messages.GenreMessages; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import com.mediamanager.service.genre.GenreService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.Optional; +@Action( "genre.getById") public class GetGenreByIdHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(GetGenreByIdHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreHandler.java index 1cb3c94..068b44c 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/genre/GetGenreHandler.java @@ -7,12 +7,14 @@ import com.mediamanager.model.Genre; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.protocol.messages.GenreMessages; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import com.mediamanager.service.genre.GenreService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.List; +@Action("genre.getAll") public class GetGenreHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(GetGenreHandler.class); diff --git a/src/main/java/com/mediamanager/service/delegate/handler/genre/UpdateGenreHandler.java b/src/main/java/com/mediamanager/service/delegate/handler/genre/UpdateGenreHandler.java index 919f50c..d0b54d1 100644 --- a/src/main/java/com/mediamanager/service/delegate/handler/genre/UpdateGenreHandler.java +++ b/src/main/java/com/mediamanager/service/delegate/handler/genre/UpdateGenreHandler.java @@ -7,12 +7,14 @@ import com.mediamanager.model.Genre; import com.mediamanager.protocol.TransportProtocol; import com.mediamanager.protocol.messages.GenreMessages; import com.mediamanager.service.delegate.ActionHandler; +import com.mediamanager.service.delegate.annotation.Action; import com.mediamanager.service.genre.GenreService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.Optional; +@Action("genre.update") public class UpdateGenreHandler implements ActionHandler { private static final Logger logger = LogManager.getLogger(UpdateGenreHandler.class);