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.LocalRepository;
019 import com.liferay.portal.kernel.repository.Repository;
020 import com.liferay.portal.kernel.repository.RepositoryFactory;
021 import com.liferay.portal.kernel.repository.event.RepositoryEventListener;
022 import com.liferay.portal.kernel.repository.event.RepositoryEventTrigger;
023 import com.liferay.portal.kernel.repository.event.RepositoryEventType;
024 import com.liferay.portal.kernel.repository.registry.RepositoryDefiner;
025 import com.liferay.portal.kernel.repository.registry.RepositoryEventRegistry;
026 import com.liferay.portal.kernel.repository.registry.RepositoryFactoryRegistry;
027 import com.liferay.portal.kernel.util.Tuple;
028 import com.liferay.portal.repository.capabilities.CapabilityLocalRepository;
029 import com.liferay.portal.repository.capabilities.CapabilityRepository;
030
031 import java.util.ArrayList;
032 import java.util.Collection;
033 import java.util.HashMap;
034 import java.util.Map;
035
036
039 public class RepositoryClassDefinition
040 implements RepositoryEventRegistry, RepositoryEventTrigger,
041 RepositoryFactoryRegistry {
042
043 public RepositoryClassDefinition(RepositoryDefiner repositoryDefiner) {
044 _repositoryDefiner = repositoryDefiner;
045 }
046
047 public CapabilityLocalRepository createCapabilityLocalRepository(
048 long repositoryId)
049 throws PortalException {
050
051 LocalRepository localRepository =
052 _repositoryFactory.createLocalRepository(repositoryId);
053
054 CapabilityLocalRepository capabilityLocalRepository =
055 new CapabilityLocalRepository(localRepository, this);
056
057 _repositoryDefiner.registerCapabilities(capabilityLocalRepository);
058
059 return capabilityLocalRepository;
060 }
061
062 public CapabilityRepository createCapabilityRepository(long repositoryId)
063 throws PortalException {
064
065 Repository repository = _repositoryFactory.createRepository(
066 repositoryId);
067
068 CapabilityRepository capabilityRepository = new CapabilityRepository(
069 repository, this);
070
071 _repositoryDefiner.registerCapabilities(capabilityRepository);
072
073 return capabilityRepository;
074 }
075
076 public RepositoryEventTrigger getRepositoryEventTrigger() {
077 return this;
078 }
079
080 public RepositoryFactory getRepositoryFactory() {
081 return _repositoryFactory;
082 }
083
084 @Override
085 public <S extends RepositoryEventType, T>
086 void registerRepositoryEventListener(
087 Class<S> repositoryEventTypeClass, Class<T> modelClass,
088 RepositoryEventListener<S, T> repositoryEventListener) {
089
090 Tuple key = new Tuple(repositoryEventTypeClass, modelClass);
091
092 Collection<RepositoryEventListener<?, ?>> repositoryEventListeners =
093 _repositoryEventListeners.get(key);
094
095 if (repositoryEventListeners == null) {
096 repositoryEventListeners =
097 new ArrayList<RepositoryEventListener<?, ?>>();
098
099 _repositoryEventListeners.put(key, repositoryEventListeners);
100 }
101
102 repositoryEventListeners.add(repositoryEventListener);
103 }
104
105 @Override
106 public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
107 if (_repositoryFactory != null) {
108 throw new IllegalStateException(
109 "Repository factory already exists");
110 }
111
112 _repositoryFactory = repositoryFactory;
113 }
114
115 @Override
116 public <S extends RepositoryEventType, T> void trigger(
117 Class<S> repositoryEventTypeClass, Class<T> modelClass, T payload)
118 throws PortalException {
119
120 Tuple key = new Tuple(repositoryEventTypeClass, modelClass);
121
122 @SuppressWarnings("rawtypes")
123 Collection<RepositoryEventListener<S, T>> repositoryEventListeners =
124 (Collection)_repositoryEventListeners.get(key);
125
126 if (repositoryEventListeners != null) {
127 for (RepositoryEventListener<S, T> repositoryEventListener :
128 repositoryEventListeners) {
129
130 repositoryEventListener.execute(payload);
131 }
132 }
133 }
134
135 private final RepositoryDefiner _repositoryDefiner;
136 private final Map<Tuple, Collection<RepositoryEventListener<?, ?>>>
137 _repositoryEventListeners =
138 new HashMap<Tuple, Collection<RepositoryEventListener<?, ?>>>();
139 private RepositoryFactory _repositoryFactory;
140
141 }