001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.LayoutSetVirtualHostException;
018 import com.liferay.portal.NoSuchLayoutException;
019 import com.liferay.portal.NoSuchVirtualHostException;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.exception.SystemException;
022 import com.liferay.portal.kernel.util.Http;
023 import com.liferay.portal.kernel.util.PropsKeys;
024 import com.liferay.portal.kernel.util.StringPool;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.model.Group;
027 import com.liferay.portal.model.Layout;
028 import com.liferay.portal.model.LayoutConstants;
029 import com.liferay.portal.model.LayoutSet;
030 import com.liferay.portal.model.VirtualHost;
031 import com.liferay.portal.model.impl.ColorSchemeImpl;
032 import com.liferay.portal.model.impl.ThemeImpl;
033 import com.liferay.portal.service.ServiceContext;
034 import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
035 import com.liferay.portal.util.PrefsPropsUtil;
036 import com.liferay.portal.util.PropsValues;
037
038 import java.io.File;
039 import java.io.FileInputStream;
040 import java.io.IOException;
041 import java.io.InputStream;
042
043 import java.util.Date;
044 import java.util.List;
045
046
051 public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
052
053 public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
054 throws PortalException, SystemException {
055
056 Group group = groupPersistence.findByPrimaryKey(groupId);
057
058 Date now = new Date();
059
060 long layoutSetId = counterLocalService.increment();
061
062 LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
063
064 layoutSet.setGroupId(groupId);
065 layoutSet.setCompanyId(group.getCompanyId());
066 layoutSet.setCreateDate(now);
067 layoutSet.setModifiedDate(now);
068 layoutSet.setPrivateLayout(privateLayout);
069
070 if (group.isStagingGroup()) {
071 LayoutSet liveLayoutSet = null;
072
073 Group liveGroup = group.getLiveGroup();
074
075 if (privateLayout) {
076 liveLayoutSet = liveGroup.getPrivateLayoutSet();
077 }
078 else {
079 liveLayoutSet = liveGroup.getPublicLayoutSet();
080 }
081
082 layoutSet.setLogo(liveLayoutSet.getLogo());
083 layoutSet.setLogoId(liveLayoutSet.getLogoId());
084 layoutSet.setThemeId(liveLayoutSet.getThemeId());
085 layoutSet.setColorSchemeId(liveLayoutSet.getColorSchemeId());
086 layoutSet.setWapThemeId(liveLayoutSet.getWapThemeId());
087 layoutSet.setWapColorSchemeId(liveLayoutSet.getWapColorSchemeId());
088 layoutSet.setCss(liveLayoutSet.getCss());
089 }
090 else {
091 layoutSet.setThemeId(
092 ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
093 layoutSet.setColorSchemeId(
094 ColorSchemeImpl.getDefaultRegularColorSchemeId());
095 layoutSet.setWapThemeId(
096 ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
097 layoutSet.setWapColorSchemeId(
098 ColorSchemeImpl.getDefaultWapColorSchemeId());
099 layoutSet.setCss(StringPool.BLANK);
100 }
101
102 layoutSetPersistence.update(layoutSet, false);
103
104 return layoutSet;
105 }
106
107 public void deleteLayoutSet(
108 long groupId, boolean privateLayout, ServiceContext serviceContext)
109 throws PortalException, SystemException {
110
111 Group group = groupPersistence.findByPrimaryKey(groupId);
112
113 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
114 groupId, privateLayout);
115
116
117
118 List<Layout> layouts = layoutPersistence.findByG_P_P(
119 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
120
121 for (Layout layout : layouts) {
122 try {
123 layoutLocalService.deleteLayout(layout, false, serviceContext);
124 }
125 catch (NoSuchLayoutException nsle) {
126 }
127 }
128
129
130
131 imageLocalService.deleteImage(layoutSet.getLogoId());
132
133
134
135 if (group.isOrganization() && group.isSite()) {
136 layoutSet.setPageCount(0);
137
138 layoutSetPersistence.update(layoutSet, false);
139 }
140 else {
141 layoutSetPersistence.removeByG_P(groupId, privateLayout);
142 }
143
144
145
146 counterLocalService.reset(
147 LayoutLocalServiceImpl.getCounterName(groupId, privateLayout));
148
149
150
151 try {
152 virtualHostPersistence.removeByC_L(
153 layoutSet.getCompanyId(), layoutSet.getLayoutSetId());
154 }
155 catch (NoSuchVirtualHostException nsvhe) {
156 }
157 }
158
159 public LayoutSet fetchLayoutSet(String virtualHostname)
160 throws SystemException {
161
162 virtualHostname = virtualHostname.trim().toLowerCase();
163
164 VirtualHost virtualHost = virtualHostPersistence.fetchByHostname(
165 virtualHostname);
166
167 if ((virtualHost == null) || (virtualHost.getLayoutSetId() == 0)) {
168 return null;
169 }
170
171 return layoutSetPersistence.fetchByPrimaryKey(
172 virtualHost.getLayoutSetId());
173 }
174
175 public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
176 throws PortalException, SystemException {
177
178 return layoutSetPersistence.findByG_P(groupId, privateLayout);
179 }
180
181 public LayoutSet getLayoutSet(String virtualHostname)
182 throws PortalException, SystemException {
183
184 virtualHostname = virtualHostname.trim().toLowerCase();
185
186 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
187 virtualHostname);
188
189 if (virtualHost.getLayoutSetId() == 0) {
190 throw new LayoutSetVirtualHostException(
191 "Virtual host is associated with company " +
192 virtualHost.getCompanyId());
193 }
194
195 return layoutSetPersistence.findByPrimaryKey(
196 virtualHost.getLayoutSetId());
197 }
198
199 public List<LayoutSet> getLayoutSetsByLayoutSetPrototypeUuid(
200 String layoutSetPrototypeUuid)
201 throws SystemException {
202
203 return layoutSetPersistence.findByLayoutSetPrototypeUuid(
204 layoutSetPrototypeUuid);
205 }
206
207 public void updateLayoutSetPrototypeLinkEnabled(
208 long groupId, boolean privateLayout,
209 boolean layoutSetPrototypeLinkEnabled)
210 throws PortalException, SystemException {
211
212 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
213 groupId, privateLayout);
214
215 layoutSet.setLayoutSetPrototypeLinkEnabled(
216 layoutSetPrototypeLinkEnabled);
217
218 layoutSetPersistence.update(layoutSet, false);
219 }
220
221 public void updateLogo(
222 long groupId, boolean privateLayout, boolean logo, File file)
223 throws PortalException, SystemException {
224
225 InputStream is = null;
226
227 if (logo) {
228 try{
229 is = new FileInputStream(file);
230 }
231 catch (IOException ioe) {
232 throw new SystemException(ioe);
233 }
234 }
235
236 updateLogo(groupId, privateLayout, logo, is);
237 }
238
239 public void updateLogo(
240 long groupId, boolean privateLayout, boolean logo, InputStream is)
241 throws PortalException, SystemException {
242
243 updateLogo(groupId, privateLayout, logo, is, true);
244 }
245
246 public void updateLogo(
247 long groupId, boolean privateLayout, boolean logo, InputStream is,
248 boolean cleanUpStream)
249 throws PortalException, SystemException {
250
251 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
252 groupId, privateLayout);
253
254 layoutSet.setModifiedDate(new Date());
255 layoutSet.setLogo(logo);
256
257 if (logo) {
258 long logoId = layoutSet.getLogoId();
259
260 if (logoId <= 0) {
261 logoId = counterLocalService.increment();
262
263 layoutSet.setLogoId(logoId);
264 }
265 }
266
267 layoutSetPersistence.update(layoutSet, false);
268
269 if (logo) {
270 imageLocalService.updateImage(
271 layoutSet.getLogoId(), is, cleanUpStream);
272 }
273 else {
274 imageLocalService.deleteImage(layoutSet.getLogoId());
275 }
276 }
277
278 public void updateLookAndFeel(
279 long groupId, String themeId, String colorSchemeId, String css,
280 boolean wapTheme)
281 throws PortalException, SystemException {
282
283 updateLookAndFeel(
284 groupId, false, themeId, colorSchemeId, css, wapTheme);
285 updateLookAndFeel(groupId, true, themeId, colorSchemeId, css, wapTheme);
286 }
287
288 public LayoutSet updateLookAndFeel(
289 long groupId, boolean privateLayout, String themeId,
290 String colorSchemeId, String css, boolean wapTheme)
291 throws PortalException, SystemException {
292
293 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
294 groupId, privateLayout);
295
296 layoutSet.setModifiedDate(new Date());
297
298 if (Validator.isNull(themeId)) {
299 themeId = ThemeImpl.getDefaultRegularThemeId(
300 layoutSet.getCompanyId());
301 }
302
303 if (Validator.isNull(colorSchemeId)) {
304 colorSchemeId = ColorSchemeImpl.getDefaultRegularColorSchemeId();
305 }
306
307 if (wapTheme) {
308 layoutSet.setWapThemeId(themeId);
309 layoutSet.setWapColorSchemeId(colorSchemeId);
310 }
311 else {
312 layoutSet.setThemeId(themeId);
313 layoutSet.setColorSchemeId(colorSchemeId);
314 layoutSet.setCss(css);
315 }
316
317 layoutSetPersistence.update(layoutSet, false);
318
319 if (PrefsPropsUtil.getBoolean(
320 PropsKeys.THEME_SYNC_ON_GROUP,
321 PropsValues.THEME_SYNC_ON_GROUP)) {
322
323 LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
324 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
325
326 if (wapTheme) {
327 otherLayoutSet.setWapThemeId(themeId);
328 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
329 }
330 else {
331 otherLayoutSet.setThemeId(themeId);
332 otherLayoutSet.setColorSchemeId(colorSchemeId);
333 }
334
335 layoutSetPersistence.update(otherLayoutSet, false);
336 }
337
338 return layoutSet;
339 }
340
341 public LayoutSet updatePageCount(long groupId, boolean privateLayout)
342 throws PortalException, SystemException {
343
344 int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
345
346 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
347 groupId, privateLayout);
348
349 layoutSet.setModifiedDate(new Date());
350 layoutSet.setPageCount(pageCount);
351
352 layoutSetPersistence.update(layoutSet, false);
353
354 return layoutSet;
355 }
356
357 public LayoutSet updateSettings(
358 long groupId, boolean privateLayout, String settings)
359 throws PortalException, SystemException {
360
361 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
362 groupId, privateLayout);
363
364 layoutSet.setModifiedDate(new Date());
365 layoutSet.setSettings(settings);
366
367 layoutSetPersistence.update(layoutSet, false);
368
369 return layoutSet;
370 }
371
372 public LayoutSet updateVirtualHost(
373 long groupId, boolean privateLayout, String virtualHostname)
374 throws PortalException, SystemException {
375
376 virtualHostname = virtualHostname.trim().toLowerCase();
377
378 if (virtualHostname.startsWith(Http.HTTP_WITH_SLASH) ||
379 virtualHostname.startsWith(Http.HTTPS_WITH_SLASH)) {
380
381 throw new LayoutSetVirtualHostException();
382 }
383
384 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
385 groupId, privateLayout);
386
387 if (Validator.isNotNull(virtualHostname)) {
388 try {
389 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
390 virtualHostname);
391
392 if ((virtualHost.getCompanyId() != layoutSet.getCompanyId()) ||
393 (virtualHost.getLayoutSetId() !=
394 layoutSet.getLayoutSetId())) {
395
396 throw new LayoutSetVirtualHostException();
397 }
398 }
399 catch (NoSuchVirtualHostException nsvhe) {
400 virtualHostLocalService.updateVirtualHost(
401 layoutSet.getCompanyId(), layoutSet.getLayoutSetId(),
402 virtualHostname);
403 }
404 }
405 else {
406 try {
407 virtualHostPersistence.removeByC_L(
408 layoutSet.getCompanyId(), layoutSet.getLayoutSetId());
409 }
410 catch (NoSuchVirtualHostException nsvhe) {
411 }
412 }
413
414 return layoutSet;
415 }
416
417 }