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.capabilities.Capability;
019    import com.liferay.portal.kernel.repository.capabilities.CapabilityProvider;
020    import com.liferay.portal.kernel.util.ParamUtil;
021    import com.liferay.portal.kernel.util.SortedArrayList;
022    import com.liferay.portal.kernel.util.StringUtil;
023    import com.liferay.portal.service.RepositoryLocalService;
024    import com.liferay.portal.service.RepositoryService;
025    import com.liferay.portal.service.ResourceLocalService;
026    import com.liferay.portal.service.ServiceContext;
027    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
028    import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
029    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
030    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
031    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalService;
032    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService;
033    import com.liferay.portlet.documentlibrary.service.DLFileEntryService;
034    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalService;
035    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;
036    import com.liferay.portlet.documentlibrary.service.DLFileShortcutLocalService;
037    import com.liferay.portlet.documentlibrary.service.DLFileShortcutService;
038    import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalService;
039    import com.liferay.portlet.documentlibrary.service.DLFileVersionService;
040    import com.liferay.portlet.documentlibrary.service.DLFolderLocalService;
041    import com.liferay.portlet.documentlibrary.service.DLFolderService;
042    import com.liferay.portlet.dynamicdatamapping.DDMFormValues;
043    import com.liferay.portlet.dynamicdatamapping.DDMStructure;
044    import com.liferay.portlet.dynamicdatamapping.StorageEngineManagerUtil;
045    
046    import java.util.ArrayList;
047    import java.util.HashMap;
048    import java.util.List;
049    
050    /**
051     * @author Alexander Chow
052     */
053    public abstract class LiferayRepositoryBase implements CapabilityProvider {
054    
055            public LiferayRepositoryBase(
056                    RepositoryLocalService repositoryLocalService,
057                    RepositoryService repositoryService,
058                    DLAppHelperLocalService dlAppHelperLocalService,
059                    DLFileEntryLocalService dlFileEntryLocalService,
060                    DLFileEntryService dlFileEntryService,
061                    DLFileEntryTypeLocalService dlFileEntryTypeLocalService,
062                    DLFileShortcutLocalService dlFileShortcutLocalService,
063                    DLFileShortcutService dlFileShortcutService,
064                    DLFileVersionLocalService dlFileVersionLocalService,
065                    DLFileVersionService dlFileVersionService,
066                    DLFolderLocalService dlFolderLocalService,
067                    DLFolderService dlFolderService,
068                    ResourceLocalService resourceLocalService, long groupId,
069                    long repositoryId, long dlFolderId) {
070    
071                    this.repositoryLocalService = repositoryLocalService;
072                    this.repositoryService = repositoryService;
073                    this.dlAppHelperLocalService = dlAppHelperLocalService;
074                    this.dlFileEntryLocalService = dlFileEntryLocalService;
075                    this.dlFileEntryService = dlFileEntryService;
076                    this.dlFileEntryTypeLocalService = dlFileEntryTypeLocalService;
077                    this.dlFileShortcutLocalService = dlFileShortcutLocalService;
078                    this.dlFileShortcutService = dlFileShortcutService;
079                    this.dlFileVersionLocalService = dlFileVersionLocalService;
080                    this.dlFileVersionService = dlFileVersionService;
081                    this.dlFolderLocalService = dlFolderLocalService;
082                    this.dlFolderService = dlFolderService;
083                    this.resourceLocalService = resourceLocalService;
084                    _groupId = groupId;
085                    _repositoryId = repositoryId;
086                    _dlFolderId = dlFolderId;
087            }
088    
089            @Override
090            public <T extends Capability> T getCapability(Class<T> capabilityClass) {
091                    throw new IllegalArgumentException(
092                            String.format(
093                                    "Capability %s is not supported by repository %s",
094                                    capabilityClass.getName(), getRepositoryId()));
095            }
096    
097            public long getRepositoryId() {
098                    return _repositoryId;
099            }
100    
101            @Override
102            public <T extends Capability> boolean isCapabilityProvided(
103                    Class<T> capabilityClass) {
104    
105                    return false;
106            }
107    
108            protected void addFileEntryResources(
109                            DLFileEntry dlFileEntry, ServiceContext serviceContext)
110                    throws PortalException {
111    
112                    if (serviceContext.isAddGroupPermissions() ||
113                            serviceContext.isAddGuestPermissions()) {
114    
115                            resourceLocalService.addResources(
116                                    dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),
117                                    dlFileEntry.getUserId(), DLFileEntry.class.getName(),
118                                    dlFileEntry.getFileEntryId(), false,
119                                    serviceContext.isAddGroupPermissions(),
120                                    serviceContext.isAddGuestPermissions());
121                    }
122                    else {
123                            if (serviceContext.isDeriveDefaultPermissions()) {
124                                    serviceContext.deriveDefaultPermissions(
125                                            dlFileEntry.getRepositoryId(),
126                                            DLFileEntryConstants.getClassName());
127                            }
128    
129                            resourceLocalService.addModelResources(
130                                    dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),
131                                    dlFileEntry.getUserId(), DLFileEntry.class.getName(),
132                                    dlFileEntry.getFileEntryId(),
133                                    serviceContext.getModelPermissions());
134                    }
135            }
136    
137            protected HashMap<String, DDMFormValues> getDDMFormValuesMap(
138                            ServiceContext serviceContext, long fileEntryTypeId)
139                    throws PortalException {
140    
141                    HashMap<String, DDMFormValues> ddmFormValuesMap = new HashMap<>();
142    
143                    if (fileEntryTypeId <= 0) {
144                            return ddmFormValuesMap;
145                    }
146    
147                    DLFileEntryType fileEntryType =
148                            DLFileEntryTypeLocalServiceUtil.getFileEntryType(fileEntryTypeId);
149    
150                    List<DDMStructure> ddmStructures = fileEntryType.getDDMStructures();
151    
152                    for (DDMStructure ddmStructure : ddmStructures) {
153                            String namespace = String.valueOf(ddmStructure.getStructureId());
154    
155                            DDMFormValues ddmFormValues =
156                                    (DDMFormValues)serviceContext.getAttribute(
157                                            DDMFormValues.class.getName() +
158                                                    ddmStructure.getStructureId());
159    
160                            if (ddmFormValues == null) {
161                                    ddmFormValues = StorageEngineManagerUtil.getDDMFormValues(
162                                            ddmStructure.getStructureId(), namespace, serviceContext);
163                            }
164    
165                            ddmFormValuesMap.put(ddmStructure.getStructureKey(), ddmFormValues);
166                    }
167    
168                    return ddmFormValuesMap;
169            }
170    
171            protected long getDefaultFileEntryTypeId(
172                            ServiceContext serviceContext, long folderId)
173                    throws PortalException {
174    
175                    folderId = dlFolderLocalService.getFolderId(
176                            serviceContext.getCompanyId(), folderId);
177    
178                    return dlFileEntryTypeLocalService.getDefaultFileEntryTypeId(folderId);
179            }
180    
181            protected long getGroupId() {
182                    return _groupId;
183            }
184    
185            protected SortedArrayList<Long> getLongList(
186                    ServiceContext serviceContext, String name) {
187    
188                    String value = ParamUtil.getString(serviceContext, name);
189    
190                    if (value == null) {
191                            return new SortedArrayList<>();
192                    }
193    
194                    long[] longArray = StringUtil.split(value, 0L);
195    
196                    SortedArrayList<Long> longList = new SortedArrayList<>();
197    
198                    for (long longValue : longArray) {
199                            longList.add(longValue);
200                    }
201    
202                    return longList;
203            }
204    
205            protected boolean isDefaultRepository() {
206                    if (_groupId == _repositoryId) {
207                            return true;
208                    }
209                    else {
210                            return false;
211                    }
212            }
213    
214            protected long toFolderId(long folderId) {
215                    if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
216                            return _dlFolderId;
217                    }
218                    else {
219                            return folderId;
220                    }
221            }
222    
223            protected List<Long> toFolderIds(List<Long> folderIds) {
224                    List<Long> toFolderIds = new ArrayList<>(folderIds.size());
225    
226                    for (long folderId : folderIds) {
227                            toFolderIds.add(toFolderId(folderId));
228                    }
229    
230                    return toFolderIds;
231            }
232    
233            protected DLAppHelperLocalService dlAppHelperLocalService;
234            protected DLFileEntryLocalService dlFileEntryLocalService;
235            protected DLFileEntryService dlFileEntryService;
236            protected DLFileEntryTypeLocalService dlFileEntryTypeLocalService;
237            protected DLFileShortcutLocalService dlFileShortcutLocalService;
238            protected DLFileShortcutService dlFileShortcutService;
239            protected DLFileVersionLocalService dlFileVersionLocalService;
240            protected DLFileVersionService dlFileVersionService;
241            protected DLFolderLocalService dlFolderLocalService;
242            protected DLFolderService dlFolderService;
243            protected RepositoryLocalService repositoryLocalService;
244            protected RepositoryService repositoryService;
245            protected ResourceLocalService resourceLocalService;
246    
247            private final long _dlFolderId;
248            private long _groupId;
249            private final long _repositoryId;
250    
251    }