1
22
23 package com.liferay.portlet.communities.model;
24
25 import com.liferay.portal.NoSuchGroupException;
26 import com.liferay.portal.PortalException;
27 import com.liferay.portal.SystemException;
28 import com.liferay.portal.kernel.io.FileCacheOutputStream;
29 import com.liferay.portal.kernel.log.Log;
30 import com.liferay.portal.kernel.log.LogFactoryUtil;
31 import com.liferay.portal.lar.PortletDataHandlerKeys;
32 import com.liferay.portal.lar.UserIdStrategy;
33 import com.liferay.portal.model.BaseModelListener;
34 import com.liferay.portal.model.Group;
35 import com.liferay.portal.model.GroupConstants;
36 import com.liferay.portal.model.LayoutSet;
37 import com.liferay.portal.service.GroupLocalServiceUtil;
38 import com.liferay.portal.service.LayoutLocalServiceUtil;
39
40 import java.util.LinkedHashMap;
41 import java.util.Map;
42
43
79 public class CommunityTemplateModelListener
80 extends BaseModelListener<LayoutSet> {
81
82 public CommunityTemplateModelListener() {
83 _templateParameters = getTemplateParameters();
84 }
85
86 public void onAfterCreate(LayoutSet layoutSet) {
87 try {
88 Group group = GroupLocalServiceUtil.getGroup(
89 layoutSet.getGroupId());
90
91 if (!group.isCommunity() ||
92 group.getName().contains(_TEMPLATE_POSTFIX)) {
93
94 return;
95 }
96
97 Group templateGroup = getTemplateGroup(group);
98
99 if (templateGroup == null) {
100 return;
101 }
102
103 Group templateStagingGroup = templateGroup.getStagingGroup();
104
105 if (templateStagingGroup == null) {
106 return;
107 }
108
109 FileCacheOutputStream fileCacheOutputStream =
110 LayoutLocalServiceUtil.exportLayoutsAsStream(
111 templateStagingGroup.getGroupId(),
112 layoutSet.isPrivateLayout(), null, _templateParameters,
113 null, null);
114
115 LayoutLocalServiceUtil.importLayouts(
116 group.getCreatorUserId(), group.getGroupId(),
117 layoutSet.isPrivateLayout(), _templateParameters,
118 fileCacheOutputStream.getFileInputStream());
119 }
120 catch (Exception e) {
121 _log.error(
122 "Unble to import layouts for group " + layoutSet.getGroupId(),
123 e);
124 }
125 }
126
127 protected Group getTemplateGroup(Group group)
128 throws PortalException, SystemException {
129
130 String templateCommunityName = null;
131
132 int type = group.getType();
133
134 if (type == GroupConstants.TYPE_COMMUNITY_OPEN) {
135 templateCommunityName = _OPEN_TEMPLATE_COMMUNITY_NAME;
136 }
137 else if (type == GroupConstants.TYPE_COMMUNITY_PRIVATE) {
138 templateCommunityName = _PRIVATE_TEMPLATE_COMMUNITY_NAME;
139 }
140 else if (type == GroupConstants.TYPE_COMMUNITY_RESTRICTED) {
141 templateCommunityName = _RESTRICTED_TEMPLATE_COMMUNITY_NAME;
142 }
143 else {
144 throw new IllegalArgumentException(
145 "Invalid community type " + group.getType());
146 }
147
148 Group templateGroup = null;
149
150 try {
151 templateGroup = GroupLocalServiceUtil.getGroup(
152 group.getCompanyId(), templateCommunityName);
153 }
154 catch (NoSuchGroupException nsge1) {
155 try {
156 templateGroup = GroupLocalServiceUtil.getGroup(
157 group.getCompanyId(), _DEFAULT_TEMPLATE_COMMUNITY_NAME);
158 }
159 catch (NoSuchGroupException nsge2) {
160 }
161 }
162
163 return templateGroup;
164 }
165
166 protected Map<String, String[]> getTemplateParameters() {
167 Map<String, String[]> parameterMap =
168 new LinkedHashMap<String, String[]>();
169
170 parameterMap.put(
171 PortletDataHandlerKeys.CATEGORIES,
172 new String[] {Boolean.TRUE.toString()});
173 parameterMap.put(
174 PortletDataHandlerKeys.DATA_STRATEGY,
175 new String[] {PortletDataHandlerKeys.DATA_STRATEGY_MIRROR});
176 parameterMap.put(
177 PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS,
178 new String[] {Boolean.FALSE.toString()});
179 parameterMap.put(
180 PortletDataHandlerKeys.DELETE_PORTLET_DATA,
181 new String[] {Boolean.FALSE.toString()});
182 parameterMap.put(
183 PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE,
184 new String[] {
185 PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_NAME
186 });
187 parameterMap.put(
188 PortletDataHandlerKeys.PERMISSIONS,
189 new String[] {Boolean.TRUE.toString()});
190 parameterMap.put(
191 PortletDataHandlerKeys.PORTLET_DATA,
192 new String[] {Boolean.TRUE.toString()});
193 parameterMap.put(
194 PortletDataHandlerKeys.PORTLET_DATA_ALL,
195 new String[] {Boolean.TRUE.toString()});
196 parameterMap.put(
197 PortletDataHandlerKeys.PORTLET_SETUP,
198 new String[] {Boolean.TRUE.toString()});
199 parameterMap.put(
200 PortletDataHandlerKeys.PORTLET_USER_PREFERENCES,
201 new String[] {Boolean.TRUE.toString()});
202 parameterMap.put(
203 PortletDataHandlerKeys.PORTLETS_MERGE_MODE,
204 new String[] {
205 PortletDataHandlerKeys.PORTLETS_MERGE_MODE_ADD_TO_BOTTOM
206 });
207 parameterMap.put(
208 PortletDataHandlerKeys.THEME,
209 new String[] {Boolean.FALSE.toString()});
210 parameterMap.put(
211 PortletDataHandlerKeys.USER_ID_STRATEGY,
212 new String[] {UserIdStrategy.CURRENT_USER_ID});
213 parameterMap.put(
214 PortletDataHandlerKeys.USER_PERMISSIONS,
215 new String[] {Boolean.FALSE.toString()});
216
217 return parameterMap;
218 }
219
220 private static final String _DEFAULT_TEMPLATE_COMMUNITY_NAME =
221 "DEFAULT_TEMPLATE";
222
223 private static final String _OPEN_TEMPLATE_COMMUNITY_NAME =
224 "OPEN_TEMPLATE";
225
226 private static final String _PRIVATE_TEMPLATE_COMMUNITY_NAME =
227 "PRIVATE_TEMPLATE";
228
229 private static final String _RESTRICTED_TEMPLATE_COMMUNITY_NAME =
230 "RESTRICTED_TEMPLATE";
231
232 private static final String _TEMPLATE_POSTFIX = "_TEMPLATE";
233
234 private static Log _log =
235 LogFactoryUtil.getLog(CommunityTemplateModelListener.class);
236
237 private Map<String, String[]> _templateParameters;
238
239 }