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