Add `@Action` annotation and `ServiceLocator` for improved handler registration

- Introduce `@Action` annotation to simplify action handler identification and tagging.
- Add `ServiceLocator` for dynamic service registration and retrieval.
- Annotate handlers (`CreateGenreHandler`, `GetGenreHandler`, `UpdateGenreHandler`, `DeleteGenreHandler`, etc.) with corresponding actions.
This commit is contained in:
Gustavo Henrique Santos Souza de Miranda 2025-11-29 07:54:46 -03:00
parent 9c3a1126a7
commit b715bb1bd3
10 changed files with 74 additions and 0 deletions

View File

@ -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<Class<?>, Object> services = new HashMap<>();
public <T> void register(Class<T> 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> T get(Class<T> 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())
);
}
}

View File

@ -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();
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);