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.asset.service.impl;
016    
017    import com.liferay.asset.kernel.model.AssetTag;
018    import com.liferay.asset.kernel.model.AssetTagDisplay;
019    import com.liferay.portal.kernel.dao.orm.QueryUtil;
020    import com.liferay.portal.kernel.exception.PortalException;
021    import com.liferay.portal.kernel.json.JSONArray;
022    import com.liferay.portal.kernel.security.permission.ActionKeys;
023    import com.liferay.portal.kernel.service.ServiceContext;
024    import com.liferay.portal.kernel.util.OrderByComparator;
025    import com.liferay.portal.kernel.util.Validator;
026    import com.liferay.portlet.asset.service.base.AssetTagServiceBaseImpl;
027    import com.liferay.portlet.asset.service.permission.AssetPermission;
028    import com.liferay.portlet.asset.service.permission.AssetTagPermission;
029    import com.liferay.portlet.asset.util.comparator.AssetTagNameComparator;
030    import com.liferay.util.Autocomplete;
031    import com.liferay.util.dao.orm.CustomSQLUtil;
032    
033    import java.util.ArrayList;
034    import java.util.List;
035    import java.util.Set;
036    import java.util.TreeSet;
037    
038    /**
039     * Provides the remote service for accessing, adding, checking, deleting,
040     * merging, and updating asset tags. Its methods include permission checks.
041     *
042     * @author Brian Wing Shun Chan
043     * @author Jorge Ferrer
044     * @author Alvaro del Castillo
045     * @author Eduardo Lundgren
046     * @author Bruno Farache
047     * @author Juan Fern??ndez
048     */
049    public class AssetTagServiceImpl extends AssetTagServiceBaseImpl {
050    
051            @Override
052            public AssetTag addTag(
053                            long groupId, String name, ServiceContext serviceContext)
054                    throws PortalException {
055    
056                    AssetPermission.check(
057                            getPermissionChecker(), groupId, ActionKeys.ADD_TAG);
058    
059                    return assetTagLocalService.addTag(
060                            getUserId(), groupId, name, serviceContext);
061            }
062    
063            @Override
064            public void deleteTag(long tagId) throws PortalException {
065                    AssetTagPermission.check(
066                            getPermissionChecker(), tagId, ActionKeys.DELETE);
067    
068                    assetTagLocalService.deleteTag(tagId);
069            }
070    
071            @Override
072            public void deleteTags(long[] tagIds) throws PortalException {
073                    for (long tagId : tagIds) {
074                            AssetTagPermission.check(
075                                    getPermissionChecker(), tagId, ActionKeys.DELETE);
076    
077                            assetTagLocalService.deleteTag(tagId);
078                    }
079            }
080    
081            @Override
082            public List<AssetTag> getGroupsTags(long[] groupIds) {
083                    Set<AssetTag> groupsTags = new TreeSet<>(new AssetTagNameComparator());
084    
085                    for (long groupId : groupIds) {
086                            List<AssetTag> groupTags = getGroupTags(groupId);
087    
088                            groupsTags.addAll(groupTags);
089                    }
090    
091                    return new ArrayList<>(groupsTags);
092            }
093    
094            @Override
095            public List<AssetTag> getGroupTags(long groupId) {
096                    return assetTagPersistence.findByGroupId(groupId);
097            }
098    
099            @Override
100            public List<AssetTag> getGroupTags(
101                    long groupId, int start, int end, OrderByComparator<AssetTag> obc) {
102    
103                    return assetTagPersistence.findByGroupId(groupId, start, end, obc);
104            }
105    
106            @Override
107            public int getGroupTagsCount(long groupId) {
108                    return assetTagPersistence.countByGroupId(groupId);
109            }
110    
111            @Override
112            public AssetTagDisplay getGroupTagsDisplay(
113                    long groupId, String name, int start, int end) {
114    
115                    List<AssetTag> tags = null;
116                    int total = 0;
117    
118                    if (Validator.isNotNull(name)) {
119                            name = (CustomSQLUtil.keywords(name))[0];
120    
121                            tags = getTags(groupId, name, start, end);
122                            total = getTagsCount(groupId, name);
123                    }
124                    else {
125                            tags = getGroupTags(groupId, start, end, null);
126                            total = getGroupTagsCount(groupId);
127                    }
128    
129                    return new AssetTagDisplay(tags, total, start, end);
130            }
131    
132            @Override
133            public AssetTag getTag(long tagId) throws PortalException {
134                    return assetTagLocalService.getTag(tagId);
135            }
136    
137            @Override
138            public List<AssetTag> getTags(long groupId, long classNameId, String name) {
139                    return assetTagFinder.findByG_C_N(
140                            groupId, classNameId, name, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
141                            null);
142            }
143    
144            @Override
145            public List<AssetTag> getTags(
146                    long groupId, long classNameId, String name, int start, int end,
147                    OrderByComparator<AssetTag> obc) {
148    
149                    return assetTagFinder.findByG_C_N(
150                            groupId, classNameId, name, start, end, obc);
151            }
152    
153            @Override
154            public List<AssetTag> getTags(
155                    long groupId, String name, int start, int end) {
156    
157                    return getTags(new long[] {groupId}, name, start, end);
158            }
159    
160            @Override
161            public List<AssetTag> getTags(
162                    long groupId, String name, int start, int end,
163                    OrderByComparator<AssetTag> obc) {
164    
165                    return getTags(new long[] {groupId}, name, start, end, obc);
166            }
167    
168            @Override
169            public List<AssetTag> getTags(
170                    long[] groupIds, String name, int start, int end) {
171    
172                    return getTags(
173                            groupIds, name, start, end, new AssetTagNameComparator());
174            }
175    
176            @Override
177            public List<AssetTag> getTags(
178                    long[] groupIds, String name, int start, int end,
179                    OrderByComparator<AssetTag> obc) {
180    
181                    if (Validator.isNull(name)) {
182                            return assetTagPersistence.findByGroupId(groupIds, start, end, obc);
183                    }
184    
185                    return assetTagPersistence.findByG_LikeN(
186                            groupIds, name, start, end, obc);
187            }
188    
189            @Override
190            public List<AssetTag> getTags(String className, long classPK) {
191                    return assetTagLocalService.getTags(className, classPK);
192            }
193    
194            @Override
195            public int getTagsCount(long groupId, String name) {
196                    if (Validator.isNull(name)) {
197                            return assetTagPersistence.countByGroupId(groupId);
198                    }
199    
200                    return assetTagPersistence.countByG_LikeN(groupId, name);
201            }
202    
203            @Override
204            public int getVisibleAssetsTagsCount(
205                    long groupId, long classNameId, String name) {
206    
207                    return assetTagFinder.countByG_C_N(groupId, classNameId, name);
208            }
209    
210            @Override
211            public int getVisibleAssetsTagsCount(long groupId, String name) {
212                    return assetTagFinder.countByG_N(groupId, name);
213            }
214    
215            @Override
216            public void mergeTags(long fromTagId, long toTagId) throws PortalException {
217                    AssetTagPermission.check(
218                            getPermissionChecker(), toTagId, ActionKeys.UPDATE);
219    
220                    assetTagLocalService.mergeTags(fromTagId, toTagId);
221            }
222    
223            @Override
224            public void mergeTags(long[] fromTagIds, long toTagId)
225                    throws PortalException {
226    
227                    for (long fromTagId : fromTagIds) {
228                            mergeTags(fromTagId, toTagId);
229                    }
230            }
231    
232            @Override
233            public JSONArray search(long groupId, String name, int start, int end) {
234                    return search(new long[] {groupId}, name, start, end);
235            }
236    
237            @Override
238            public JSONArray search(long[] groupIds, String name, int start, int end) {
239                    List<AssetTag> tags = getTags(groupIds, name, start, end);
240    
241                    return Autocomplete.listToJson(tags, "name", "name");
242            }
243    
244            @Override
245            public AssetTag updateTag(
246                            long tagId, String name, ServiceContext serviceContext)
247                    throws PortalException {
248    
249                    AssetTagPermission.check(
250                            getPermissionChecker(), tagId, ActionKeys.UPDATE);
251    
252                    return assetTagLocalService.updateTag(
253                            getUserId(), tagId, name, serviceContext);
254            }
255    
256    }