/* * Copyright 2011 Future Systems, Inc. * * 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.krakenapps.dom.api; import java.util.Collection; import java.util.concurrent.CopyOnWriteArraySet; import org.krakenapps.confdb.ConfigTransaction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DefaultEntityEventProvider<T> implements EntityEventProvider<T> { private final Logger logger = LoggerFactory.getLogger(DefaultEntityEventProvider.class); private CopyOnWriteArraySet<EntityEventListener<T>> listeners = new CopyOnWriteArraySet<EntityEventListener<T>>(); @Override public void addEntityEventListener(EntityEventListener<T> listener) { if (listener == null) { logger.warn("kraken dom: listener is null at subscribe()"); return; } listeners.add(listener); } @Override public void removeEntityEventListener(EntityEventListener<T> listener) { if (listener == null) { logger.warn("kraken dom: listener is null at unsubscribe()"); return; } listeners.remove(listener); } public void fireEntityAdded(String domain, T t) { fireEntityAdded(domain, t, null); } public void fireEntityAdded(String domain, T t, Object state) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { try { listener.entityAdded(domain, t, state); } catch (Throwable e) { logger.warn("kraken dom: entity event callback should not throw any exception", e); } } } } public void fireEntityAdding(String domain, T t){ fireEntityAdding(domain, t, null); } public void fireEntityAdding(String domain, T t, Object state){ for (EntityEventListener<T> listener : listeners) { if (listener != null) { listener.entityAdding(domain, t, state); } } } public void fireEntitiesAdding(String domain, Collection<EntityState> entities) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { listener.entitiesAdding(domain, entities); } } } public void fireEntitiesAdded(String domain, Collection<EntityState> entities) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { try { listener.entitiesAdded(domain, entities); } catch (Throwable e) { logger.warn("kraken dom: entity event callback should not throw any exception", e); } } } } public void fireEntityUpdated(String domain, T t) { fireEntityUpdated(domain, t, null); } public void fireEntityUpdated(String domain, T t, Object state) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { try { listener.entityUpdated(domain, t, state); } catch (Throwable e) { logger.warn("kraken dom: entity event callback should not throw any exception", e); } } } } public void fireEntitiesUpdated(String domain, Collection<EntityState> entities) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { try { listener.entitiesUpdated(domain, entities); } catch (Throwable e) { logger.warn("kraken dom: entity event callback should not throw any exception", e); } } } } public void fireEntityRemoving(String domain, T t) { fireEntityRemoving(domain, t, null, null); } public void fireEntityRemoving(String domain, T t, ConfigTransaction xact, Object state) { // DO NOT add try-catch. it's intentional exception throwing for (EntityEventListener<T> listener : listeners) { if (listener != null) { listener.entityRemoving(domain, t, xact, state); } } } public void fireEntitiesRemoving(String domain, Collection<EntityState> entities, ConfigTransaction xact) { // DO NOT add try-catch. it's intentional exception throwing for (EntityEventListener<T> listener : listeners) { if (listener != null) { listener.entitiesRemoving(domain, entities, xact); } } } public void fireEntityRemoved(String domain, T t) { fireEntityRemoved(domain, t, null); } public void fireEntityRemoved(String domain, T t, Object state) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { try { listener.entityRemoved(domain, t, state); } catch (Throwable e) { logger.warn("kraken dom: entity event callback should not throw any exception", e); } } } } public void fireEntitiesRemoved(String domain, Collection<EntityState> entities) { for (EntityEventListener<T> listener : listeners) { if (listener != null) { try { listener.entitiesRemoved(domain, entities); } catch (Throwable e) { logger.warn("kraken dom: entity event callback should not throw any exception", e); } } } } }