001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.repository.liferayrepository;
016    
017    import com.liferay.document.library.kernel.service.DLAppHelperLocalServiceUtil;
018    import com.liferay.document.library.kernel.service.DLSyncEventLocalServiceUtil;
019    import com.liferay.portal.kernel.exception.PortalException;
020    import com.liferay.portal.kernel.repository.DocumentRepository;
021    import com.liferay.portal.kernel.repository.LocalRepository;
022    import com.liferay.portal.kernel.repository.Repository;
023    import com.liferay.portal.kernel.repository.RepositoryFactory;
024    import com.liferay.portal.kernel.repository.capabilities.BulkOperationCapability;
025    import com.liferay.portal.kernel.repository.capabilities.CommentCapability;
026    import com.liferay.portal.kernel.repository.capabilities.ProcessorCapability;
027    import com.liferay.portal.kernel.repository.capabilities.RelatedModelCapability;
028    import com.liferay.portal.kernel.repository.capabilities.SyncCapability;
029    import com.liferay.portal.kernel.repository.capabilities.ThumbnailCapability;
030    import com.liferay.portal.kernel.repository.capabilities.TrashCapability;
031    import com.liferay.portal.kernel.repository.capabilities.WorkflowCapability;
032    import com.liferay.portal.kernel.repository.model.FileContentReference;
033    import com.liferay.portal.kernel.repository.model.ModelValidator;
034    import com.liferay.portal.kernel.repository.registry.BaseRepositoryDefiner;
035    import com.liferay.portal.kernel.repository.registry.CapabilityRegistry;
036    import com.liferay.portal.kernel.repository.registry.RepositoryFactoryRegistry;
037    import com.liferay.portal.kernel.repository.util.ModelValidatorUtil;
038    import com.liferay.portal.repository.capabilities.LiferayBulkOperationCapability;
039    import com.liferay.portal.repository.capabilities.LiferayCommentCapability;
040    import com.liferay.portal.repository.capabilities.LiferayProcessorCapability;
041    import com.liferay.portal.repository.capabilities.LiferayRelatedModelCapability;
042    import com.liferay.portal.repository.capabilities.LiferaySyncCapability;
043    import com.liferay.portal.repository.capabilities.LiferayThumbnailCapability;
044    import com.liferay.portal.repository.capabilities.LiferayTrashCapability;
045    import com.liferay.portal.repository.capabilities.LiferayWorkflowCapability;
046    import com.liferay.portal.repository.capabilities.util.DLAppServiceAdapter;
047    import com.liferay.portal.repository.capabilities.util.DLFileEntryServiceAdapter;
048    import com.liferay.portal.repository.capabilities.util.DLFileVersionServiceAdapter;
049    import com.liferay.portal.repository.capabilities.util.DLFolderServiceAdapter;
050    import com.liferay.portal.repository.capabilities.util.GroupServiceAdapter;
051    import com.liferay.portal.repository.capabilities.util.RepositoryEntryChecker;
052    import com.liferay.portal.repository.capabilities.util.RepositoryEntryConverter;
053    import com.liferay.portal.repository.capabilities.util.RepositoryServiceAdapter;
054    import com.liferay.portal.util.PropsValues;
055    import com.liferay.trash.kernel.service.TrashEntryLocalServiceUtil;
056    import com.liferay.trash.kernel.service.TrashVersionLocalServiceUtil;
057    
058    /**
059     * @author Adolfo P??rez
060     */
061    public class LiferayRepositoryDefiner extends BaseRepositoryDefiner {
062    
063            public static final String CLASS_NAME = LiferayRepository.class.getName();
064    
065            @Override
066            public String getClassName() {
067                    return CLASS_NAME;
068            }
069    
070            @Override
071            public boolean isExternalRepository() {
072                    return false;
073            }
074    
075            @Override
076            public void registerCapabilities(
077                    CapabilityRegistry<DocumentRepository> capabilityRegistry) {
078    
079                    DocumentRepository documentRepository = capabilityRegistry.getTarget();
080    
081                    DLFileEntryServiceAdapter dlFileEntryServiceAdapter =
082                            DLFileEntryServiceAdapter.create(documentRepository);
083                    DLFolderServiceAdapter dlFolderServiceAdapter =
084                            DLFolderServiceAdapter.create(documentRepository);
085    
086                    BulkOperationCapability bulkOperationCapability =
087                            new LiferayBulkOperationCapability(
088                                    documentRepository, dlFileEntryServiceAdapter,
089                                    dlFolderServiceAdapter);
090    
091                    capabilityRegistry.addExportedCapability(
092                            BulkOperationCapability.class, bulkOperationCapability);
093    
094                    RepositoryEntryConverter repositoryEntryConverter =
095                            new RepositoryEntryConverter();
096                    RepositoryEntryChecker repositoryEntryChecker =
097                            new RepositoryEntryChecker(documentRepository);
098    
099                    capabilityRegistry.addExportedCapability(
100                            RelatedModelCapability.class,
101                            new LiferayRelatedModelCapability(
102                                    repositoryEntryConverter, repositoryEntryChecker));
103                    capabilityRegistry.addExportedCapability(
104                            ThumbnailCapability.class,
105                            new LiferayThumbnailCapability(
106                                    repositoryEntryConverter, repositoryEntryChecker));
107    
108                    TrashCapability trashCapability = new LiferayTrashCapability(
109                            DLAppHelperLocalServiceUtil.getService(),
110                            DLAppServiceAdapter.create(documentRepository),
111                            dlFileEntryServiceAdapter, dlFolderServiceAdapter,
112                            RepositoryServiceAdapter.create(documentRepository),
113                            TrashEntryLocalServiceUtil.getService(),
114                            TrashVersionLocalServiceUtil.getService());
115    
116                    capabilityRegistry.addExportedCapability(
117                            TrashCapability.class, trashCapability);
118    
119                    capabilityRegistry.addExportedCapability(
120                            WorkflowCapability.class,
121                            new LiferayWorkflowCapability(
122                                    dlFileEntryServiceAdapter,
123                                    DLFileVersionServiceAdapter.create(documentRepository)));
124    
125                    if (PropsValues.DL_FILE_ENTRY_COMMENTS_ENABLED) {
126                            capabilityRegistry.addSupportedCapability(
127                                    CommentCapability.class, _commentCapability);
128                    }
129    
130                    capabilityRegistry.addSupportedCapability(
131                            ProcessorCapability.class, _processorCapability);
132                    capabilityRegistry.addSupportedCapability(
133                            SyncCapability.class,
134                            new LiferaySyncCapability(
135                                    GroupServiceAdapter.create(documentRepository),
136                                    DLSyncEventLocalServiceUtil.getService()));
137            }
138    
139            @Override
140            public void registerRepositoryFactory(
141                    RepositoryFactoryRegistry repositoryFactoryRegistry) {
142    
143                    repositoryFactoryRegistry.setRepositoryFactory(_repositoryFactory);
144            }
145    
146            public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
147                    _repositoryFactory = new LiferayRepositoryFactoryWrapper(
148                            repositoryFactory);
149            }
150    
151            private final CommentCapability _commentCapability =
152                    new LiferayCommentCapability();
153            private final ProcessorCapability _processorCapability =
154                    new LiferayProcessorCapability();
155            private RepositoryFactory _repositoryFactory;
156    
157            private static class LiferayRepositoryFactoryWrapper
158                    implements RepositoryFactory {
159    
160                    public LiferayRepositoryFactoryWrapper(
161                            RepositoryFactory repositoryFactory) {
162    
163                            _repositoryFactory = repositoryFactory;
164                    }
165    
166                    @Override
167                    public LocalRepository createLocalRepository(long repositoryId)
168                            throws PortalException {
169    
170                            LocalRepository localRepository =
171                                    _repositoryFactory.createLocalRepository(repositoryId);
172    
173                            ModelValidator<FileContentReference> modelValidator =
174                                    ModelValidatorUtil.getDefaultDLFileEntryModelValidator();
175    
176                            return new ModelValidatorLocalRepositoryWrapper(
177                                    localRepository, modelValidator);
178                    }
179    
180                    @Override
181                    public Repository createRepository(long repositoryId)
182                            throws PortalException {
183    
184                            Repository repository = _repositoryFactory.createRepository(
185                                    repositoryId);
186    
187                            ModelValidator<FileContentReference> modelValidator =
188                                    ModelValidatorUtil.getDefaultDLFileEntryModelValidator();
189    
190                            return new ModelValidatorRepositoryWrapper(
191                                    repository, modelValidator);
192                    }
193    
194                    private final RepositoryFactory _repositoryFactory;
195    
196            }
197    
198    }