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