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