// Path: src/main/java/org/pdfsam/eventstudio/util/RequireUtils.java
// public static void requireNotNull(Object victim) {
//     if (victim == null) {
//         throw new IllegalArgumentException("The input object cannot be null");
//     }
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/util/StringUtils.java
// public static String defaultString(String input, String defaultValue) {
//     return StringUtils.isBlank(input) ? defaultValue : input;
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/Annotations.java
// static class ReflectiveListenerDescriptor {
// 
//     private final EventListener listenerAnnotation;
//     private final Method method;
// 
//     public ReflectiveListenerDescriptor(EventListener listenerAnnotation, Method method) {
//         this.listenerAnnotation = listenerAnnotation;
//         this.method = method;
//     }
// 
//     public EventListener getListenerAnnotation() {
//         return listenerAnnotation;
//     }
// 
//     public Method getMethod() {
//         return method;
//     }
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/Annotations.java
// static class ReflectiveMetadata {
//     private String station;
//     private final Map<String, List<ReflectiveListenerDescriptor>> descriptors = new HashMap<>();
// 
//     private void put(String station, ReflectiveListenerDescriptor descriptor) {
//         List<ReflectiveListenerDescriptor> current = descriptors.computeIfAbsent(station, k -> new ArrayList<>());
//         current.add(descriptor);
//     }
// 
//     public String getStation() {
//         return station;
//     }
// 
//     public Map<String, List<ReflectiveListenerDescriptor>> getDescriptors() {
//         return descriptors;
//     }
// 
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/exception/EventStudioException.java
// public class EventStudioException extends RuntimeException {
// 
//     public EventStudioException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public EventStudioException(String message) {
//         super(message);
//     }
// 
//     public EventStudioException(Throwable cause) {
//         super(cause);
//     }
// 
// }


import static org.pdfsam.eventstudio.util.RequireUtils.requireNotNull;
import static org.pdfsam.eventstudio.util.StringUtils.defaultString;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map.Entry;
import org.pdfsam.eventstudio.Annotations.ReflectiveListenerDescriptor;
import org.pdfsam.eventstudio.Annotations.ReflectiveMetadata;
import org.pdfsam.eventstudio.exception.EventStudioException;
     * Adds a {@link Listener} to the hidden station, hiding the station abstraction.
     * 
     * @see EventStudio#add(Listener, String)
     * @see DefaultEventStudio#HIDDEN_STATION
     */
    public <T> void add(Listener<T> listener) {
        add(listener, HIDDEN_STATION);
    }

    /**
     * Adds a {@link Listener} to the hidden station listening for the given event class, hiding the station abstraction.
     * 
     * @see EventStudio#add(Class, Listener, String)
     * @see DefaultEventStudio#HIDDEN_STATION
     */
    public <T> void add(Class<T> eventClass, Listener<T> listener) {
        add(eventClass, listener, HIDDEN_STATION);
    }

    /**
     * Adds a {@link Supervisor} to the hidden station, hiding the station abstraction.
     * 
     * @see EventStudio#supervisor(Supervisor, String)
     * @see DefaultEventStudio#HIDDEN_STATION
     */
    public void supervisor(Supervisor supervisor) {
        supervisor(supervisor, HIDDEN_STATION);
    }

    public void supervisor(Supervisor supervisor, String station) {
// Path: src/main/java/org/pdfsam/eventstudio/util/RequireUtils.java
// public static void requireNotNull(Object victim) {
//     if (victim == null) {
//         throw new IllegalArgumentException("The input object cannot be null");
//     }
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/util/StringUtils.java
// public static String defaultString(String input, String defaultValue) {
//     return StringUtils.isBlank(input) ? defaultValue : input;
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/Annotations.java
// static class ReflectiveListenerDescriptor {
// 
//     private final EventListener listenerAnnotation;
//     private final Method method;
// 
//     public ReflectiveListenerDescriptor(EventListener listenerAnnotation, Method method) {
//         this.listenerAnnotation = listenerAnnotation;
//         this.method = method;
//     }
// 
//     public EventListener getListenerAnnotation() {
//         return listenerAnnotation;
//     }
// 
//     public Method getMethod() {
//         return method;
//     }
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/Annotations.java
// static class ReflectiveMetadata {
//     private String station;
//     private final Map<String, List<ReflectiveListenerDescriptor>> descriptors = new HashMap<>();
// 
//     private void put(String station, ReflectiveListenerDescriptor descriptor) {
//         List<ReflectiveListenerDescriptor> current = descriptors.computeIfAbsent(station, k -> new ArrayList<>());
//         current.add(descriptor);
//     }
// 
//     public String getStation() {
//         return station;
//     }
// 
//     public Map<String, List<ReflectiveListenerDescriptor>> getDescriptors() {
//         return descriptors;
//     }
// 
// }
// 
// Path: src/main/java/org/pdfsam/eventstudio/exception/EventStudioException.java
// public class EventStudioException extends RuntimeException {
// 
//     public EventStudioException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public EventStudioException(String message) {
//         super(message);
//     }
// 
//     public EventStudioException(Throwable cause) {
//         super(cause);
//     }
// 
// }


// Path: src/main/java/org/pdfsam/eventstudio/DefaultEventStudio.java
import static org.pdfsam.eventstudio.util.RequireUtils.requireNotNull;
import static org.pdfsam.eventstudio.util.StringUtils.defaultString;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map.Entry;
import org.pdfsam.eventstudio.Annotations.ReflectiveListenerDescriptor;
import org.pdfsam.eventstudio.Annotations.ReflectiveMetadata;
import org.pdfsam.eventstudio.exception.EventStudioException;

     * Adds a {@link Listener} to the hidden station, hiding the station abstraction.
     * 
     * @see EventStudio#add(Listener, String)
     * @see DefaultEventStudio#HIDDEN_STATION
     */
    public <T> void add(Listener<T> listener) {
        add(listener, HIDDEN_STATION);
    }

    /**
     * Adds a {@link Listener} to the hidden station listening for the given event class, hiding the station abstraction.
     * 
     * @see EventStudio#add(Class, Listener, String)
     * @see DefaultEventStudio#HIDDEN_STATION
     */
    public <T> void add(Class<T> eventClass, Listener<T> listener) {
        add(eventClass, listener, HIDDEN_STATION);
    }

    /**
     * Adds a {@link Supervisor} to the hidden station, hiding the station abstraction.
     * 
     * @see EventStudio#supervisor(Supervisor, String)
     * @see DefaultEventStudio#HIDDEN_STATION
     */
    public void supervisor(Supervisor supervisor) {
        supervisor(supervisor, HIDDEN_STATION);
    }

    public void supervisor(Supervisor supervisor, String station) {
        requireNotNull(supervisor);