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.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.RepositoryFactory;
022    import com.liferay.portal.kernel.repository.capabilities.BulkOperationCapability;
023    import com.liferay.portal.kernel.repository.capabilities.CommentCapability;
024    import com.liferay.portal.kernel.repository.capabilities.ProcessorCapability;
025    import com.liferay.portal.kernel.repository.capabilities.RelatedModelCapability;
026    import com.liferay.portal.kernel.repository.capabilities.SyncCapability;
027    import com.liferay.portal.kernel.repository.capabilities.ThumbnailCapability;
028    import com.liferay.portal.kernel.repository.capabilities.TrashCapability;
029    import com.liferay.portal.kernel.repository.capabilities.WorkflowCapability;
030    import com.liferay.portal.kernel.repository.model.FileContentReference;
031    import com.liferay.portal.kernel.repository.model.ModelValidator;
032    import com.liferay.portal.kernel.repository.registry.BaseRepositoryDefiner;
033    import com.liferay.portal.kernel.repository.registry.CapabilityRegistry;
034    import com.liferay.portal.kernel.repository.registry.RepositoryFactoryRegistry;
035    import com.liferay.portal.kernel.repository.util.ModelValidatorUtil;
036    import com.liferay.portal.repository.capabilities.LiferayBulkOperationCapability;
037    import com.liferay.portal.repository.capabilities.LiferayCommentCapability;
038    import com.liferay.portal.repository.capabilities.LiferayProcessorCapability;
039    import com.liferay.portal.repository.capabilities.LiferayRelatedModelCapability;
040    import com.liferay.portal.repository.capabilities.LiferaySyncCapability;
041    import com.liferay.portal.repository.capabilities.LiferayThumbnailCapability;
042    import com.liferay.portal.repository.capabilities.LiferayTrashCapability;
043    import com.liferay.portal.repository.capabilities.LiferayWorkflowCapability;
044    import com.liferay.portal.repository.capabilities.util.DLAppServiceAdapter;
045    import com.liferay.portal.repository.capabilities.util.DLFileEntryServiceAdapter;
046    import com.liferay.portal.repository.capabilities.util.DLFileVersionServiceAdapter;
047    import com.liferay.portal.repository.capabilities.util.DLFolderServiceAdapter;
048    import com.liferay.portal.repository.capabilities.util.GroupServiceAdapter;
049    import com.liferay.portal.repository.capabilities.util.RepositoryEntryChecker;
050    import com.liferay.portal.repository.capabilities.util.RepositoryEntryConverter;
051    import com.liferay.portal.repository.capabilities.util.RepositoryServiceAdapter;
052    import com.liferay.portal.util.PropsValues;
053    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalServiceUtil;
054    import com.liferay.portlet.documentlibrary.service.DLSyncEventLocalServiceUtil;
055    import com.liferay.portlet.trash.service.TrashEntryLocalServiceUtil;
056    import com.liferay.portlet.trash.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 class LiferayRepositoryFactoryWrapper implements RepositoryFactory {
158    
159                    public LiferayRepositoryFactoryWrapper(
160                            RepositoryFactory repositoryFactory) {
161    
162                            _repositoryFactory = repositoryFactory;
163                    }
164    
165                    @Override
166                    public LocalRepository createLocalRepository(long repositoryId)
167                            throws PortalException {
168    
169                            LocalRepository localRepository =
170                                    _repositoryFactory.createLocalRepository(repositoryId);
171    
172                            ModelValidator<FileContentReference> modelValidator =
173                                    ModelValidatorUtil.getDefaultDLFileEntryModelValidator();
174    
175                            return new ModelValidatorLocalRepositoryWrapper(
176                                    localRepository, modelValidator);
177                    }
178    
179                    @Override
180                    public Repository createRepository(long repositoryId)
181                            throws PortalException {
182    
183                            Repository repository = _repositoryFactory.createRepository(
184                                    repositoryId);
185    
186                            ModelValidator<FileContentReference> modelValidator =
187                                    ModelValidatorUtil.getDefaultDLFileEntryModelValidator();
188    
189                            return new ModelValidatorRepositoryWrapper(
190                                    repository, modelValidator);
191                    }
192    
193                    private final RepositoryFactory _repositoryFactory;
194    
195            }
196    
197    }