001
014
015 package com.liferay.portal.repository;
016
017 import com.liferay.portal.kernel.bean.BeanReference;
018 import com.liferay.portal.kernel.bean.ClassLoaderBeanHandler;
019 import com.liferay.portal.kernel.exception.PortalException;
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.UndeployedExternalRepositoryException;
024 import com.liferay.portal.kernel.repository.capabilities.ConfigurationCapability;
025 import com.liferay.portal.kernel.repository.capabilities.RepositoryEventTriggerCapability;
026 import com.liferay.portal.kernel.repository.cmis.CMISRepositoryHandler;
027 import com.liferay.portal.kernel.util.ProxyUtil;
028 import com.liferay.portal.model.ClassName;
029 import com.liferay.portal.repository.capabilities.BaseCapabilityRepository;
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.liferayrepository.LiferayRepository;
035 import com.liferay.portal.repository.proxy.BaseRepositoryProxyBean;
036 import com.liferay.portal.repository.registry.RepositoryClassDefinition;
037 import com.liferay.portal.repository.registry.RepositoryClassDefinitionCatalog;
038 import com.liferay.portal.service.ClassNameLocalService;
039 import com.liferay.portal.service.RepositoryLocalService;
040 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService;
041 import com.liferay.portlet.documentlibrary.service.DLFileEntryService;
042 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalService;
043 import com.liferay.portlet.documentlibrary.service.DLFileVersionService;
044 import com.liferay.portlet.documentlibrary.service.DLFolderLocalService;
045 import com.liferay.portlet.documentlibrary.service.DLFolderService;
046
047
050 public class RepositoryFactoryImpl implements RepositoryFactory {
051
052 @Override
053 public LocalRepository createLocalRepository(long repositoryId)
054 throws PortalException {
055
056 long classNameId = getRepositoryClassNameId(repositoryId);
057
058 RepositoryClassDefinition repositoryClassDefinition =
059 getRepositoryClassDefinition(classNameId);
060
061 CapabilityLocalRepository capabilityLocalRepository =
062 repositoryClassDefinition.createCapabilityLocalRepository(
063 repositoryId);
064
065 setupCommonCapabilities(
066 capabilityLocalRepository, repositoryClassDefinition);
067
068 return capabilityLocalRepository;
069 }
070
071 @Override
072 public Repository createRepository(long repositoryId)
073 throws PortalException {
074
075 long classNameId = getRepositoryClassNameId(repositoryId);
076
077 RepositoryClassDefinition repositoryClassDefinition =
078 getRepositoryClassDefinition(classNameId);
079
080 CapabilityRepository capabilityRepository =
081 repositoryClassDefinition.createCapabilityRepository(repositoryId);
082
083 setupCommonCapabilities(
084 capabilityRepository, repositoryClassDefinition);
085
086 setupCapabilityRepositoryCapabilities(capabilityRepository);
087
088 return capabilityRepository;
089 }
090
091 protected CMISRepositoryHandler getCMISRepositoryHandler(
092 Repository repository) {
093
094 if (repository instanceof BaseRepositoryProxyBean) {
095 BaseRepositoryProxyBean baseRepositoryProxyBean =
096 (BaseRepositoryProxyBean)repository;
097
098 ClassLoaderBeanHandler classLoaderBeanHandler =
099 (ClassLoaderBeanHandler)ProxyUtil.getInvocationHandler(
100 baseRepositoryProxyBean.getProxyBean());
101
102 Object bean = classLoaderBeanHandler.getBean();
103
104 if (bean instanceof CMISRepositoryHandler) {
105 return (CMISRepositoryHandler)bean;
106 }
107 }
108
109 return null;
110 }
111
112 protected DLFileEntryLocalService getDlFileEntryLocalService() {
113 return _dlFileEntryLocalService;
114 }
115
116 protected DLFileEntryService getDlFileEntryService() {
117 return _dlFileEntryService;
118 }
119
120 protected DLFileVersionLocalService getDlFileVersionLocalService() {
121 return _dlFileVersionLocalService;
122 }
123
124 protected DLFileVersionService getDlFileVersionService() {
125 return _dlFileVersionService;
126 }
127
128 protected DLFolderLocalService getDlFolderLocalService() {
129 return _dlFolderLocalService;
130 }
131
132 protected DLFolderService getDlFolderService() {
133 return _dlFolderService;
134 }
135
136 protected com.liferay.portal.model.Repository getRepository(
137 long repositoryId) {
138
139 RepositoryLocalService repositoryLocalService =
140 getRepositoryLocalService();
141
142 return repositoryLocalService.fetchRepository(repositoryId);
143 }
144
145 protected RepositoryClassDefinition getRepositoryClassDefinition(
146 long classNameId)
147 throws PortalException {
148
149 ClassName className = _classNameLocalService.getClassName(classNameId);
150
151 RepositoryClassDefinition repositoryDefinition =
152 _repositoryClassDefinitionCatalog.getRepositoryClassDefinition(
153 className.getClassName());
154
155 if (repositoryDefinition == null) {
156 throw new UndeployedExternalRepositoryException(className);
157 }
158
159 return repositoryDefinition;
160 }
161
162 protected long getRepositoryClassNameId(long repositoryId) {
163 com.liferay.portal.model.Repository repository =
164 _repositoryLocalService.fetchRepository(repositoryId);
165
166 if (repository != null) {
167 return repository.getClassNameId();
168 }
169
170 return _classNameLocalService.getClassNameId(
171 LiferayRepository.class.getName());
172 }
173
174 protected RepositoryLocalService getRepositoryLocalService() {
175 return _repositoryLocalService;
176 }
177
178 protected void setupCapabilityRepositoryCapabilities(
179 CapabilityRepository capabilityRepository) {
180
181 Repository repository = capabilityRepository.getRepository();
182
183 CMISRepositoryHandler cmisRepositoryHandler = getCMISRepositoryHandler(
184 repository);
185
186 if (cmisRepositoryHandler != null) {
187 capabilityRepository.addExportedCapability(
188 CMISRepositoryHandler.class, cmisRepositoryHandler);
189 }
190 }
191
192 protected void setupCommonCapabilities(
193 BaseCapabilityRepository<?> baseCapabilityRepository,
194 RepositoryClassDefinition repositoryClassDefinition) {
195
196 if (!baseCapabilityRepository.isCapabilityProvided(
197 ConfigurationCapability.class)) {
198
199 baseCapabilityRepository.addExportedCapability(
200 ConfigurationCapability.class,
201 new ConfigurationCapabilityImpl(baseCapabilityRepository));
202 }
203
204 if (!baseCapabilityRepository.isCapabilityProvided(
205 RepositoryEventTriggerCapability.class)) {
206
207 baseCapabilityRepository.addExportedCapability(
208 RepositoryEventTriggerCapability.class,
209 new LiferayRepositoryEventTriggerCapability(
210 repositoryClassDefinition.getRepositoryEventTrigger()));
211 }
212 }
213
214 @BeanReference(type = ClassNameLocalService.class)
215 private ClassNameLocalService _classNameLocalService;
216
217 @BeanReference(type = DLFileEntryLocalService.class)
218 private DLFileEntryLocalService _dlFileEntryLocalService;
219
220 @BeanReference(type = DLFileEntryService.class)
221 private DLFileEntryService _dlFileEntryService;
222
223 @BeanReference(type = DLFileVersionLocalService.class)
224 private DLFileVersionLocalService _dlFileVersionLocalService;
225
226 @BeanReference(type = DLFileVersionService.class)
227 private DLFileVersionService _dlFileVersionService;
228
229 @BeanReference(type = DLFolderLocalService.class)
230 private DLFolderLocalService _dlFolderLocalService;
231
232 @BeanReference(type = DLFolderService.class)
233 private DLFolderService _dlFolderService;
234
235 @BeanReference(type = RepositoryClassDefinitionCatalog.class)
236 private RepositoryClassDefinitionCatalog _repositoryClassDefinitionCatalog;
237
238 @BeanReference(type = RepositoryLocalService.class)
239 private RepositoryLocalService _repositoryLocalService;
240
241 }