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.RepositoryEntryChecker;
045    import com.liferay.portal.repository.capabilities.util.RepositoryEntryConverter;
046    import com.liferay.portal.util.PropsValues;
047    
048    /**
049     * @author Adolfo P??rez
050     */
051    public class LiferayRepositoryDefiner extends BaseRepositoryDefiner {
052    
053            public static final String CLASS_NAME = LiferayRepository.class.getName();
054    
055            @Override
056            public String getClassName() {
057                    return CLASS_NAME;
058            }
059    
060            @Override
061            public boolean isExternalRepository() {
062                    return false;
063            }
064    
065            @Override
066            public void registerCapabilities(
067                    CapabilityRegistry<DocumentRepository> capabilityRegistry) {
068    
069                    capabilityRegistry.addExportedCapability(
070                            TrashCapability.class, _trashCapability);
071    
072                    DocumentRepository documentRepository = capabilityRegistry.getTarget();
073    
074                    BulkOperationCapability bulkOperationCapability =
075                            new LiferayBulkOperationCapability(documentRepository);
076    
077                    capabilityRegistry.addExportedCapability(
078                            BulkOperationCapability.class, bulkOperationCapability);
079    
080                    RepositoryEntryConverter repositoryEntryConverter =
081                            new RepositoryEntryConverter();
082                    RepositoryEntryChecker repositoryEntryChecker =
083                            new RepositoryEntryChecker(documentRepository);
084    
085                    capabilityRegistry.addExportedCapability(
086                            RelatedModelCapability.class,
087                            new LiferayRelatedModelCapability(
088                                    repositoryEntryConverter, repositoryEntryChecker));
089                    capabilityRegistry.addExportedCapability(
090                            ThumbnailCapability.class,
091                            new LiferayThumbnailCapability(
092                                    repositoryEntryConverter, repositoryEntryChecker));
093    
094                    capabilityRegistry.addExportedCapability(
095                            WorkflowCapability.class, _workflowCapability);
096    
097                    if (PropsValues.DL_FILE_ENTRY_COMMENTS_ENABLED) {
098                            capabilityRegistry.addSupportedCapability(
099                                    CommentCapability.class, _commentCapability);
100                    }
101    
102                    capabilityRegistry.addSupportedCapability(
103                            ProcessorCapability.class, _processorCapability);
104                    capabilityRegistry.addSupportedCapability(
105                            SyncCapability.class,
106                            new LiferaySyncCapability(bulkOperationCapability));
107            }
108    
109            @Override
110            public void registerRepositoryFactory(
111                    RepositoryFactoryRegistry repositoryFactoryRegistry) {
112    
113                    repositoryFactoryRegistry.setRepositoryFactory(_repositoryFactory);
114            }
115    
116            public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
117                    _repositoryFactory = new LiferayRepositoryFactoryWrapper(
118                            repositoryFactory);
119            }
120    
121            private final CommentCapability _commentCapability =
122                    new LiferayCommentCapability();
123            private final ProcessorCapability _processorCapability =
124                    new LiferayProcessorCapability();
125            private RepositoryFactory _repositoryFactory;
126            private final TrashCapability _trashCapability =
127                    new LiferayTrashCapability();
128            private final WorkflowCapability _workflowCapability =
129                    new LiferayWorkflowCapability();
130    
131            private class LiferayRepositoryFactoryWrapper implements RepositoryFactory {
132    
133                    public LiferayRepositoryFactoryWrapper(
134                            RepositoryFactory repositoryFactory) {
135    
136                            _repositoryFactory = repositoryFactory;
137                    }
138    
139                    @Override
140                    public LocalRepository createLocalRepository(long repositoryId)
141                            throws PortalException {
142    
143                            LocalRepository localRepository =
144                                    _repositoryFactory.createLocalRepository(repositoryId);
145    
146                            ModelValidator<FileContentReference> modelValidator =
147                                    ModelValidatorUtil.getDefaultDLFileEntryModelValidator();
148    
149                            return new ModelValidatorLocalRepositoryWrapper(
150                                    localRepository, modelValidator);
151                    }
152    
153                    @Override
154                    public Repository createRepository(long repositoryId)
155                            throws PortalException {
156    
157                            Repository repository = _repositoryFactory.createRepository(
158                                    repositoryId);
159    
160                            ModelValidator<FileContentReference> modelValidator =
161                                    ModelValidatorUtil.getDefaultDLFileEntryModelValidator();
162    
163                            return new ModelValidatorRepositoryWrapper(
164                                    repository, modelValidator);
165                    }
166    
167                    private final RepositoryFactory _repositoryFactory;
168    
169            }
170    
171    }