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.portlet.documentlibrary.service.impl;
016    
017    import com.liferay.document.library.kernel.model.DLFileEntryType;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.security.permission.ActionKeys;
020    import com.liferay.portal.kernel.security.permission.PermissionChecker;
021    import com.liferay.portal.kernel.service.ServiceContext;
022    import com.liferay.portal.kernel.util.ListUtil;
023    import com.liferay.portal.kernel.util.LocaleUtil;
024    import com.liferay.portal.kernel.util.OrderByComparator;
025    import com.liferay.portlet.documentlibrary.service.base.DLFileEntryTypeServiceBaseImpl;
026    import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryTypePermission;
027    import com.liferay.portlet.documentlibrary.service.permission.DLPermission;
028    
029    import java.util.HashMap;
030    import java.util.Iterator;
031    import java.util.List;
032    import java.util.Locale;
033    import java.util.Map;
034    
035    /**
036     * Provides the remote service for accessing, adding, deleting, and updating
037     * file and folder file entry types. Its methods include permission checks.
038     *
039     * @author Alexander Chow
040     */
041    public class DLFileEntryTypeServiceImpl extends DLFileEntryTypeServiceBaseImpl {
042    
043            @Override
044            public DLFileEntryType addFileEntryType(
045                            long groupId, String fileEntryTypeKey, Map<Locale, String> nameMap,
046                            Map<Locale, String> descriptionMap, long[] ddmStructureIds,
047                            ServiceContext serviceContext)
048                    throws PortalException {
049    
050                    DLPermission.check(
051                            getPermissionChecker(), groupId, ActionKeys.ADD_DOCUMENT_TYPE);
052    
053                    return dlFileEntryTypeLocalService.addFileEntryType(
054                            getUserId(), groupId, fileEntryTypeKey, nameMap, descriptionMap,
055                            ddmStructureIds, serviceContext);
056            }
057    
058            @Override
059            public DLFileEntryType addFileEntryType(
060                            long groupId, String name, String description,
061                            long[] ddmStructureIds, ServiceContext serviceContext)
062                    throws PortalException {
063    
064                    Map<Locale, String> nameMap = new HashMap<>();
065    
066                    nameMap.put(LocaleUtil.getSiteDefault(), name);
067    
068                    Map<Locale, String> descriptionMap = new HashMap<>();
069    
070                    descriptionMap.put(LocaleUtil.getSiteDefault(), description);
071    
072                    return addFileEntryType(
073                            groupId, null, nameMap, descriptionMap, ddmStructureIds,
074                            serviceContext);
075            }
076    
077            @Override
078            public void deleteFileEntryType(long fileEntryTypeId)
079                    throws PortalException {
080    
081                    DLFileEntryTypePermission.check(
082                            getPermissionChecker(), fileEntryTypeId, ActionKeys.DELETE);
083    
084                    dlFileEntryTypeLocalService.deleteFileEntryType(fileEntryTypeId);
085            }
086    
087            @Override
088            public DLFileEntryType getFileEntryType(long fileEntryTypeId)
089                    throws PortalException {
090    
091                    DLFileEntryTypePermission.check(
092                            getPermissionChecker(), fileEntryTypeId, ActionKeys.VIEW);
093    
094                    return dlFileEntryTypeLocalService.getFileEntryType(fileEntryTypeId);
095            }
096    
097            @Override
098            public List<DLFileEntryType> getFileEntryTypes(long[] groupIds) {
099                    return dlFileEntryTypePersistence.filterFindByGroupId(groupIds);
100            }
101    
102            @Override
103            public List<DLFileEntryType> getFileEntryTypes(
104                    long[] groupIds, int start, int end) {
105    
106                    return dlFileEntryTypePersistence.filterFindByGroupId(
107                            groupIds, start, end);
108            }
109    
110            @Override
111            public int getFileEntryTypesCount(long[] groupIds) {
112                    return dlFileEntryTypePersistence.filterCountByGroupId(groupIds);
113            }
114    
115            @Override
116            public List<DLFileEntryType> getFolderFileEntryTypes(
117                            long[] groupIds, long folderId, boolean inherited)
118                    throws PortalException {
119    
120                    return filterFileEntryTypes(
121                            dlFileEntryTypeLocalService.getFolderFileEntryTypes(
122                                    groupIds, folderId, inherited));
123            }
124    
125            @Override
126            public List<DLFileEntryType> search(
127                    long companyId, long[] groupIds, String keywords,
128                    boolean includeBasicFileEntryType, int start, int end,
129                    OrderByComparator<DLFileEntryType> orderByComparator) {
130    
131                    return dlFileEntryTypeFinder.filterFindByKeywords(
132                            companyId, groupIds, keywords, includeBasicFileEntryType, start,
133                            end, orderByComparator);
134            }
135    
136            @Override
137            public int searchCount(
138                    long companyId, long[] groupIds, String keywords,
139                    boolean includeBasicFileEntryType) {
140    
141                    return dlFileEntryTypeFinder.filterCountByKeywords(
142                            companyId, groupIds, keywords, includeBasicFileEntryType);
143            }
144    
145            @Override
146            public void updateFileEntryType(
147                            long fileEntryTypeId, Map<Locale, String> nameMap,
148                            Map<Locale, String> descriptionMap, long[] ddmStructureIds,
149                            ServiceContext serviceContext)
150                    throws PortalException {
151    
152                    DLFileEntryTypePermission.check(
153                            getPermissionChecker(), fileEntryTypeId, ActionKeys.UPDATE);
154    
155                    dlFileEntryTypeLocalService.updateFileEntryType(
156                            getUserId(), fileEntryTypeId, nameMap, descriptionMap,
157                            ddmStructureIds, serviceContext);
158            }
159    
160            @Override
161            public void updateFileEntryType(
162                            long fileEntryTypeId, String name, String description,
163                            long[] ddmStructureIds, ServiceContext serviceContext)
164                    throws PortalException {
165    
166                    Map<Locale, String> nameMap = new HashMap<>();
167    
168                    nameMap.put(LocaleUtil.getSiteDefault(), name);
169    
170                    Map<Locale, String> descriptionMap = new HashMap<>();
171    
172                    descriptionMap.put(LocaleUtil.getSiteDefault(), description);
173    
174                    updateFileEntryType(
175                            fileEntryTypeId, nameMap, descriptionMap, ddmStructureIds,
176                            serviceContext);
177            }
178    
179            protected List<DLFileEntryType> filterFileEntryTypes(
180                            List<DLFileEntryType> fileEntryTypes)
181                    throws PortalException {
182    
183                    PermissionChecker permissionChecker = getPermissionChecker();
184    
185                    fileEntryTypes = ListUtil.copy(fileEntryTypes);
186    
187                    Iterator<DLFileEntryType> itr = fileEntryTypes.iterator();
188    
189                    while (itr.hasNext()) {
190                            DLFileEntryType fileEntryType = itr.next();
191    
192                            if ((fileEntryType.getFileEntryTypeId() > 0) &&
193                                    !DLFileEntryTypePermission.contains(
194                                            permissionChecker, fileEntryType, ActionKeys.VIEW)) {
195    
196                                    itr.remove();
197                            }
198                    }
199    
200                    return fileEntryTypes;
201            }
202    
203    }