1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.portletconfiguration.action;
16  
17  import com.liferay.portal.kernel.exception.SystemException;
18  import com.liferay.portal.kernel.servlet.SessionErrors;
19  import com.liferay.portal.kernel.util.GetterUtil;
20  import com.liferay.portal.kernel.util.ParamUtil;
21  import com.liferay.portal.kernel.util.Validator;
22  import com.liferay.portal.model.Layout;
23  import com.liferay.portal.model.LayoutTypePortlet;
24  import com.liferay.portal.model.Portlet;
25  import com.liferay.portal.model.PublicRenderParameter;
26  import com.liferay.portal.theme.ThemeDisplay;
27  import com.liferay.portal.util.WebKeys;
28  import com.liferay.portlet.PortletPreferencesFactoryUtil;
29  import com.liferay.portlet.portletconfiguration.util.PublicRenderParameterConfiguration;
30  import com.liferay.portlet.portletconfiguration.util.PublicRenderParameterIdentifierComparator;
31  import com.liferay.portlet.portletconfiguration.util.PublicRenderParameterIdentifierConfigurationComparator;
32  
33  import java.util.ArrayList;
34  import java.util.Collections;
35  import java.util.HashMap;
36  import java.util.HashSet;
37  import java.util.List;
38  import java.util.Map;
39  import java.util.Set;
40  import java.util.TreeSet;
41  
42  import javax.portlet.PortletPreferences;
43  import javax.portlet.RenderRequest;
44  
45  /**
46   * <a href="ActionUtil.java.html"><b><i>View Source</i></b></a>
47   *
48   * @author Jorge Ferrer
49   */
50  public class ActionUtil {
51  
52      public static void getLayoutPublicRenderParameters(
53              RenderRequest renderRequest)
54          throws SystemException {
55  
56          ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
57              WebKeys.THEME_DISPLAY);
58  
59          Set<String> identifiers = new HashSet<String>();
60  
61          Set<PublicRenderParameter> publicRenderParameters =
62              new TreeSet<PublicRenderParameter>(
63                  new PublicRenderParameterIdentifierComparator());
64  
65          LayoutTypePortlet layoutTypePortlet =
66              themeDisplay.getLayoutTypePortlet();
67  
68          List<Portlet> portlets = layoutTypePortlet.getAllPortlets();
69  
70          for (Portlet portlet : portlets) {
71              for (PublicRenderParameter publicRenderParameter:
72                      portlet.getPublicRenderParameters()) {
73  
74                  if (!identifiers.contains(
75                          publicRenderParameter.getIdentifier())) {
76  
77                      identifiers.add(publicRenderParameter.getIdentifier());
78  
79                      publicRenderParameters.add(publicRenderParameter);
80                  }
81              }
82          }
83  
84          renderRequest.setAttribute(
85              WebKeys.PUBLIC_RENDER_PARAMETERS, publicRenderParameters);
86      }
87  
88      public static void getPublicRenderParameterConfigurationList(
89              RenderRequest renderRequest, Portlet portlet)
90          throws Exception {
91  
92          ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
93              WebKeys.THEME_DISPLAY);
94  
95          Layout layout = themeDisplay.getLayout();
96  
97          PortletPreferences preferences =
98              PortletPreferencesFactoryUtil.getLayoutPortletSetup(
99                  layout, portlet.getPortletId());
100 
101         Map<String, String> mappings = new HashMap<String, String>();
102 
103         if (SessionErrors.isEmpty(renderRequest)) {
104             Set<PublicRenderParameter> publicRenderParameters =
105                 (Set<PublicRenderParameter>)renderRequest.getAttribute(
106                     WebKeys.PUBLIC_RENDER_PARAMETERS);
107 
108             for (PublicRenderParameter publicRenderParameter :
109                     publicRenderParameters) {
110 
111                 String mapping = preferences.getValue(
112                     _MAPPING_PREFIX + publicRenderParameter.getIdentifier(),
113                     null);
114 
115                 if (Validator.isNotNull(mapping)) {
116                     mappings.put(
117                         mapping, publicRenderParameter.getIdentifier());
118                 }
119             }
120         }
121         else {
122             for (PublicRenderParameter publicRenderParameter :
123                     portlet.getPublicRenderParameters()) {
124 
125                 String mapping = ParamUtil.getString(
126                     renderRequest,
127                     _MAPPING_PREFIX + publicRenderParameter.getIdentifier());
128 
129                 mappings.put(publicRenderParameter.getIdentifier(), mapping);
130             }
131         }
132 
133         List<PublicRenderParameterConfiguration>
134             publicRenderParameterConfigurations =
135                 new ArrayList<PublicRenderParameterConfiguration>();
136 
137         for (PublicRenderParameter publicRenderParameter:
138                 portlet.getPublicRenderParameters()) {
139 
140             boolean ignore = false;
141 
142             String ignoreKey =
143                 _IGNORE_PREFIX + publicRenderParameter.getIdentifier();
144 
145             if (SessionErrors.isEmpty(renderRequest)) {
146                 ignore = GetterUtil.getBoolean(
147                     preferences.getValue(ignoreKey, null));
148             }
149             else {
150                 ignore = GetterUtil.getBoolean(
151                     ParamUtil.getString(renderRequest, ignoreKey));
152             }
153 
154             publicRenderParameterConfigurations.add(
155                 new PublicRenderParameterConfiguration(
156                     publicRenderParameter,
157                     mappings.get(publicRenderParameter.getIdentifier()),
158                     ignore));
159         }
160 
161         Collections.sort(
162             publicRenderParameterConfigurations,
163             new PublicRenderParameterIdentifierConfigurationComparator());
164 
165         renderRequest.setAttribute(
166             WebKeys.PUBLIC_RENDER_PARAMETER_CONFIGURATIONS,
167             publicRenderParameterConfigurations);
168     }
169 
170     private static final String _IGNORE_PREFIX =
171         PublicRenderParameterConfiguration.IGNORE_PREFIX;
172 
173     private static final String _MAPPING_PREFIX =
174         PublicRenderParameterConfiguration.MAPPING_PREFIX;
175 
176 }