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