/*
* Copyright 2008-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.griffon.runtime.core.event;
import griffon.core.CallableWithArgs;
import griffon.core.RunnableWithArgs;
import griffon.core.event.Event;
import griffon.core.event.EventPublisher;
import griffon.core.event.EventRouter;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static griffon.util.GriffonNameUtils.requireNonBlank;
import static java.util.Objects.requireNonNull;
/**
* @author Andres Almiray
* @since 2.0.0
*/
public abstract class AbstractEventPublisher implements EventPublisher {
private static final String ERROR_EVENT_NAME_BLANK = "Argument 'eventName' must not be blank";
private static final String ERROR_LISTENER_NULL = "Argument 'listener' must not be null";
private static final String ERROR_EVENT_CLASS_NULL = "Argument 'eventClass' must not be null";
private static final String ERROR_EVENT_NULL = "Argument 'event' must not be null";
private EventRouter eventRouter;
@Inject
public void setEventRouter(@Nonnull EventRouter eventRouter) {
this.eventRouter = requireNonNull(eventRouter, "Argument 'eventRouter' must not be null");
}
@Override
public boolean isEventPublishingEnabled() {
return eventRouter.isEventPublishingEnabled();
}
@Override
public void setEventPublishingEnabled(boolean enabled) {
eventRouter.setEventPublishingEnabled(enabled);
}
@Override
public <E extends Event> void removeEventListener(@Nonnull Class<E> eventClass, @Nonnull CallableWithArgs<?> listener) {
requireNonNull(eventClass, ERROR_EVENT_CLASS_NULL);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.removeEventListener(eventClass, listener);
}
@Override
public <E extends Event> void removeEventListener(@Nonnull Class<E> eventClass, @Nonnull RunnableWithArgs listener) {
requireNonNull(eventClass, ERROR_EVENT_CLASS_NULL);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.removeEventListener(eventClass, listener);
}
@Override
public void addEventListener(@Nonnull Object listener) {
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.addEventListener(listener);
}
@Override
public void addEventListener(@Nonnull String eventName, @Nonnull CallableWithArgs<?> listener) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.addEventListener(eventName, listener);
}
@Override
public void addEventListener(@Nonnull String eventName, @Nonnull RunnableWithArgs listener) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.addEventListener(eventName, listener);
}
@Override
public void publishEvent(@Nonnull String eventName) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
eventRouter.publishEvent(eventName);
}
@Override
public void publishEventOutsideUI(@Nonnull Event event) {
requireNonNull(event, ERROR_EVENT_NULL);
eventRouter.publishEventOutsideUI(event);
}
@Override
public void removeEventListener(@Nonnull Map<String, Object> listener) {
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.removeEventListener(listener);
}
@Override
public <E extends Event> void addEventListener(@Nonnull Class<E> eventClass, @Nonnull CallableWithArgs<?> listener) {
requireNonNull(eventClass, ERROR_EVENT_CLASS_NULL);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.addEventListener(eventClass, listener);
}
@Override
public <E extends Event> void addEventListener(@Nonnull Class<E> eventClass, @Nonnull RunnableWithArgs listener) {
requireNonNull(eventClass, ERROR_EVENT_CLASS_NULL);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.addEventListener(eventClass, listener);
}
@Override
public void publishEventOutsideUI(@Nonnull String eventName) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
eventRouter.publishEventOutsideUI(eventName);
}
@Override
public void publishEventOutsideUI(@Nonnull String eventName, @Nullable List<?> params) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
eventRouter.publishEventOutsideUI(eventName, params);
}
@Override
public void publishEvent(@Nonnull String eventName, @Nullable List<?> params) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
eventRouter.publishEvent(eventName, params);
}
@Override
public void publishEventAsync(@Nonnull String eventName, @Nullable List<?> params) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
eventRouter.publishEventAsync(eventName, params);
}
@Override
public void removeEventListener(@Nonnull String eventName, @Nonnull CallableWithArgs<?> listener) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.removeEventListener(eventName, listener);
}
@Override
public void removeEventListener(@Nonnull String eventName, @Nonnull RunnableWithArgs listener) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.removeEventListener(eventName, listener);
}
@Override
public void removeEventListener(@Nonnull Object listener) {
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.removeEventListener(listener);
}
@Override
public void addEventListener(@Nonnull Map<String, Object> listener) {
requireNonNull(listener, ERROR_LISTENER_NULL);
eventRouter.addEventListener(listener);
}
@Override
public void publishEvent(@Nonnull Event event) {
requireNonNull(event, ERROR_EVENT_NULL);
eventRouter.publishEvent(event);
}
@Override
public void publishEventAsync(@Nonnull String eventName) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
eventRouter.publishEventAsync(eventName);
}
@Override
public void publishEventAsync(@Nonnull Event event) {
requireNonNull(event, ERROR_EVENT_NULL);
eventRouter.publishEventAsync(event);
}
@Nonnull
@Override
public Collection<Object> getEventListeners() {
return eventRouter.getEventListeners();
}
@Nonnull
@Override
public Collection<Object> getEventListeners(@Nonnull String eventName) {
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
requireNonBlank(eventName, ERROR_EVENT_NAME_BLANK);
return eventRouter.getEventListeners(eventName);
}
}