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