001
014
015 package com.liferay.portal.repository.registry;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.repository.event.RepositoryEventListener;
019 import com.liferay.portal.kernel.repository.event.RepositoryEventTrigger;
020 import com.liferay.portal.kernel.repository.event.RepositoryEventType;
021 import com.liferay.portal.kernel.repository.registry.RepositoryEventRegistry;
022 import com.liferay.portal.kernel.util.Tuple;
023
024 import java.util.ArrayList;
025 import java.util.Collection;
026 import java.util.HashMap;
027 import java.util.Map;
028
029
032 public class DefaultRepositoryEventRegistry
033 implements RepositoryEventRegistry, RepositoryEventTrigger {
034
035 public DefaultRepositoryEventRegistry(
036 RepositoryEventTrigger parentRepositoryEventTrigger) {
037
038 _parentRepositoryEventTrigger = parentRepositoryEventTrigger;
039 }
040
041 @Override
042 public <S extends RepositoryEventType, T>
043 void registerRepositoryEventListener(
044 Class<S> repositoryEventTypeClass, Class<T> modelClass,
045 RepositoryEventListener<S, T> repositoryEventListener) {
046
047 if (repositoryEventListener == null) {
048 throw new NullPointerException("Repository event listener is null");
049 }
050
051 Tuple key = new Tuple(repositoryEventTypeClass, modelClass);
052
053 Collection<RepositoryEventListener<?, ?>> repositoryEventListeners =
054 _repositoryEventListeners.get(key);
055
056 if (repositoryEventListeners == null) {
057 repositoryEventListeners = new ArrayList<>();
058
059 _repositoryEventListeners.put(key, repositoryEventListeners);
060 }
061
062 repositoryEventListeners.add(repositoryEventListener);
063 }
064
065 @Override
066 public <S extends RepositoryEventType, T> void trigger(
067 Class<S> repositoryEventTypeClass, Class<T> modelClass, T model)
068 throws PortalException {
069
070 if (_parentRepositoryEventTrigger != null) {
071 _parentRepositoryEventTrigger.trigger(
072 repositoryEventTypeClass, modelClass, model);
073 }
074
075 Tuple key = new Tuple(repositoryEventTypeClass, modelClass);
076
077 @SuppressWarnings("rawtypes")
078 Collection<RepositoryEventListener<S, T>> repositoryEventListeners =
079 (Collection)_repositoryEventListeners.get(key);
080
081 if (repositoryEventListeners != null) {
082 for (RepositoryEventListener<S, T> repositoryEventListener :
083 repositoryEventListeners) {
084
085 repositoryEventListener.execute(model);
086 }
087 }
088 }
089
090 private final RepositoryEventTrigger _parentRepositoryEventTrigger;
091 private final Map<Tuple, Collection<RepositoryEventListener<?, ?>>>
092 _repositoryEventListeners = new HashMap<>();
093
094 }