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