001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.kernel.exception.LayoutSetVirtualHostException;
018 import com.liferay.portal.kernel.exception.NoSuchImageException;
019 import com.liferay.portal.kernel.exception.NoSuchVirtualHostException;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.exception.SystemException;
022 import com.liferay.portal.kernel.log.Log;
023 import com.liferay.portal.kernel.log.LogFactoryUtil;
024 import com.liferay.portal.kernel.model.Group;
025 import com.liferay.portal.kernel.model.Image;
026 import com.liferay.portal.kernel.model.LayoutSet;
027 import com.liferay.portal.kernel.model.VirtualHost;
028 import com.liferay.portal.kernel.service.ServiceContext;
029 import com.liferay.portal.kernel.util.ColorSchemeFactoryUtil;
030 import com.liferay.portal.kernel.util.FileUtil;
031 import com.liferay.portal.kernel.util.PortalUtil;
032 import com.liferay.portal.kernel.util.PropsKeys;
033 import com.liferay.portal.kernel.util.StringPool;
034 import com.liferay.portal.kernel.util.StringUtil;
035 import com.liferay.portal.kernel.util.ThemeFactoryUtil;
036 import com.liferay.portal.kernel.util.Validator;
037 import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
038 import com.liferay.portal.util.PrefsPropsUtil;
039 import com.liferay.portal.util.PropsValues;
040
041 import java.io.File;
042 import java.io.IOException;
043 import java.io.InputStream;
044
045 import java.util.Date;
046 import java.util.List;
047
048
053 public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
054
055 @Override
056 public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
057 throws PortalException {
058
059 Group group = groupPersistence.findByPrimaryKey(groupId);
060
061 Date now = new Date();
062
063 long layoutSetId = counterLocalService.increment();
064
065 LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
066
067 layoutSet.setGroupId(groupId);
068 layoutSet.setCompanyId(group.getCompanyId());
069 layoutSet.setCreateDate(now);
070 layoutSet.setModifiedDate(now);
071 layoutSet.setPrivateLayout(privateLayout);
072
073 layoutSet = initLayoutSet(layoutSet);
074
075 layoutSetPersistence.update(layoutSet);
076
077 return layoutSet;
078 }
079
080 @Override
081 public void deleteLayoutSet(
082 long groupId, boolean privateLayout, ServiceContext serviceContext)
083 throws PortalException {
084
085 Group group = groupPersistence.findByPrimaryKey(groupId);
086
087 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
088 groupId, privateLayout);
089
090
091
092 serviceContext.setAttribute("updatePageCount", Boolean.FALSE);
093
094 layoutLocalService.deleteLayouts(
095 groupId, privateLayout, serviceContext);
096
097
098
099 if (group.isStagingGroup() || !group.isOrganization() ||
100 !group.isSite()) {
101
102 try {
103 imageLocalService.deleteImage(layoutSet.getLogoId());
104 }
105 catch (NoSuchImageException nsie) {
106 if (_log.isWarnEnabled()) {
107 _log.warn(
108 "Unable to delete image " + layoutSet.getLogoId());
109 }
110 }
111 }
112
113
114
115 if (!group.isStagingGroup() && group.isOrganization() &&
116 group.isSite()) {
117
118 layoutSet = initLayoutSet(layoutSet);
119
120 layoutSet.setLogoId(layoutSet.getLogoId());
121
122 layoutSetPersistence.update(layoutSet);
123 }
124 else {
125 layoutSetPersistence.removeByG_P(groupId, privateLayout);
126 }
127
128
129
130 try {
131 virtualHostPersistence.removeByC_L(
132 layoutSet.getCompanyId(), layoutSet.getLayoutSetId());
133 }
134 catch (NoSuchVirtualHostException nsvhe) {
135 }
136 }
137
138 @Override
139 public LayoutSet fetchLayoutSet(String virtualHostname) {
140 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
141
142 VirtualHost virtualHost = virtualHostPersistence.fetchByHostname(
143 virtualHostname);
144
145 if ((virtualHost == null) || (virtualHost.getLayoutSetId() == 0)) {
146 return null;
147 }
148
149 return layoutSetPersistence.fetchByPrimaryKey(
150 virtualHost.getLayoutSetId());
151 }
152
153 @Override
154 public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
155 throws PortalException {
156
157 return layoutSetPersistence.findByG_P(groupId, privateLayout);
158 }
159
160 @Override
161 public LayoutSet getLayoutSet(String virtualHostname)
162 throws PortalException {
163
164 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
165
166 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
167 virtualHostname);
168
169 if (virtualHost.getLayoutSetId() == 0) {
170 throw new LayoutSetVirtualHostException(
171 "Virtual host is associated with company " +
172 virtualHost.getCompanyId());
173 }
174
175 return layoutSetPersistence.findByPrimaryKey(
176 virtualHost.getLayoutSetId());
177 }
178
179 @Override
180 public List<LayoutSet> getLayoutSetsByLayoutSetPrototypeUuid(
181 String layoutSetPrototypeUuid) {
182
183 return layoutSetPersistence.findByLayoutSetPrototypeUuid(
184 layoutSetPrototypeUuid);
185 }
186
187
197 @Override
198 public void updateLayoutSetPrototypeLinkEnabled(
199 long groupId, boolean privateLayout,
200 boolean layoutSetPrototypeLinkEnabled,
201 String layoutSetPrototypeUuid)
202 throws PortalException {
203
204 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
205 groupId, privateLayout);
206
207 if (Validator.isNull(layoutSetPrototypeUuid)) {
208 layoutSetPrototypeUuid = layoutSet.getLayoutSetPrototypeUuid();
209 }
210
211 if (Validator.isNull(layoutSetPrototypeUuid)) {
212 layoutSetPrototypeLinkEnabled = false;
213 }
214
215 layoutSet.setLayoutSetPrototypeLinkEnabled(
216 layoutSetPrototypeLinkEnabled);
217 layoutSet.setLayoutSetPrototypeUuid(layoutSetPrototypeUuid);
218
219 layoutSetPersistence.update(layoutSet);
220 }
221
222 @Override
223 public LayoutSet updateLogo(
224 long groupId, boolean privateLayout, boolean logo, byte[] bytes)
225 throws PortalException {
226
227 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
228 groupId, privateLayout);
229
230 layoutSet.setModifiedDate(new Date());
231
232 PortalUtil.updateImageId(layoutSet, logo, bytes, "logoId", 0, 0, 0);
233
234 return layoutSetPersistence.update(layoutSet);
235 }
236
237 @Override
238 public LayoutSet updateLogo(
239 long groupId, boolean privateLayout, boolean logo, File file)
240 throws PortalException {
241
242 byte[] bytes = null;
243
244 try {
245 bytes = FileUtil.getBytes(file);
246 }
247 catch (IOException ioe) {
248 throw new SystemException(ioe);
249 }
250
251 return updateLogo(groupId, privateLayout, logo, bytes);
252 }
253
254 @Override
255 public LayoutSet updateLogo(
256 long groupId, boolean privateLayout, boolean logo, InputStream is)
257 throws PortalException {
258
259 return updateLogo(groupId, privateLayout, logo, is, true);
260 }
261
262 @Override
263 public LayoutSet updateLogo(
264 long groupId, boolean privateLayout, boolean logo, InputStream is,
265 boolean cleanUpStream)
266 throws PortalException {
267
268 byte[] bytes = null;
269
270 try {
271 bytes = FileUtil.getBytes(is, -1, cleanUpStream);
272 }
273 catch (IOException ioe) {
274 throw new SystemException(ioe);
275 }
276
277 return updateLogo(groupId, privateLayout, logo, bytes);
278 }
279
280 @Override
281 public LayoutSet updateLookAndFeel(
282 long groupId, boolean privateLayout, String themeId,
283 String colorSchemeId, String css)
284 throws PortalException {
285
286 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
287 groupId, privateLayout);
288
289 layoutSet.setModifiedDate(new Date());
290
291 if (Validator.isNull(themeId)) {
292 themeId = ThemeFactoryUtil.getDefaultRegularThemeId(
293 layoutSet.getCompanyId());
294 }
295
296 if (Validator.isNull(colorSchemeId)) {
297 colorSchemeId =
298 ColorSchemeFactoryUtil.getDefaultRegularColorSchemeId();
299 }
300
301 layoutSet.setThemeId(themeId);
302 layoutSet.setColorSchemeId(colorSchemeId);
303 layoutSet.setCss(css);
304
305 layoutSetPersistence.update(layoutSet);
306
307 if (PrefsPropsUtil.getBoolean(
308 PropsKeys.THEME_SYNC_ON_GROUP,
309 PropsValues.THEME_SYNC_ON_GROUP)) {
310
311 LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
312 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
313
314 otherLayoutSet.setThemeId(themeId);
315 otherLayoutSet.setColorSchemeId(colorSchemeId);
316
317 layoutSetPersistence.update(otherLayoutSet);
318 }
319
320 return layoutSet;
321 }
322
323 @Override
324 public void updateLookAndFeel(
325 long groupId, String themeId, String colorSchemeId, String css)
326 throws PortalException {
327
328 updateLookAndFeel(groupId, false, themeId, colorSchemeId, css);
329 updateLookAndFeel(groupId, true, themeId, colorSchemeId, css);
330 }
331
332 @Override
333 public LayoutSet updatePageCount(long groupId, boolean privateLayout)
334 throws PortalException {
335
336 int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
337
338 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
339 groupId, privateLayout);
340
341 layoutSet.setModifiedDate(new Date());
342 layoutSet.setPageCount(pageCount);
343
344 layoutSetPersistence.update(layoutSet);
345
346 return layoutSet;
347 }
348
349 @Override
350 public LayoutSet updateSettings(
351 long groupId, boolean privateLayout, String settings)
352 throws PortalException {
353
354 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
355 groupId, privateLayout);
356
357 layoutSet.setModifiedDate(new Date());
358 layoutSet.setSettings(settings);
359
360 layoutSetPersistence.update(layoutSet);
361
362 return layoutSet;
363 }
364
365 @Override
366 public LayoutSet updateVirtualHost(
367 long groupId, boolean privateLayout, String virtualHostname)
368 throws PortalException {
369
370 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
371
372 if (Validator.isNotNull(virtualHostname) &&
373 !Validator.isDomain(virtualHostname)) {
374
375 throw new LayoutSetVirtualHostException();
376 }
377
378 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
379 groupId, privateLayout);
380
381 if (Validator.isNotNull(virtualHostname)) {
382 VirtualHost virtualHost = virtualHostPersistence.fetchByHostname(
383 virtualHostname);
384
385 if (virtualHost == null) {
386 virtualHostLocalService.updateVirtualHost(
387 layoutSet.getCompanyId(), layoutSet.getLayoutSetId(),
388 virtualHostname);
389 }
390 else {
391 if ((virtualHost.getCompanyId() != layoutSet.getCompanyId()) ||
392 (virtualHost.getLayoutSetId() !=
393 layoutSet.getLayoutSetId())) {
394
395 throw new LayoutSetVirtualHostException();
396 }
397 }
398 }
399 else {
400 try {
401 virtualHostPersistence.removeByC_L(
402 layoutSet.getCompanyId(), layoutSet.getLayoutSetId());
403 }
404 catch (NoSuchVirtualHostException nsvhe) {
405 }
406 }
407
408 return layoutSet;
409 }
410
411 protected LayoutSet initLayoutSet(LayoutSet layoutSet)
412 throws PortalException {
413
414 Group group = layoutSet.getGroup();
415
416 boolean privateLayout = layoutSet.isPrivateLayout();
417
418 if (group.isStagingGroup()) {
419 LayoutSet liveLayoutSet = null;
420
421 Group liveGroup = group.getLiveGroup();
422
423 if (privateLayout) {
424 liveLayoutSet = liveGroup.getPrivateLayoutSet();
425 }
426 else {
427 liveLayoutSet = liveGroup.getPublicLayoutSet();
428 }
429
430 layoutSet.setLogoId(liveLayoutSet.getLogoId());
431
432 if (liveLayoutSet.isLogo()) {
433 Image logoImage = imageLocalService.getImage(
434 liveLayoutSet.getLogoId());
435
436 long logoId = counterLocalService.increment();
437
438 imageLocalService.updateImage(
439 logoId, logoImage.getTextObj(), logoImage.getType(),
440 logoImage.getHeight(), logoImage.getWidth(),
441 logoImage.getSize());
442
443 layoutSet.setLogoId(logoId);
444 }
445
446 layoutSet.setThemeId(liveLayoutSet.getThemeId());
447 layoutSet.setColorSchemeId(liveLayoutSet.getColorSchemeId());
448 layoutSet.setCss(liveLayoutSet.getCss());
449 layoutSet.setSettings(liveLayoutSet.getSettings());
450 }
451 else {
452 layoutSet.setThemeId(
453 ThemeFactoryUtil.getDefaultRegularThemeId(
454 group.getCompanyId()));
455 layoutSet.setColorSchemeId(
456 ColorSchemeFactoryUtil.getDefaultRegularColorSchemeId());
457 layoutSet.setCss(StringPool.BLANK);
458 layoutSet.setSettings(StringPool.BLANK);
459 }
460
461 return layoutSet;
462 }
463
464 private static final Log _log = LogFactoryUtil.getLog(
465 LayoutSetLocalServiceImpl.class);
466
467 }