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.sites.action;
016    
017    import com.liferay.portal.kernel.portlet.PortletLayoutListener;
018    import com.liferay.portal.kernel.util.Constants;
019    import com.liferay.portal.kernel.util.ParamUtil;
020    import com.liferay.portal.kernel.util.WebKeys;
021    import com.liferay.portal.model.Group;
022    import com.liferay.portal.model.Layout;
023    import com.liferay.portal.model.LayoutTypePortlet;
024    import com.liferay.portal.model.Portlet;
025    import com.liferay.portal.model.PortletPreferencesIds;
026    import com.liferay.portal.service.GroupLocalServiceUtil;
027    import com.liferay.portal.service.LayoutServiceUtil;
028    import com.liferay.portal.service.PortletLocalServiceUtil;
029    import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
030    import com.liferay.portal.theme.ThemeDisplay;
031    import com.liferay.portal.util.PortalUtil;
032    import com.liferay.portal.util.PortletKeys;
033    import com.liferay.portlet.PortletPreferencesFactoryUtil;
034    import com.liferay.sites.kernel.util.SitesUtil;
035    
036    import java.util.List;
037    
038    import javax.portlet.PortletPreferences;
039    import javax.portlet.PortletRequest;
040    
041    import javax.servlet.http.HttpServletRequest;
042    
043    /**
044     * @author Brian Wing Shun Chan
045     */
046    public class ActionUtil {
047    
048            public static void copyPreferences(
049                            HttpServletRequest request, Layout targetLayout,
050                            Layout sourceLayout)
051                    throws Exception {
052    
053                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
054                            WebKeys.THEME_DISPLAY);
055    
056                    LayoutTypePortlet sourceLayoutTypePortlet =
057                            (LayoutTypePortlet)sourceLayout.getLayoutType();
058    
059                    List<String> sourcePortletIds = sourceLayoutTypePortlet.getPortletIds();
060    
061                    for (String sourcePortletId : sourcePortletIds) {
062    
063                            // Copy preference
064    
065                            PortletPreferencesIds portletPreferencesIds =
066                                    PortletPreferencesFactoryUtil.getPortletPreferencesIds(
067                                            request, targetLayout, sourcePortletId);
068    
069                            PortletPreferencesLocalServiceUtil.getPreferences(
070                                    portletPreferencesIds);
071    
072                            PortletPreferencesIds sourcePortletPreferencesIds =
073                                    PortletPreferencesFactoryUtil.getPortletPreferencesIds(
074                                            request, sourceLayout, sourcePortletId);
075    
076                            PortletPreferences sourcePreferences =
077                                    PortletPreferencesLocalServiceUtil.getPreferences(
078                                            sourcePortletPreferencesIds);
079    
080                            PortletPreferencesLocalServiceUtil.updatePreferences(
081                                    portletPreferencesIds.getOwnerId(),
082                                    portletPreferencesIds.getOwnerType(),
083                                    portletPreferencesIds.getPlid(),
084                                    portletPreferencesIds.getPortletId(), sourcePreferences);
085    
086                            // Copy portlet setup
087    
088                            PortletPreferences targetPreferences =
089                                    PortletPreferencesLocalServiceUtil.getPreferences(
090                                            themeDisplay.getCompanyId(),
091                                            PortletKeys.PREFS_OWNER_ID_DEFAULT,
092                                            PortletKeys.PREFS_OWNER_TYPE_LAYOUT, targetLayout.getPlid(),
093                                            sourcePortletId);
094    
095                            sourcePreferences =
096                                    PortletPreferencesLocalServiceUtil.getPreferences(
097                                            themeDisplay.getCompanyId(),
098                                            PortletKeys.PREFS_OWNER_ID_DEFAULT,
099                                            PortletKeys.PREFS_OWNER_TYPE_LAYOUT, sourceLayout.getPlid(),
100                                            sourcePortletId);
101    
102                            PortletPreferencesLocalServiceUtil.updatePreferences(
103                                    PortletKeys.PREFS_OWNER_ID_DEFAULT,
104                                    PortletKeys.PREFS_OWNER_TYPE_LAYOUT, targetLayout.getPlid(),
105                                    sourcePortletId, sourcePreferences);
106    
107                            SitesUtil.updateLayoutScopes(
108                                    themeDisplay.getUserId(), sourceLayout, targetLayout,
109                                    sourcePreferences, targetPreferences, sourcePortletId,
110                                    themeDisplay.getLanguageId());
111    
112                            Portlet sourcePortlet = PortletLocalServiceUtil.getPortletById(
113                                    sourceLayout.getCompanyId(), sourcePortletId);
114    
115                            PortletLayoutListener sourcePortletLayoutListener =
116                                    sourcePortlet.getPortletLayoutListenerInstance();
117    
118                            if (sourcePortletLayoutListener != null) {
119                                    sourcePortletLayoutListener.onAddToLayout(
120                                            sourcePortletId, targetLayout.getPlid());
121                            }
122                    }
123            }
124    
125            public static void copyPreferences(
126                            PortletRequest portletRequest, Layout targetLayout,
127                            Layout sourceLayout)
128                    throws Exception {
129    
130                    HttpServletRequest request = PortalUtil.getHttpServletRequest(
131                            portletRequest);
132    
133                    copyPreferences(request, targetLayout, sourceLayout);
134            }
135    
136            public static Group getGroup(HttpServletRequest request) throws Exception {
137                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
138                            WebKeys.THEME_DISPLAY);
139    
140                    String cmd = ParamUtil.getString(request, Constants.CMD);
141    
142                    long groupId = ParamUtil.getLong(request, "groupId");
143    
144                    Group group = null;
145    
146                    if (groupId > 0) {
147                            group = GroupLocalServiceUtil.getGroup(groupId);
148                    }
149                    else if (!cmd.equals(Constants.ADD)) {
150                            group = themeDisplay.getSiteGroup();
151                    }
152    
153                    request.setAttribute(WebKeys.GROUP, group);
154    
155                    return group;
156            }
157    
158            public static Group getGroup(PortletRequest portletRequest)
159                    throws Exception {
160    
161                    HttpServletRequest request = PortalUtil.getHttpServletRequest(
162                            portletRequest);
163    
164                    return getGroup(request);
165            }
166    
167            public static void removePortletIds(
168                            HttpServletRequest request, Layout layout)
169                    throws Exception {
170    
171                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
172                            WebKeys.THEME_DISPLAY);
173    
174                    LayoutTypePortlet layoutTypePortlet =
175                            (LayoutTypePortlet)layout.getLayoutType();
176    
177                    List<String> portletIds = layoutTypePortlet.getPortletIds();
178    
179                    for (String portletId : portletIds) {
180                            layoutTypePortlet.removePortletId(
181                                    themeDisplay.getUserId(), portletId);
182                    }
183    
184                    LayoutServiceUtil.updateLayout(
185                            layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
186                            layout.getTypeSettings());
187            }
188    
189            public static void removePortletIds(
190                            PortletRequest portletRequest, Layout layout)
191                    throws Exception {
192    
193                    HttpServletRequest request = PortalUtil.getHttpServletRequest(
194                            portletRequest);
195    
196                    removePortletIds(request, layout);
197            }
198    
199    }