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