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.DocumentRepository;
019 import com.liferay.portal.kernel.repository.LocalRepository;
020 import com.liferay.portal.kernel.repository.Repository;
021 import com.liferay.portal.kernel.repository.RepositoryConfiguration;
022 import com.liferay.portal.kernel.repository.RepositoryFactory;
023 import com.liferay.portal.kernel.repository.capabilities.ConfigurationCapability;
024 import com.liferay.portal.kernel.repository.capabilities.RepositoryEventTriggerCapability;
025 import com.liferay.portal.kernel.repository.event.RepositoryEventTrigger;
026 import com.liferay.portal.kernel.repository.registry.RepositoryDefiner;
027 import com.liferay.portal.kernel.repository.registry.RepositoryFactoryRegistry;
028 import com.liferay.portal.repository.InitializedLocalRepository;
029 import com.liferay.portal.repository.InitializedRepository;
030 import com.liferay.portal.repository.capabilities.CapabilityLocalRepository;
031 import com.liferay.portal.repository.capabilities.CapabilityRepository;
032 import com.liferay.portal.repository.capabilities.ConfigurationCapabilityImpl;
033 import com.liferay.portal.repository.capabilities.LiferayRepositoryEventTriggerCapability;
034
035 import java.util.Locale;
036
037
040 public class RepositoryClassDefinition
041 implements RepositoryConfiguration, RepositoryFactory,
042 RepositoryFactoryRegistry {
043
044 public static final RepositoryClassDefinition fromRepositoryDefiner(
045 RepositoryDefiner repositoryDefiner) {
046
047 DefaultRepositoryEventRegistry defaultRepositoryEventRegistry =
048 new DefaultRepositoryEventRegistry(null);
049
050 RepositoryClassDefinition repositoryClassDefinition =
051 new RepositoryClassDefinition(
052 repositoryDefiner, defaultRepositoryEventRegistry);
053
054 repositoryDefiner.registerRepositoryFactory(repositoryClassDefinition);
055 repositoryDefiner.registerRepositoryEventListeners(
056 defaultRepositoryEventRegistry);
057
058 return repositoryClassDefinition;
059 }
060
061 @Override
062 public LocalRepository createLocalRepository(long repositoryId)
063 throws PortalException {
064
065 InitializedLocalRepository initializedLocalRepository =
066 new InitializedLocalRepository();
067
068 DefaultCapabilityRegistry defaultCapabilityRegistry =
069 new DefaultCapabilityRegistry(initializedLocalRepository);
070
071 _repositoryDefiner.registerCapabilities(defaultCapabilityRegistry);
072
073 DefaultRepositoryEventRegistry defaultRepositoryEventRegistry =
074 new DefaultRepositoryEventRegistry(_rootRepositoryEventTrigger);
075
076 setUpCommonCapabilities(
077 initializedLocalRepository, defaultCapabilityRegistry,
078 defaultRepositoryEventRegistry);
079
080 defaultCapabilityRegistry.registerCapabilityRepositoryEvents(
081 defaultRepositoryEventRegistry);
082
083 LocalRepository localRepository =
084 _repositoryFactory.createLocalRepository(repositoryId);
085
086 LocalRepository wrappedLocalRepository =
087 defaultCapabilityRegistry.invokeCapabilityWrappers(localRepository);
088
089 CapabilityLocalRepository capabilityLocalRepository =
090 new CapabilityLocalRepository(
091 wrappedLocalRepository, defaultCapabilityRegistry,
092 defaultRepositoryEventRegistry);
093
094 initializedLocalRepository.setDocumentRepository(
095 capabilityLocalRepository);
096
097 return capabilityLocalRepository;
098 }
099
100 @Override
101 public Repository createRepository(long repositoryId)
102 throws PortalException {
103
104 InitializedRepository initializedRepository =
105 new InitializedRepository();
106
107 DefaultCapabilityRegistry defaultCapabilityRegistry =
108 new DefaultCapabilityRegistry(initializedRepository);
109
110 _repositoryDefiner.registerCapabilities(defaultCapabilityRegistry);
111
112 DefaultRepositoryEventRegistry defaultRepositoryEventRegistry =
113 new DefaultRepositoryEventRegistry(_rootRepositoryEventTrigger);
114
115 setUpCommonCapabilities(
116 initializedRepository, defaultCapabilityRegistry,
117 defaultRepositoryEventRegistry);
118
119 Repository repository = _repositoryFactory.createRepository(
120 repositoryId);
121
122 defaultCapabilityRegistry.registerCapabilityRepositoryEvents(
123 defaultRepositoryEventRegistry);
124
125 Repository wrappedRepository =
126 defaultCapabilityRegistry.invokeCapabilityWrappers(repository);
127
128 CapabilityRepository capabilityRepository = new CapabilityRepository(
129 wrappedRepository, defaultCapabilityRegistry,
130 defaultRepositoryEventRegistry);
131
132 initializedRepository.setDocumentRepository(capabilityRepository);
133
134 return capabilityRepository;
135 }
136
137 public String getClassName() {
138 return _repositoryDefiner.getClassName();
139 }
140
141 public String getRepositoryTypeLabel(Locale locale) {
142 return _repositoryDefiner.getRepositoryTypeLabel(locale);
143 }
144
145 @Override
146 public String[] getSupportedConfigurations() {
147 return _repositoryDefiner.getSupportedConfigurations();
148 }
149
150 @Override
151 public String[][] getSupportedParameters() {
152 return _repositoryDefiner.getSupportedParameters();
153 }
154
155 @Override
156 public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
157 if (_repositoryFactory != null) {
158 throw new IllegalStateException(
159 "Repository factory already exists");
160 }
161
162 _repositoryFactory = repositoryFactory;
163 }
164
165 protected RepositoryClassDefinition(
166 RepositoryDefiner repositoryDefiner,
167 RepositoryEventTrigger rootRepositoryEventTrigger) {
168
169 _repositoryDefiner = repositoryDefiner;
170 _rootRepositoryEventTrigger = rootRepositoryEventTrigger;
171 }
172
173 protected void setUpCommonCapabilities(
174 DocumentRepository documentRepository,
175 DefaultCapabilityRegistry capabilityRegistry,
176 RepositoryEventTrigger repositoryEventTrigger) {
177
178 if (!capabilityRegistry.isCapabilityProvided(
179 ConfigurationCapability.class)) {
180
181 capabilityRegistry.addExportedCapability(
182 ConfigurationCapability.class,
183 new ConfigurationCapabilityImpl(documentRepository));
184 }
185
186 if (!capabilityRegistry.isCapabilityProvided(
187 RepositoryEventTriggerCapability.class)) {
188
189 capabilityRegistry.addExportedCapability(
190 RepositoryEventTriggerCapability.class,
191 new LiferayRepositoryEventTriggerCapability(
192 repositoryEventTrigger));
193 }
194 }
195
196 private final RepositoryDefiner _repositoryDefiner;
197 private RepositoryFactory _repositoryFactory;
198 private final RepositoryEventTrigger _rootRepositoryEventTrigger;
199
200 }