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.asset.kernel.model;
016    
017    import com.liferay.asset.kernel.NoSuchClassTypeException;
018    import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil;
019    import com.liferay.portal.kernel.exception.PortalException;
020    import com.liferay.portal.kernel.language.LanguageUtil;
021    import com.liferay.portal.kernel.model.Group;
022    import com.liferay.portal.kernel.model.Portlet;
023    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
024    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
025    import com.liferay.portal.kernel.security.permission.PermissionChecker;
026    import com.liferay.portal.kernel.security.permission.ResourceActionsUtil;
027    import com.liferay.portal.kernel.service.PortletLocalServiceUtil;
028    import com.liferay.portal.kernel.theme.ThemeDisplay;
029    import com.liferay.portal.kernel.util.PortalUtil;
030    import com.liferay.portal.kernel.util.StringPool;
031    import com.liferay.portal.kernel.util.Tuple;
032    import com.liferay.portal.kernel.util.Validator;
033    import com.liferay.portal.kernel.util.WebKeys;
034    
035    import java.util.ArrayList;
036    import java.util.Collections;
037    import java.util.HashMap;
038    import java.util.List;
039    import java.util.Locale;
040    import java.util.Map;
041    
042    import javax.portlet.PortletRequest;
043    import javax.portlet.PortletURL;
044    import javax.portlet.WindowState;
045    
046    /**
047     * @author Jorge Ferrer
048     * @author Juan Fern??ndez
049     * @author Raymond Aug??
050     * @author Sergio Gonz??lez
051     */
052    public abstract class BaseAssetRendererFactory<T>
053            implements AssetRendererFactory<T> {
054    
055            @Override
056            public AssetEntry getAssetEntry(long assetEntryId) throws PortalException {
057                    return AssetEntryLocalServiceUtil.getEntry(assetEntryId);
058            }
059    
060            @Override
061            public AssetEntry getAssetEntry(String className, long classPK)
062                    throws PortalException {
063    
064                    return AssetEntryLocalServiceUtil.getEntry(className, classPK);
065            }
066    
067            @Override
068            public AssetRenderer<T> getAssetRenderer(long classPK)
069                    throws PortalException {
070    
071                    return getAssetRenderer(classPK, TYPE_LATEST_APPROVED);
072            }
073    
074            @Override
075            @SuppressWarnings("unused")
076            public AssetRenderer<T> getAssetRenderer(long groupId, String urlTitle)
077                    throws PortalException {
078    
079                    return null;
080            }
081    
082            @Override
083            public String getClassName() {
084                    return _className;
085            }
086    
087            @Override
088            public long getClassNameId() {
089                    return PortalUtil.getClassNameId(getClassName());
090            }
091    
092            @Deprecated
093            @Override
094            public Tuple getClassTypeFieldName(
095                            long classTypeId, String fieldName, Locale locale)
096                    throws Exception {
097    
098                    ClassTypeReader classTypeReader = getClassTypeReader();
099    
100                    ClassType classType = classTypeReader.getClassType(classTypeId, locale);
101    
102                    List<ClassTypeField> classTypeFields = classType.getClassTypeFields();
103    
104                    for (ClassTypeField classTypeField : classTypeFields) {
105                            if (fieldName.equals(classTypeField.getName())) {
106                                    return toTuple(classTypeField);
107                            }
108                    }
109    
110                    return null;
111            }
112    
113            @Deprecated
114            @Override
115            public List<Tuple> getClassTypeFieldNames(
116                            long classTypeId, Locale locale, int start, int end)
117                    throws Exception {
118    
119                    ClassTypeReader classTypeReader = getClassTypeReader();
120    
121                    ClassType classType = classTypeReader.getClassType(classTypeId, locale);
122    
123                    List<ClassTypeField> classTypeFields = classType.getClassTypeFields(
124                            start, end);
125    
126                    List<Tuple> tuples = new ArrayList<>(classTypeFields.size());
127    
128                    for (ClassTypeField classTypeField : classTypeFields) {
129                            tuples.add(toTuple(classTypeField));
130                    }
131    
132                    return tuples;
133            }
134    
135            @Deprecated
136            @Override
137            public int getClassTypeFieldNamesCount(long classTypeId, Locale locale)
138                    throws Exception {
139    
140                    ClassTypeReader classTypeReader = getClassTypeReader();
141    
142                    ClassType classType = classTypeReader.getClassType(classTypeId, locale);
143    
144                    return classType.getClassTypeFieldsCount();
145            }
146    
147            @Override
148            public ClassTypeReader getClassTypeReader() {
149                    return new NullClassTypeReader();
150            }
151    
152            @Deprecated
153            @Override
154            public Map<Long, String> getClassTypes(long[] groupIds, Locale locale)
155                    throws Exception {
156    
157                    ClassTypeReader classTypeReader = getClassTypeReader();
158    
159                    List<ClassType> classTypes = classTypeReader.getAvailableClassTypes(
160                            groupIds, locale);
161    
162                    Map<Long, String> classTypesMap = new HashMap<>();
163    
164                    for (ClassType classType : classTypes) {
165                            classTypesMap.put(classType.getClassTypeId(), classType.getName());
166                    }
167    
168                    return classTypesMap;
169            }
170    
171            @Override
172            public String getIconCssClass() {
173                    return null;
174            }
175    
176            /**
177             * @deprecated As of 7.0.0, with no direct replacement
178             */
179            @Deprecated
180            @Override
181            public String getIconPath(PortletRequest portletRequest) {
182                    return StringPool.BLANK;
183            }
184    
185            @Override
186            public String getPortletId() {
187                    return _portletId;
188            }
189    
190            @Override
191            public String getSubtypeTitle(Locale locale) {
192                    return LanguageUtil.get(locale, "subtype");
193            }
194    
195            @Override
196            public String getTypeName(Locale locale) {
197                    return ResourceActionsUtil.getModelResource(locale, getClassName());
198            }
199    
200            /**
201             * @deprecated As of 7.0.0, replaced by {@link #getTypeName(Locale)}
202             */
203            @Deprecated
204            @Override
205            public String getTypeName(Locale locale, boolean hasSubtypes) {
206                    return getTypeName(locale);
207            }
208    
209            @Override
210            public String getTypeName(Locale locale, long subtypeId) {
211                    return getTypeName(locale);
212            }
213    
214            @Deprecated
215            @Override
216            public PortletURL getURLAdd(
217                            LiferayPortletRequest liferayPortletRequest,
218                            LiferayPortletResponse liferayPortletResponse)
219                    throws PortalException {
220    
221                    return getURLAdd(liferayPortletRequest, liferayPortletResponse, 0);
222            }
223    
224            @Override
225            @SuppressWarnings("unused")
226            public PortletURL getURLAdd(
227                            LiferayPortletRequest liferayPortletRequest,
228                            LiferayPortletResponse liferayPortletResponse, long classTypeId)
229                    throws PortalException {
230    
231                    return null;
232            }
233    
234            @Override
235            @SuppressWarnings("unused")
236            public PortletURL getURLView(
237                            LiferayPortletResponse liferayPortletResponse,
238                            WindowState windowState)
239                    throws PortalException {
240    
241                    return null;
242            }
243    
244            @Override
245            public boolean hasAddPermission(
246                            PermissionChecker permissionChecker, long groupId, long classTypeId)
247                    throws Exception {
248    
249                    return false;
250            }
251    
252            @Deprecated
253            @Override
254            public boolean hasClassTypeFieldNames(long classTypeId, Locale locale)
255                    throws Exception {
256    
257                    ClassTypeReader classTypeReader = getClassTypeReader();
258    
259                    ClassType classType = classTypeReader.getClassType(classTypeId, locale);
260    
261                    if (classType.getClassTypeFieldsCount() > 0) {
262                            return true;
263                    }
264    
265                    return false;
266            }
267    
268            @Override
269            public boolean hasPermission(
270                            PermissionChecker permissionChecker, long classPK, String actionId)
271                    throws Exception {
272    
273                    return _PERMISSION;
274            }
275    
276            @Override
277            public boolean isActive(long companyId) {
278                    if (Validator.isNull(getPortletId())) {
279                            return true;
280                    }
281    
282                    Portlet portlet = PortletLocalServiceUtil.getPortletById(
283                            companyId, getPortletId());
284    
285                    if (portlet == null) {
286                            portlet = PortletLocalServiceUtil.getPortletById(getPortletId());
287                    }
288    
289                    if (portlet == null) {
290                            return false;
291                    }
292    
293                    return portlet.isActive();
294            }
295    
296            @Override
297            public boolean isCategorizable() {
298                    return _categorizable;
299            }
300    
301            @Override
302            public boolean isLinkable() {
303                    return _linkable;
304            }
305    
306            @Override
307            public boolean isSearchable() {
308                    return _searchable;
309            }
310    
311            @Override
312            public boolean isSelectable() {
313                    return _selectable;
314            }
315    
316            @Override
317            public boolean isSupportsClassTypes() {
318                    return _supportsClassTypes;
319            }
320    
321            @Override
322            public void setClassName(String className) {
323                    _className = className;
324            }
325    
326            @Override
327            public void setPortletId(String portletId) {
328                    _portletId = portletId;
329            }
330    
331            protected long getControlPanelPlid(ThemeDisplay themeDisplay)
332                    throws PortalException {
333    
334                    return PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId());
335            }
336    
337            protected Group getGroup(LiferayPortletRequest liferayPortletRequest) {
338                    return (Group)liferayPortletRequest.getAttribute(
339                            WebKeys.ASSET_RENDERER_FACTORY_GROUP);
340            }
341    
342            protected void setCategorizable(boolean categorizable) {
343                    _categorizable = categorizable;
344            }
345    
346            protected void setLinkable(boolean linkable) {
347                    _linkable = linkable;
348            }
349    
350            protected void setSearchable(boolean searchable) {
351                    _searchable = searchable;
352            }
353    
354            protected void setSelectable(boolean selectable) {
355                    _selectable = selectable;
356            }
357    
358            protected void setSupportsClassTypes(boolean supportsClassTypes) {
359                    _supportsClassTypes = supportsClassTypes;
360            }
361    
362            protected Tuple toTuple(ClassTypeField classTypeField) {
363                    return new Tuple(
364                            classTypeField.getLabel(), classTypeField.getName(),
365                            classTypeField.getType(), classTypeField.getClassTypeId());
366            }
367    
368            private static final boolean _PERMISSION = true;
369    
370            private boolean _categorizable = true;
371            private String _className;
372            private boolean _linkable;
373            private String _portletId;
374            private boolean _searchable;
375            private boolean _selectable = true;
376            private boolean _supportsClassTypes;
377    
378            private static class NullClassTypeReader implements ClassTypeReader {
379    
380                    @Override
381                    public List<ClassType> getAvailableClassTypes(
382                            long[] groupIds, Locale locale) {
383    
384                            return Collections.emptyList();
385                    }
386    
387                    @Override
388                    public ClassType getClassType(long classTypeId, Locale locale)
389                            throws PortalException {
390    
391                            throw new NoSuchClassTypeException();
392                    }
393    
394            }
395    
396    }