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