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