001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.LocaleException;
018 import com.liferay.portal.NoSuchLayoutException;
019 import com.liferay.portal.RequiredLayoutException;
020 import com.liferay.portal.SitemapChangeFrequencyException;
021 import com.liferay.portal.SitemapIncludeException;
022 import com.liferay.portal.SitemapPagePriorityException;
023 import com.liferay.portal.kernel.bean.BeanReference;
024 import com.liferay.portal.kernel.dao.orm.QueryUtil;
025 import com.liferay.portal.kernel.exception.PortalException;
026 import com.liferay.portal.kernel.exception.SystemException;
027 import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
028 import com.liferay.portal.kernel.lar.MissingReferences;
029 import com.liferay.portal.kernel.lar.PortletDataException;
030 import com.liferay.portal.kernel.systemevent.SystemEvent;
031 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntry;
032 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntryThreadLocal;
033 import com.liferay.portal.kernel.util.ArrayUtil;
034 import com.liferay.portal.kernel.util.Constants;
035 import com.liferay.portal.kernel.util.FileUtil;
036 import com.liferay.portal.kernel.util.GetterUtil;
037 import com.liferay.portal.kernel.util.ListUtil;
038 import com.liferay.portal.kernel.util.LocaleUtil;
039 import com.liferay.portal.kernel.util.ParamUtil;
040 import com.liferay.portal.kernel.util.StringBundler;
041 import com.liferay.portal.kernel.util.StringPool;
042 import com.liferay.portal.kernel.util.StringUtil;
043 import com.liferay.portal.kernel.util.UnicodeProperties;
044 import com.liferay.portal.kernel.util.Validator;
045 import com.liferay.portal.kernel.workflow.WorkflowConstants;
046 import com.liferay.portal.lar.LayoutExporter;
047 import com.liferay.portal.lar.LayoutImporter;
048 import com.liferay.portal.lar.PortletExporter;
049 import com.liferay.portal.lar.PortletImporter;
050 import com.liferay.portal.lar.backgroundtask.BackgroundTaskContextMapFactory;
051 import com.liferay.portal.lar.backgroundtask.LayoutExportBackgroundTaskExecutor;
052 import com.liferay.portal.lar.backgroundtask.LayoutImportBackgroundTaskExecutor;
053 import com.liferay.portal.lar.backgroundtask.PortletExportBackgroundTaskExecutor;
054 import com.liferay.portal.lar.backgroundtask.PortletImportBackgroundTaskExecutor;
055 import com.liferay.portal.model.BackgroundTask;
056 import com.liferay.portal.model.Group;
057 import com.liferay.portal.model.GroupConstants;
058 import com.liferay.portal.model.Layout;
059 import com.liferay.portal.model.LayoutConstants;
060 import com.liferay.portal.model.LayoutFriendlyURL;
061 import com.liferay.portal.model.LayoutPrototype;
062 import com.liferay.portal.model.LayoutReference;
063 import com.liferay.portal.model.LayoutSet;
064 import com.liferay.portal.model.LayoutSetPrototype;
065 import com.liferay.portal.model.LayoutTypePortlet;
066 import com.liferay.portal.model.PortletConstants;
067 import com.liferay.portal.model.ResourceConstants;
068 import com.liferay.portal.model.ResourcePermission;
069 import com.liferay.portal.model.SystemEventConstants;
070 import com.liferay.portal.model.User;
071 import com.liferay.portal.model.UserGroup;
072 import com.liferay.portal.model.impl.VirtualLayout;
073 import com.liferay.portal.service.ServiceContext;
074 import com.liferay.portal.service.base.LayoutLocalServiceBaseImpl;
075 import com.liferay.portal.util.PortalUtil;
076 import com.liferay.portal.util.PropsValues;
077 import com.liferay.portal.util.comparator.LayoutComparator;
078 import com.liferay.portal.util.comparator.LayoutPriorityComparator;
079 import com.liferay.portlet.dynamicdatalists.RecordSetDuplicateRecordSetKeyException;
080 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateStructureKeyException;
081 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
082 import com.liferay.portlet.sites.util.Sites;
083 import com.liferay.portlet.sites.util.SitesUtil;
084
085 import java.io.File;
086 import java.io.IOException;
087 import java.io.InputStream;
088 import java.io.Serializable;
089
090 import java.util.ArrayList;
091 import java.util.Date;
092 import java.util.HashMap;
093 import java.util.HashSet;
094 import java.util.LinkedHashSet;
095 import java.util.List;
096 import java.util.Locale;
097 import java.util.Map;
098 import java.util.Set;
099
100
114 public class LayoutLocalServiceImpl extends LayoutLocalServiceBaseImpl {
115
116
123 public static String getCounterName(long groupId, boolean privateLayout) {
124 StringBundler sb = new StringBundler();
125
126 sb.append(Layout.class.getName());
127 sb.append(StringPool.POUND);
128 sb.append(groupId);
129 sb.append(StringPool.POUND);
130 sb.append(privateLayout);
131
132 return sb.toString();
133 }
134
135
195 @Override
196 public Layout addLayout(
197 long userId, long groupId, boolean privateLayout,
198 long parentLayoutId, Map<Locale, String> nameMap,
199 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
200 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
201 String type, boolean hidden, String friendlyURL,
202 ServiceContext serviceContext)
203 throws PortalException, SystemException {
204
205 Map<Locale, String> friendlyURLMap = new HashMap<Locale, String>();
206
207 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
208
209 return addLayout(
210 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
211 descriptionMap, keywordsMap, robotsMap, type, StringPool.BLANK,
212 hidden, friendlyURLMap, serviceContext);
213 }
214
215
267 @Override
268 public Layout addLayout(
269 long userId, long groupId, boolean privateLayout,
270 long parentLayoutId, Map<Locale, String> nameMap,
271 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
272 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
273 String type, String typeSettings, boolean hidden,
274 Map<Locale, String> friendlyURLMap, ServiceContext serviceContext)
275 throws PortalException, SystemException {
276
277
278
279 User user = userPersistence.findByPrimaryKey(userId);
280 long layoutId = getNextLayoutId(groupId, privateLayout);
281 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
282 groupId, privateLayout, parentLayoutId);
283 String name = nameMap.get(LocaleUtil.getSiteDefault());
284 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
285 groupId, privateLayout, layoutId, name, friendlyURLMap);
286
287 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
288
289 int priority = layoutLocalServiceHelper.getNextPriority(
290 groupId, privateLayout, parentLayoutId, null, -1);
291
292 layoutLocalServiceHelper.validate(
293 groupId, privateLayout, layoutId, parentLayoutId, name, type,
294 hidden, friendlyURLMap);
295
296 Date now = new Date();
297
298 long plid = counterLocalService.increment();
299
300 Layout layout = layoutPersistence.create(plid);
301
302 layout.setUuid(serviceContext.getUuid());
303 layout.setGroupId(groupId);
304 layout.setCompanyId(user.getCompanyId());
305 layout.setUserId(user.getUserId());
306 layout.setUserName(user.getFullName());
307 layout.setCreateDate(serviceContext.getCreateDate(now));
308 layout.setModifiedDate(serviceContext.getModifiedDate(now));
309 layout.setPrivateLayout(privateLayout);
310 layout.setLayoutId(layoutId);
311 layout.setParentLayoutId(parentLayoutId);
312 layout.setNameMap(nameMap);
313 layout.setTitleMap(titleMap);
314 layout.setDescriptionMap(descriptionMap);
315 layout.setKeywordsMap(keywordsMap);
316 layout.setRobotsMap(robotsMap);
317 layout.setType(type);
318 layout.setHidden(hidden);
319 layout.setFriendlyURL(friendlyURL);
320 layout.setPriority(priority);
321
322 boolean layoutUpdateable = ParamUtil.getBoolean(
323 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
324
325 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
326
327 typeSettingsProperties.fastLoad(typeSettings);
328
329 if (!layoutUpdateable) {
330 typeSettingsProperties.put(
331 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
332 }
333
334 validateTypeSettingsProperties(typeSettingsProperties);
335
336 layout.setTypeSettingsProperties(typeSettingsProperties);
337
338 String layoutPrototypeUuid = ParamUtil.getString(
339 serviceContext, "layoutPrototypeUuid");
340 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
341 serviceContext, "layoutPrototypeLinkEnabled",
342 PropsValues.LAYOUT_PROTOTYPE_LINK_ENABLED_DEFAULT);
343
344 if (Validator.isNotNull(layoutPrototypeUuid)) {
345 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
346 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
347 }
348
349 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
350 LayoutTypePortlet layoutTypePortlet =
351 (LayoutTypePortlet)layout.getLayoutType();
352
353 layoutTypePortlet.setLayoutTemplateId(
354 0, PropsValues.LAYOUT_DEFAULT_TEMPLATE_ID, false);
355 }
356
357 layout.setExpandoBridgeAttributes(serviceContext);
358
359 layoutPersistence.update(layout);
360
361 if (Validator.isNotNull(layoutPrototypeUuid) &&
362 !layoutPrototypeLinkEnabled) {
363
364 LayoutPrototype layoutPrototype =
365 layoutPrototypeLocalService.
366 getLayoutPrototypeByUuidAndCompanyId(
367 layoutPrototypeUuid, layout.getCompanyId());
368
369 try {
370 SitesUtil.applyLayoutPrototype(
371 layoutPrototype, layout, layoutPrototypeLinkEnabled);
372 }
373 catch (PortalException pe) {
374 throw pe;
375 }
376 catch (SystemException se) {
377 throw se;
378 }
379 catch (Exception e) {
380 throw new SystemException(e);
381 }
382 }
383
384
385
386 boolean addGroupPermissions = true;
387
388 Group group = groupLocalService.getGroup(groupId);
389
390 if (privateLayout && group.isUser()) {
391 addGroupPermissions = false;
392 }
393
394 boolean addGuestPermissions = false;
395
396 if (!privateLayout ||
397 type.equals(LayoutConstants.TYPE_CONTROL_PANEL) ||
398 group.isLayoutSetPrototype()) {
399
400 addGuestPermissions = true;
401 }
402
403 resourceLocalService.addResources(
404 user.getCompanyId(), groupId, user.getUserId(),
405 Layout.class.getName(), layout.getPlid(), false,
406 addGroupPermissions, addGuestPermissions);
407
408
409
410 groupLocalService.updateSite(groupId, true);
411
412
413
414 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
415 user.getUserId(), user.getCompanyId(), groupId, plid, privateLayout,
416 friendlyURLMap, serviceContext);
417
418
419
420 layoutSetLocalService.updatePageCount(groupId, privateLayout);
421
422 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
423 groupId, privateLayout);
424
425 layout.setLayoutSet(layoutSet);
426
427
428
429 if (PropsValues.LAYOUT_COMMENTS_ENABLED) {
430 mbMessageLocalService.addDiscussionMessage(
431 userId, user.getFullName(), groupId, Layout.class.getName(),
432 plid, WorkflowConstants.ACTION_PUBLISH);
433 }
434
435 return layout;
436 }
437
438
494 @Override
495 public Layout addLayout(
496 long userId, long groupId, boolean privateLayout,
497 long parentLayoutId, String name, String title, String description,
498 String type, boolean hidden, String friendlyURL,
499 ServiceContext serviceContext)
500 throws PortalException, SystemException {
501
502 Locale locale = LocaleUtil.getSiteDefault();
503
504 Map<Locale, String> nameMap = new HashMap<Locale, String>();
505
506 nameMap.put(locale, name);
507
508 Map<Locale, String> titleMap = new HashMap<Locale, String>();
509
510 titleMap.put(locale, title);
511
512 Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
513
514 descriptionMap.put(locale, description);
515
516 Map<Locale, String> friendlyURLMap = new HashMap<Locale, String>();
517
518 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
519
520 return addLayout(
521 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
522 descriptionMap, new HashMap<Locale, String>(),
523 new HashMap<Locale, String>(), type, StringPool.BLANK, hidden,
524 friendlyURLMap, serviceContext);
525 }
526
527
537 @Override
538 @SystemEvent(
539 action = SystemEventConstants.ACTION_SKIP,
540 type = SystemEventConstants.TYPE_DELETE)
541 public void deleteLayout(
542 Layout layout, boolean updateLayoutSet,
543 ServiceContext serviceContext)
544 throws PortalException, SystemException {
545
546
547
548 if (layout.getParentLayoutId() ==
549 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
550
551 List<Layout> rootLayouts = layoutPersistence.findByG_P_P(
552 layout.getGroupId(), layout.isPrivateLayout(),
553 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, 0, 2);
554
555 if (rootLayouts.size() > 1) {
556 Layout firstLayout = rootLayouts.get(0);
557
558 if (firstLayout.getLayoutId() == layout.getLayoutId()) {
559 Layout secondLayout = rootLayouts.get(1);
560
561 layoutLocalServiceHelper.validateFirstLayout(
562 secondLayout.getType());
563 }
564 }
565 }
566
567
568
569 List<Layout> childLayouts = layoutPersistence.findByG_P_P(
570 layout.getGroupId(), layout.isPrivateLayout(),
571 layout.getLayoutId());
572
573 for (Layout childLayout : childLayouts) {
574 deleteLayout(childLayout, updateLayoutSet, serviceContext);
575 }
576
577
578
579 layoutFriendlyURLLocalService.deleteLayoutFriendlyURLs(
580 layout.getPlid());
581
582
583
584 portletPreferencesLocalService.deletePortletPreferencesByPlid(
585 layout.getPlid());
586
587
588
589 subscriptionLocalService.deleteSubscriptions(
590 layout.getCompanyId(), Layout.class.getName(), layout.getPlid());
591
592
593
594 ratingsStatsLocalService.deleteStats(
595 Layout.class.getName(), layout.getPlid());
596
597
598
599 long layoutClassNameId = classNameLocalService.getClassNameId(
600 Layout.class);
601
602 List<MDRRuleGroupInstance> mdrRuleGroupInstances =
603 mdrRuleGroupInstancePersistence.findByC_C(
604 layoutClassNameId, layout.getPlid());
605
606 for (MDRRuleGroupInstance mdrRuleGroupInstance :
607 mdrRuleGroupInstances) {
608
609 mdrRuleGroupInstanceLocalService.deleteMDRRuleGroupInstance(
610 mdrRuleGroupInstance);
611 }
612
613
614
615 mbMessageLocalService.deleteDiscussionMessages(
616 Layout.class.getName(), layout.getPlid());
617
618
619
620 journalArticleLocalService.deleteLayoutArticleReferences(
621 layout.getGroupId(), layout.getUuid());
622
623
624
625 journalContentSearchLocalService.deleteLayoutContentSearches(
626 layout.getGroupId(), layout.isPrivateLayout(),
627 layout.getLayoutId());
628
629
630
631 expandoRowLocalService.deleteRows(layout.getPlid());
632
633
634
635 imageLocalService.deleteImage(layout.getIconImageId());
636
637
638
639 Group scopeGroup = layout.getScopeGroup();
640
641 if (scopeGroup != null) {
642 groupLocalService.deleteGroup(scopeGroup.getGroupId());
643 }
644
645
646
647 String primKey =
648 layout.getPlid() + PortletConstants.LAYOUT_SEPARATOR + "%";
649
650 List<ResourcePermission> resourcePermissions =
651 resourcePermissionPersistence.findByC_LikeP(
652 layout.getCompanyId(), primKey);
653
654 for (ResourcePermission resourcePermission : resourcePermissions) {
655 resourcePermissionLocalService.deleteResourcePermission(
656 resourcePermission);
657 }
658
659 resourceLocalService.deleteResource(
660 layout.getCompanyId(), Layout.class.getName(),
661 ResourceConstants.SCOPE_INDIVIDUAL, layout.getPlid());
662
663
664
665 layoutPersistence.remove(layout);
666
667
668
669 if (updateLayoutSet) {
670 layoutSetLocalService.updatePageCount(
671 layout.getGroupId(), layout.isPrivateLayout());
672 }
673
674
675
676 SystemEventHierarchyEntry systemEventHierarchyEntry =
677 SystemEventHierarchyEntryThreadLocal.peek();
678
679 if ((systemEventHierarchyEntry != null) &&
680 systemEventHierarchyEntry.hasTypedModel(
681 Layout.class.getName(), layout.getPlid())) {
682
683 systemEventHierarchyEntry.setExtraDataValue(
684 "privateLayout", StringUtil.valueOf(layout.isPrivateLayout()));
685 }
686 }
687
688
700 @Override
701 public void deleteLayout(
702 long groupId, boolean privateLayout, long layoutId,
703 ServiceContext serviceContext)
704 throws PortalException, SystemException {
705
706 Layout layout = layoutPersistence.findByG_P_L(
707 groupId, privateLayout, layoutId);
708
709 deleteLayout(layout, true, serviceContext);
710 }
711
712
722 @Override
723 public void deleteLayout(long plid, ServiceContext serviceContext)
724 throws PortalException, SystemException {
725
726 Layout layout = layoutPersistence.findByPrimaryKey(plid);
727
728 deleteLayout(layout, true, serviceContext);
729 }
730
731
746 @Override
747 public void deleteLayouts(
748 long groupId, boolean privateLayout, ServiceContext serviceContext)
749 throws PortalException, SystemException {
750
751
752
753 List<Layout> layouts = layoutPersistence.findByG_P_P(
754 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
755 QueryUtil.ALL_POS, QueryUtil.ALL_POS,
756 new LayoutPriorityComparator(false));
757
758 for (Layout layout : layouts) {
759 try {
760 deleteLayout(layout, false, serviceContext);
761 }
762 catch (NoSuchLayoutException nsle) {
763 }
764 }
765
766
767
768 if (GetterUtil.getBoolean(
769 serviceContext.getAttribute("updatePageCount"), true)) {
770
771 layoutSetLocalService.updatePageCount(groupId, privateLayout);
772 }
773
774
775
776 counterLocalService.reset(getCounterName(groupId, privateLayout));
777 }
778
779
796 @Override
797 public byte[] exportLayouts(
798 long groupId, boolean privateLayout, long[] layoutIds,
799 Map<String, String[]> parameterMap, Date startDate, Date endDate)
800 throws PortalException, SystemException {
801
802 File file = exportLayoutsAsFile(
803 groupId, privateLayout, layoutIds, parameterMap, startDate,
804 endDate);
805
806 try {
807 return FileUtil.getBytes(file);
808 }
809 catch (IOException ioe) {
810 throw new SystemException(ioe);
811 }
812 finally {
813 file.delete();
814 }
815 }
816
817
833 @Override
834 public byte[] exportLayouts(
835 long groupId, boolean privateLayout,
836 Map<String, String[]> parameterMap, Date startDate, Date endDate)
837 throws PortalException, SystemException {
838
839 return exportLayouts(
840 groupId, privateLayout, null, parameterMap, startDate, endDate);
841 }
842
843
861 @Override
862 public File exportLayoutsAsFile(
863 long groupId, boolean privateLayout, long[] layoutIds,
864 Map<String, String[]> parameterMap, Date startDate, Date endDate)
865 throws PortalException, SystemException {
866
867 try {
868 LayoutExporter layoutExporter = new LayoutExporter();
869
870 return layoutExporter.exportLayoutsAsFile(
871 groupId, privateLayout, layoutIds, parameterMap, startDate,
872 endDate);
873 }
874 catch (PortalException pe) {
875 throw pe;
876 }
877 catch (SystemException se) {
878 throw se;
879 }
880 catch (Exception e) {
881 throw new SystemException(e);
882 }
883 }
884
885 @Override
886 public long exportLayoutsAsFileInBackground(
887 long userId, String taskName, long groupId, boolean privateLayout,
888 long[] layoutIds, Map<String, String[]> parameterMap,
889 Date startDate, Date endDate, String fileName)
890 throws PortalException, SystemException {
891
892 Map<String, Serializable> taskContextMap =
893 BackgroundTaskContextMapFactory.buildTaskContextMap(
894 userId, groupId, privateLayout, layoutIds, parameterMap,
895 Constants.EXPORT, startDate, endDate, fileName);
896
897 BackgroundTask backgroundTask =
898 backgroundTaskLocalService.addBackgroundTask(
899 userId, groupId, taskName, null,
900 LayoutExportBackgroundTaskExecutor.class, taskContextMap,
901 new ServiceContext());
902
903 return backgroundTask.getBackgroundTaskId();
904 }
905
906
924 @Override
925 public byte[] exportPortletInfo(
926 long plid, long groupId, String portletId,
927 Map<String, String[]> parameterMap, Date startDate, Date endDate)
928 throws PortalException, SystemException {
929
930 File file = exportPortletInfoAsFile(
931 plid, groupId, portletId, parameterMap, startDate, endDate);
932
933 try {
934 return FileUtil.getBytes(file);
935 }
936 catch (IOException ioe) {
937 throw new SystemException(ioe);
938 }
939 finally {
940 file.delete();
941 }
942 }
943
944 @Override
945 public byte[] exportPortletInfo(
946 long companyId, String portletId,
947 Map<String, String[]> parameterMap, Date startDate, Date endDate)
948 throws PortalException, SystemException {
949
950 File file = exportPortletInfoAsFile(
951 companyId, portletId, parameterMap, startDate, endDate);
952
953 try {
954 return FileUtil.getBytes(file);
955 }
956 catch (IOException ioe) {
957 throw new SystemException(ioe);
958 }
959 finally {
960 file.delete();
961 }
962 }
963
964
982 @Override
983 public File exportPortletInfoAsFile(
984 long plid, long groupId, String portletId,
985 Map<String, String[]> parameterMap, Date startDate, Date endDate)
986 throws PortalException, SystemException {
987
988 try {
989 PortletExporter portletExporter = new PortletExporter();
990
991 return portletExporter.exportPortletInfoAsFile(
992 plid, groupId, portletId, parameterMap, startDate, endDate);
993 }
994 catch (PortalException pe) {
995 throw pe;
996 }
997 catch (SystemException se) {
998 throw se;
999 }
1000 catch (Exception e) {
1001 throw new SystemException(e);
1002 }
1003 }
1004
1005 @Override
1006 public File exportPortletInfoAsFile(
1007 long companyId, String portletId,
1008 Map<String, String[]> parameterMap, Date startDate, Date endDate)
1009 throws PortalException, SystemException {
1010
1011 Group companyGroup = groupLocalService.getCompanyGroup(companyId);
1012 Group controlPanelGroup = groupPersistence.findByC_F(
1013 companyId, GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
1014
1015 Layout controlPanelLayout = layoutPersistence.findByG_P_T_First(
1016 controlPanelGroup.getGroupId(), true,
1017 LayoutConstants.TYPE_CONTROL_PANEL, null);
1018
1019 return exportPortletInfoAsFile(
1020 controlPanelLayout.getPlid(), companyGroup.getGroupId(), portletId,
1021 parameterMap, startDate, endDate);
1022 }
1023
1024 @Override
1025 public long exportPortletInfoAsFileInBackground(
1026 long userId, String taskName, long plid, long groupId,
1027 String portletId, Map<String, String[]> parameterMap,
1028 Date startDate, Date endDate, String fileName)
1029 throws PortalException, SystemException {
1030
1031 Map<String, Serializable> taskContextMap =
1032 BackgroundTaskContextMapFactory.buildTaskContextMap(
1033 userId, plid, groupId, portletId, parameterMap,
1034 Constants.EXPORT, startDate, endDate, fileName);
1035
1036 BackgroundTask backgroundTask =
1037 backgroundTaskLocalService.addBackgroundTask(
1038 userId, groupId, taskName, null,
1039 PortletExportBackgroundTaskExecutor.class, taskContextMap,
1040 new ServiceContext());
1041
1042 return backgroundTask.getBackgroundTaskId();
1043 }
1044
1045 @Override
1046 public long exportPortletInfoAsFileInBackground(
1047 long userId, String taskName, String portletId,
1048 Map<String, String[]> parameterMap, Date startDate, Date endDate,
1049 String fileName)
1050 throws PortalException, SystemException {
1051
1052 User user = userPersistence.findByPrimaryKey(userId);
1053
1054 Group companyGroup = groupLocalService.getCompanyGroup(
1055 user.getCompanyId());
1056 Group controlPanelGroup = groupPersistence.findByC_F(
1057 user.getCompanyId(), GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
1058
1059 Layout controlPanelLayout = layoutPersistence.findByG_P_T_First(
1060 controlPanelGroup.getGroupId(), true,
1061 LayoutConstants.TYPE_CONTROL_PANEL, null);
1062
1063 return exportPortletInfoAsFileInBackground(
1064 userId, taskName, controlPanelLayout.getPlid(),
1065 companyGroup.getGroupId(), portletId, parameterMap, startDate,
1066 endDate, fileName);
1067 }
1068
1069 @Override
1070 public Layout fetchFirstLayout(
1071 long groupId, boolean privateLayout, long parentLayoutId)
1072 throws SystemException {
1073
1074 return layoutPersistence.fetchByG_P_P_First(
1075 groupId, privateLayout, parentLayoutId,
1076 new LayoutPriorityComparator());
1077 }
1078
1079 @Override
1080 public Layout fetchLayout(
1081 long groupId, boolean privateLayout, long layoutId)
1082 throws SystemException {
1083
1084 return layoutPersistence.fetchByG_P_L(groupId, privateLayout, layoutId);
1085 }
1086
1087 @Override
1088 public Layout fetchLayoutByFriendlyURL(
1089 long groupId, boolean privateLayout, String friendlyURL)
1090 throws SystemException {
1091
1092 return layoutPersistence.fetchByG_P_F(
1093 groupId, privateLayout, friendlyURL);
1094 }
1095
1096
1104 @Override
1105 public long getDefaultPlid(long groupId) throws SystemException {
1106 if (groupId > 0) {
1107 List<Layout> layouts = layoutPersistence.findByGroupId(
1108 groupId, 0, 1);
1109
1110 if (layouts.size() > 0) {
1111 Layout layout = layouts.get(0);
1112
1113 return layout.getPlid();
1114 }
1115 }
1116
1117 return LayoutConstants.DEFAULT_PLID;
1118 }
1119
1120
1129 @Override
1130 public long getDefaultPlid(long groupId, boolean privateLayout)
1131 throws SystemException {
1132
1133 if (groupId > 0) {
1134 List<Layout> layouts = layoutPersistence.findByG_P(
1135 groupId, privateLayout, 0, 1);
1136
1137 if (layouts.size() > 0) {
1138 Layout layout = layouts.get(0);
1139
1140 return layout.getPlid();
1141 }
1142 }
1143
1144 return LayoutConstants.DEFAULT_PLID;
1145 }
1146
1147
1160 @Override
1161 public long getDefaultPlid(
1162 long groupId, boolean privateLayout, String portletId)
1163 throws PortalException, SystemException {
1164
1165 if (groupId > 0) {
1166 List<Layout> layouts = layoutPersistence.findByG_P(
1167 groupId, privateLayout);
1168
1169 for (Layout layout : layouts) {
1170 if (layout.isTypePortlet()) {
1171 LayoutTypePortlet layoutTypePortlet =
1172 (LayoutTypePortlet)layout.getLayoutType();
1173
1174 if (layoutTypePortlet.hasPortletId(portletId)) {
1175 return layout.getPlid();
1176 }
1177 }
1178 }
1179 }
1180
1181 return LayoutConstants.DEFAULT_PLID;
1182 }
1183
1184
1195 @Override
1196 public Layout getFriendlyURLLayout(
1197 long groupId, boolean privateLayout, String friendlyURL)
1198 throws PortalException, SystemException {
1199
1200 if (Validator.isNull(friendlyURL)) {
1201 throw new NoSuchLayoutException();
1202 }
1203
1204 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(friendlyURL);
1205
1206 Layout layout = null;
1207
1208 List<LayoutFriendlyURL> layoutFriendlyURLs =
1209 layoutFriendlyURLPersistence.findByG_P_F(
1210 groupId, privateLayout, friendlyURL, 0, 1);
1211
1212 if (!layoutFriendlyURLs.isEmpty()) {
1213 LayoutFriendlyURL layoutFriendlyURL = layoutFriendlyURLs.get(0);
1214
1215 layout = layoutPersistence.findByPrimaryKey(
1216 layoutFriendlyURL.getPlid());
1217 }
1218
1219 if ((layout == null) &&
1220 friendlyURL.startsWith(StringPool.SLASH) &&
1221 Validator.isNumber(friendlyURL.substring(1))) {
1222
1223 long layoutId = GetterUtil.getLong(friendlyURL.substring(1));
1224
1225 layout = layoutPersistence.fetchByG_P_L(
1226 groupId, privateLayout, layoutId);
1227 }
1228
1229 if (layout == null) {
1230 throw new NoSuchLayoutException();
1231 }
1232
1233 return layout;
1234 }
1235
1236
1247 @Override
1248 public Layout getLayout(long groupId, boolean privateLayout, long layoutId)
1249 throws PortalException, SystemException {
1250
1251 return layoutPersistence.findByG_P_L(groupId, privateLayout, layoutId);
1252 }
1253
1254
1264 @Override
1265 public Layout getLayoutByIconImageId(long iconImageId)
1266 throws PortalException, SystemException {
1267
1268 return layoutPersistence.findByIconImageId(iconImageId);
1269 }
1270
1271
1280 @Override
1281 public List<Layout> getLayouts(long groupId, boolean privateLayout)
1282 throws SystemException {
1283
1284 return layoutPersistence.findByG_P(groupId, privateLayout);
1285 }
1286
1287
1298 @Override
1299 public List<Layout> getLayouts(
1300 long groupId, boolean privateLayout, long parentLayoutId)
1301 throws SystemException {
1302
1303 return layoutPersistence.findByG_P_P(
1304 groupId, privateLayout, parentLayoutId);
1305 }
1306
1307
1331 @Override
1332 public List<Layout> getLayouts(
1333 long groupId, boolean privateLayout, long parentLayoutId,
1334 boolean incomplete, int start, int end)
1335 throws SystemException {
1336
1337 return layoutPersistence.findByG_P_P(
1338 groupId, privateLayout, parentLayoutId, start, end);
1339 }
1340
1341
1353 @Override
1354 public List<Layout> getLayouts(
1355 long groupId, boolean privateLayout, long[] layoutIds)
1356 throws PortalException, SystemException {
1357
1358 List<Layout> layouts = new ArrayList<Layout>();
1359
1360 for (long layoutId : layoutIds) {
1361 Layout layout = getLayout(groupId, privateLayout, layoutId);
1362
1363 layouts.add(layout);
1364 }
1365
1366 return layouts;
1367 }
1368
1369
1380 @Override
1381 public List<Layout> getLayouts(
1382 long groupId, boolean privateLayout, String type)
1383 throws SystemException {
1384
1385 return layoutPersistence.findByG_P_T(groupId, privateLayout, type);
1386 }
1387
1388
1399 @Override
1400 public LayoutReference[] getLayouts(
1401 long companyId, String portletId, String preferencesKey,
1402 String preferencesValue)
1403 throws SystemException {
1404
1405 List<LayoutReference> layoutReferences = layoutFinder.findByC_P_P(
1406 companyId, portletId, preferencesKey, preferencesValue);
1407
1408 return layoutReferences.toArray(
1409 new LayoutReference[layoutReferences.size()]);
1410 }
1411
1412 @Override
1413 public List<Layout> getLayoutsByLayoutPrototypeUuid(
1414 String layoutPrototypeUuid)
1415 throws SystemException {
1416
1417 return layoutPersistence.findByLayoutPrototypeUuid(layoutPrototypeUuid);
1418 }
1419
1420 @Override
1421 public int getLayoutsByLayoutPrototypeUuidCount(String layoutPrototypeUuid)
1422 throws SystemException {
1423
1424 return layoutPersistence.countByLayoutPrototypeUuid(
1425 layoutPrototypeUuid);
1426 }
1427
1428 @Override
1429 public int getLayoutsCount(Group group, boolean privateLayout)
1430 throws PortalException, SystemException {
1431
1432 return getLayoutsCount(group, privateLayout, true);
1433 }
1434
1435 @Override
1436 public int getLayoutsCount(
1437 Group group, boolean privateLayout, boolean includeUserGroups)
1438 throws PortalException, SystemException {
1439
1440 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1441 group.getGroupId(), privateLayout);
1442
1443 int count = layoutSet.getPageCount();
1444
1445 if (!group.isUser() || !includeUserGroups) {
1446 return count;
1447 }
1448
1449 List<UserGroup> userGroups = userPersistence.getUserGroups(
1450 group.getClassPK());
1451
1452 if (!userGroups.isEmpty()) {
1453 long userGroupClassNameId = classNameLocalService.getClassNameId(
1454 UserGroup.class);
1455
1456 for (UserGroup userGroup : userGroups) {
1457 Group userGroupGroup = groupPersistence.findByC_C_C(
1458 group.getCompanyId(), userGroupClassNameId,
1459 userGroup.getUserGroupId());
1460
1461 layoutSet = layoutSetPersistence.findByG_P(
1462 userGroupGroup.getGroupId(), privateLayout);
1463
1464 count += layoutSet.getPageCount();
1465 }
1466 }
1467
1468 return count;
1469 }
1470
1471 @Override
1472 public int getLayoutsCount(User user, boolean privateLayout)
1473 throws PortalException, SystemException {
1474
1475 return getLayoutsCount(user, privateLayout, true);
1476 }
1477
1478 @Override
1479 public int getLayoutsCount(
1480 User user, boolean privateLayout, boolean includeUserGroups)
1481 throws PortalException, SystemException {
1482
1483 long classNameId = classNameLocalService.getClassNameId(User.class);
1484
1485 Group group = groupPersistence.findByC_C_C(
1486 user.getCompanyId(), classNameId, user.getUserId());
1487
1488 return getLayoutsCount(group, privateLayout, includeUserGroups);
1489 }
1490
1491
1499 @Override
1500 public long getNextLayoutId(long groupId, boolean privateLayout)
1501 throws SystemException {
1502
1503 long nextLayoutId = counterLocalService.increment(
1504 getCounterName(groupId, privateLayout));
1505
1506 if (nextLayoutId == 1) {
1507 List<Layout> layouts = layoutPersistence.findByG_P(
1508 groupId, privateLayout, 0, 1, new LayoutComparator());
1509
1510 if (!layouts.isEmpty()) {
1511 Layout layout = layouts.get(0);
1512
1513 nextLayoutId = layout.getLayoutId() + 1;
1514
1515 counterLocalService.reset(
1516 getCounterName(groupId, privateLayout), nextLayoutId);
1517 }
1518 }
1519
1520 return nextLayoutId;
1521 }
1522
1523
1530 @Override
1531 public List<Layout> getNoPermissionLayouts(long roleId)
1532 throws SystemException {
1533
1534 return layoutFinder.findByNoPermissions(roleId);
1535 }
1536
1537
1543 @Override
1544 public List<Layout> getNullFriendlyURLLayouts() throws SystemException {
1545 return layoutFinder.findByNullFriendlyURL();
1546 }
1547
1548 @Override
1549 public Layout getParentLayout(Layout layout)
1550 throws PortalException, SystemException {
1551
1552 Layout parentLayout = null;
1553
1554 if (layout instanceof VirtualLayout) {
1555 VirtualLayout virtualLayout = (VirtualLayout)layout;
1556
1557 Layout sourceLayout = virtualLayout.getSourceLayout();
1558
1559 parentLayout = getLayout(
1560 sourceLayout.getGroupId(), sourceLayout.isPrivateLayout(),
1561 sourceLayout.getParentLayoutId());
1562
1563 parentLayout = new VirtualLayout(parentLayout, layout.getGroup());
1564 }
1565 else {
1566 parentLayout = getLayout(
1567 layout.getGroupId(), layout.isPrivateLayout(),
1568 layout.getParentLayoutId());
1569 }
1570
1571 return parentLayout;
1572 }
1573
1574
1582 @Override
1583 public List<Layout> getScopeGroupLayouts(
1584 long groupId, boolean privateLayout)
1585 throws SystemException {
1586
1587 return layoutFinder.findByScopeGroup(groupId, privateLayout);
1588 }
1589
1590 @Override
1591 public boolean hasLayouts(Group group, boolean privateLayout)
1592 throws PortalException, SystemException {
1593
1594 return hasLayouts(group, privateLayout, true);
1595 }
1596
1597 @Override
1598 public boolean hasLayouts(
1599 Group group, boolean privateLayout, boolean includeUserGroups)
1600 throws PortalException, SystemException {
1601
1602 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1603 group.getGroupId(), privateLayout);
1604
1605 if (layoutSet.getPageCount() > 0) {
1606 return true;
1607 }
1608
1609 if (!group.isUser() || !includeUserGroups) {
1610 return false;
1611 }
1612
1613 List<UserGroup> userGroups = userPersistence.getUserGroups(
1614 group.getClassPK());
1615
1616 if (!userGroups.isEmpty()) {
1617 long userGroupClassNameId = classNameLocalService.getClassNameId(
1618 UserGroup.class);
1619
1620 for (UserGroup userGroup : userGroups) {
1621 Group userGroupGroup = groupPersistence.findByC_C_C(
1622 group.getCompanyId(), userGroupClassNameId,
1623 userGroup.getUserGroupId());
1624
1625 layoutSet = layoutSetPersistence.findByG_P(
1626 userGroupGroup.getGroupId(), privateLayout);
1627
1628 if (layoutSet.getPageCount() > 0) {
1629 return true;
1630 }
1631 }
1632 }
1633
1634 return false;
1635 }
1636
1637
1648 @Override
1649 public boolean hasLayouts(
1650 long groupId, boolean privateLayout, long parentLayoutId)
1651 throws SystemException {
1652
1653 return layoutPersistence.countByG_P_P(
1654 groupId, privateLayout, parentLayoutId) > 0;
1655 }
1656
1657 @Override
1658 public boolean hasLayouts(User user, boolean privateLayout)
1659 throws PortalException, SystemException {
1660
1661 return hasLayouts(user, privateLayout, true);
1662 }
1663
1664 @Override
1665 public boolean hasLayouts(
1666 User user, boolean privateLayout, boolean includeUserGroups)
1667 throws PortalException, SystemException {
1668
1669 long classNameId = classNameLocalService.getClassNameId(User.class);
1670
1671 Group group = groupPersistence.findByC_C_C(
1672 user.getCompanyId(), classNameId, user.getUserId());
1673
1674 return hasLayouts(group, privateLayout, includeUserGroups);
1675 }
1676
1677 @Override
1678 public boolean hasLayoutSetPrototypeLayout(
1679 long layoutSetPrototypeId, String layoutUuid)
1680 throws PortalException, SystemException {
1681
1682 LayoutSetPrototype layoutSetPrototype =
1683 layoutSetPrototypeLocalService.getLayoutSetPrototype(
1684 layoutSetPrototypeId);
1685
1686 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1687 layoutSetPrototype, layoutUuid);
1688 }
1689
1690 @Override
1691 public boolean hasLayoutSetPrototypeLayout(
1692 String layoutSetPrototypeUuid, long companyId, String layoutUuid)
1693 throws PortalException, SystemException {
1694
1695 LayoutSetPrototype layoutSetPrototype =
1696 layoutSetPrototypeLocalService.
1697 getLayoutSetPrototypeByUuidAndCompanyId(
1698 layoutSetPrototypeUuid, companyId);
1699
1700 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1701 layoutSetPrototype, layoutUuid);
1702 }
1703
1704
1720 @Override
1721 public void importLayouts(
1722 long userId, long groupId, boolean privateLayout,
1723 Map<String, String[]> parameterMap, byte[] bytes)
1724 throws PortalException, SystemException {
1725
1726 importLayouts(
1727 userId, groupId, privateLayout, parameterMap,
1728 new UnsyncByteArrayInputStream(bytes));
1729 }
1730
1731
1747 @Override
1748 public void importLayouts(
1749 long userId, long groupId, boolean privateLayout,
1750 Map<String, String[]> parameterMap, File file)
1751 throws PortalException, SystemException {
1752
1753 try {
1754 LayoutImporter layoutImporter = new LayoutImporter();
1755
1756 layoutImporter.importLayouts(
1757 userId, groupId, privateLayout, parameterMap, file);
1758 }
1759 catch (PortalException pe) {
1760 Throwable cause = pe.getCause();
1761
1762 if (cause instanceof LocaleException) {
1763 throw (PortalException)cause;
1764 }
1765
1766 throw pe;
1767 }
1768 catch (SystemException se) {
1769 throw se;
1770 }
1771 catch (Exception e) {
1772 throw new SystemException(e);
1773 }
1774 }
1775
1776
1792 @Override
1793 public void importLayouts(
1794 long userId, long groupId, boolean privateLayout,
1795 Map<String, String[]> parameterMap, InputStream is)
1796 throws PortalException, SystemException {
1797
1798 File file = null;
1799
1800 try {
1801 file = FileUtil.createTempFile("lar");
1802
1803 FileUtil.write(file, is);
1804
1805 importLayouts(userId, groupId, privateLayout, parameterMap, file);
1806 }
1807 catch (IOException ioe) {
1808 throw new SystemException(ioe);
1809 }
1810 finally {
1811 FileUtil.delete(file);
1812 }
1813 }
1814
1815 @Override
1816 public long importLayoutsInBackground(
1817 long userId, String taskName, long groupId, boolean privateLayout,
1818 Map<String, String[]> parameterMap, File file)
1819 throws PortalException, SystemException {
1820
1821 Map<String, Serializable> taskContextMap =
1822 BackgroundTaskContextMapFactory.buildTaskContextMap(
1823 userId, groupId, privateLayout, null, parameterMap,
1824 Constants.IMPORT, null, null, file.getName());
1825
1826 BackgroundTask backgroundTask =
1827 backgroundTaskLocalService.addBackgroundTask(
1828 userId, groupId, taskName, null,
1829 LayoutImportBackgroundTaskExecutor.class, taskContextMap,
1830 new ServiceContext());
1831
1832 backgroundTaskLocalService.addBackgroundTaskAttachment(
1833 userId, backgroundTask.getBackgroundTaskId(), file.getName(), file);
1834
1835 return backgroundTask.getBackgroundTaskId();
1836 }
1837
1838 @Override
1839 public long importLayoutsInBackground(
1840 long userId, String taskName, long groupId, boolean privateLayout,
1841 Map<String, String[]> parameterMap, InputStream is)
1842 throws PortalException, SystemException {
1843
1844 File file = null;
1845
1846 try {
1847 file = FileUtil.createTempFile("lar");
1848
1849 FileUtil.write(file, is);
1850
1851 return importLayoutsInBackground(
1852 userId, taskName, groupId, privateLayout, parameterMap, file);
1853 }
1854 catch (IOException ioe) {
1855 throw new SystemException(ioe);
1856 }
1857 finally {
1858 FileUtil.delete(file);
1859 }
1860 }
1861
1862
1879 @Override
1880 public void importPortletInfo(
1881 long userId, long plid, long groupId, String portletId,
1882 Map<String, String[]> parameterMap, File file)
1883 throws PortalException, SystemException {
1884
1885 try {
1886 PortletImporter portletImporter = new PortletImporter();
1887
1888 portletImporter.importPortletInfo(
1889 userId, plid, groupId, portletId, parameterMap, file);
1890 }
1891 catch (PortalException pe) {
1892 Throwable cause = pe.getCause();
1893
1894 while (true) {
1895 if (cause == null) {
1896 break;
1897 }
1898
1899 if ((cause instanceof LocaleException) ||
1900 (cause instanceof
1901 RecordSetDuplicateRecordSetKeyException) ||
1902 (cause instanceof
1903 StructureDuplicateStructureKeyException)) {
1904
1905 throw (PortalException)cause;
1906 }
1907
1908 if (cause instanceof PortletDataException) {
1909 cause = cause.getCause();
1910 }
1911 else {
1912 break;
1913 }
1914 }
1915
1916 throw pe;
1917 }
1918 catch (SystemException se) {
1919 throw se;
1920 }
1921 catch (Exception e) {
1922 throw new SystemException(e);
1923 }
1924 }
1925
1926
1943 @Override
1944 public void importPortletInfo(
1945 long userId, long plid, long groupId, String portletId,
1946 Map<String, String[]> parameterMap, InputStream is)
1947 throws PortalException, SystemException {
1948
1949 File file = null;
1950
1951 try {
1952 file = FileUtil.createTempFile("lar");
1953
1954 FileUtil.write(file, is);
1955
1956 importPortletInfo(
1957 userId, plid, groupId, portletId, parameterMap, file);
1958 }
1959 catch (IOException ioe) {
1960 throw new SystemException(ioe);
1961 }
1962 finally {
1963 FileUtil.delete(file);
1964 }
1965 }
1966
1967 @Override
1968 public long importPortletInfoInBackground(
1969 long userId, String taskName, long plid, long groupId,
1970 String portletId, Map<String, String[]> parameterMap, File file)
1971 throws PortalException, SystemException {
1972
1973 Map<String, Serializable> taskContextMap =
1974 BackgroundTaskContextMapFactory.buildTaskContextMap(
1975 userId, plid, groupId, portletId, parameterMap,
1976 Constants.EXPORT, null, null, file.getName());
1977
1978 BackgroundTask backgroundTask =
1979 backgroundTaskLocalService.addBackgroundTask(
1980 userId, groupId, taskName, null,
1981 PortletImportBackgroundTaskExecutor.class, taskContextMap,
1982 new ServiceContext());
1983
1984 backgroundTaskLocalService.addBackgroundTaskAttachment(
1985 userId, backgroundTask.getBackgroundTaskId(), file.getName(), file);
1986
1987 return backgroundTask.getBackgroundTaskId();
1988 }
1989
1990 @Override
1991 public long importPortletInfoInBackground(
1992 long userId, String taskName, long plid, long groupId,
1993 String portletId, Map<String, String[]> parameterMap,
1994 InputStream is)
1995 throws PortalException, SystemException {
1996
1997 File file = null;
1998
1999 try {
2000 file = FileUtil.createTempFile("lar");
2001
2002 FileUtil.write(file, is);
2003
2004 return importPortletInfoInBackground(
2005 userId, taskName, plid, groupId, portletId, parameterMap, file);
2006 }
2007 catch (IOException ioe) {
2008 throw new SystemException(ioe);
2009 }
2010 finally {
2011 FileUtil.delete(file);
2012 }
2013 }
2014
2015
2030 @Override
2031 public void setLayouts(
2032 long groupId, boolean privateLayout, long parentLayoutId,
2033 long[] layoutIds, ServiceContext serviceContext)
2034 throws PortalException, SystemException {
2035
2036 if (layoutIds == null) {
2037 return;
2038 }
2039
2040 if (parentLayoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2041 if (layoutIds.length < 1) {
2042 throw new RequiredLayoutException(
2043 RequiredLayoutException.AT_LEAST_ONE);
2044 }
2045
2046 Layout layout = layoutPersistence.findByG_P_L(
2047 groupId, privateLayout, layoutIds[0]);
2048
2049 if (!PortalUtil.isLayoutFirstPageable(layout.getType())) {
2050 throw new RequiredLayoutException(
2051 RequiredLayoutException.FIRST_LAYOUT_TYPE);
2052 }
2053 }
2054
2055 Set<Long> layoutIdsSet = new LinkedHashSet<Long>();
2056
2057 for (long layoutId : layoutIds) {
2058 layoutIdsSet.add(layoutId);
2059 }
2060
2061 Set<Long> newLayoutIdsSet = new HashSet<Long>();
2062
2063 List<Layout> layouts = layoutPersistence.findByG_P_P(
2064 groupId, privateLayout, parentLayoutId);
2065
2066 for (Layout layout : layouts) {
2067 if (!layoutIdsSet.contains(layout.getLayoutId())) {
2068 deleteLayout(layout, true, serviceContext);
2069 }
2070 else {
2071 newLayoutIdsSet.add(layout.getLayoutId());
2072 }
2073 }
2074
2075 int priority = 0;
2076
2077 for (long layoutId : layoutIdsSet) {
2078 Layout layout = layoutPersistence.findByG_P_L(
2079 groupId, privateLayout, layoutId);
2080
2081 layout.setPriority(priority++);
2082
2083 layoutPersistence.update(layout);
2084 }
2085
2086 layoutSetLocalService.updatePageCount(groupId, privateLayout);
2087 }
2088
2089
2100 @Override
2101 public Layout updateFriendlyURL(
2102 long plid, String friendlyURL, String languageId)
2103 throws PortalException, SystemException {
2104
2105 Date now = new Date();
2106
2107 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2108
2109 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
2110 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2111 StringPool.BLANK, friendlyURL);
2112
2113 layoutLocalServiceHelper.validateFriendlyURL(
2114 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2115 friendlyURL);
2116
2117 layoutFriendlyURLLocalService.updateLayoutFriendlyURL(
2118 layout.getUserId(), layout.getCompanyId(), layout.getGroupId(),
2119 layout.getPlid(), layout.isPrivateLayout(), friendlyURL, languageId,
2120 new ServiceContext());
2121
2122 layout.setModifiedDate(now);
2123
2124 String defaultLanguageId = LocaleUtil.toLanguageId(
2125 LocaleUtil.getSiteDefault());
2126
2127 if (languageId.equals(defaultLanguageId)) {
2128 layout.setFriendlyURL(friendlyURL);
2129 }
2130
2131 layoutPersistence.update(layout);
2132
2133 return layout;
2134 }
2135
2136
2178 @Override
2179 public Layout updateLayout(
2180 long groupId, boolean privateLayout, long layoutId,
2181 long parentLayoutId, Map<Locale, String> nameMap,
2182 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2183 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2184 String type, boolean hidden, Map<Locale, String> friendlyURLMap,
2185 Boolean iconImage, byte[] iconBytes, ServiceContext serviceContext)
2186 throws PortalException, SystemException {
2187
2188
2189
2190 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2191 groupId, privateLayout, parentLayoutId);
2192 String name = nameMap.get(LocaleUtil.getSiteDefault());
2193 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
2194 groupId, privateLayout, layoutId, name, friendlyURLMap);
2195
2196 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
2197
2198 layoutLocalServiceHelper.validate(
2199 groupId, privateLayout, layoutId, parentLayoutId, name, type,
2200 hidden, friendlyURLMap);
2201
2202 layoutLocalServiceHelper.validateParentLayoutId(
2203 groupId, privateLayout, layoutId, parentLayoutId);
2204
2205 Date now = new Date();
2206
2207 Layout layout = layoutPersistence.findByG_P_L(
2208 groupId, privateLayout, layoutId);
2209
2210 if (parentLayoutId != layout.getParentLayoutId()) {
2211 int priority = layoutLocalServiceHelper.getNextPriority(
2212 groupId, privateLayout, parentLayoutId,
2213 layout.getSourcePrototypeLayoutUuid(), -1);
2214
2215 layout.setPriority(priority);
2216 }
2217
2218 layout.setModifiedDate(serviceContext.getModifiedDate(now));
2219 layout.setParentLayoutId(parentLayoutId);
2220 layout.setNameMap(nameMap);
2221 layout.setTitleMap(titleMap);
2222 layout.setDescriptionMap(descriptionMap);
2223 layout.setKeywordsMap(keywordsMap);
2224 layout.setRobotsMap(robotsMap);
2225 layout.setType(type);
2226 layout.setHidden(hidden);
2227 layout.setFriendlyURL(friendlyURL);
2228
2229 if (iconImage != null) {
2230 layout.setIconImage(iconImage.booleanValue());
2231
2232 if (iconImage.booleanValue()) {
2233 long iconImageId = layout.getIconImageId();
2234
2235 if (iconImageId <= 0) {
2236 iconImageId = counterLocalService.increment();
2237
2238 layout.setIconImageId(iconImageId);
2239 }
2240 }
2241 }
2242
2243 boolean layoutUpdateable = ParamUtil.getBoolean(
2244 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
2245
2246 UnicodeProperties typeSettingsProperties =
2247 layout.getTypeSettingsProperties();
2248
2249 typeSettingsProperties.put(
2250 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
2251
2252 layout.setTypeSettingsProperties(typeSettingsProperties);
2253
2254 String layoutPrototypeUuid = ParamUtil.getString(
2255 serviceContext, "layoutPrototypeUuid");
2256 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
2257 serviceContext, "layoutPrototypeLinkEnabled");
2258
2259 if (Validator.isNotNull(layoutPrototypeUuid)) {
2260 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
2261 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
2262 }
2263
2264 layout.setExpandoBridgeAttributes(serviceContext);
2265
2266 layoutPersistence.update(layout);
2267
2268
2269
2270 if (iconImage != null) {
2271 if (!iconImage.booleanValue()) {
2272 imageLocalService.deleteImage(layout.getIconImageId());
2273 }
2274 else if (ArrayUtil.isNotEmpty(iconBytes)) {
2275 imageLocalService.updateImage(
2276 layout.getIconImageId(), iconBytes);
2277 }
2278 }
2279
2280
2281
2282 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
2283 layout.getUserId(), layout.getCompanyId(), layout.getGroupId(),
2284 layout.getPlid(), layout.isPrivateLayout(), friendlyURLMap,
2285 serviceContext);
2286
2287 return layout;
2288 }
2289
2290
2344 @Override
2345 public Layout updateLayout(
2346 long groupId, boolean privateLayout, long layoutId,
2347 long parentLayoutId, Map<Locale, String> nameMap,
2348 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2349 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2350 String type, boolean hidden, String friendlyURL, Boolean iconImage,
2351 byte[] iconBytes, ServiceContext serviceContext)
2352 throws PortalException, SystemException {
2353
2354 Map<Locale, String> friendlyURLMap = new HashMap<Locale, String>();
2355
2356 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
2357
2358 return updateLayout(
2359 groupId, privateLayout, layoutId, parentLayoutId, nameMap, titleMap,
2360 descriptionMap, keywordsMap, robotsMap, type, hidden,
2361 friendlyURLMap, iconImage, iconBytes, serviceContext);
2362 }
2363
2364
2378 @Override
2379 public Layout updateLayout(
2380 long groupId, boolean privateLayout, long layoutId,
2381 String typeSettings)
2382 throws PortalException, SystemException {
2383
2384 Date now = new Date();
2385
2386 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
2387
2388 typeSettingsProperties.fastLoad(typeSettings);
2389
2390 validateTypeSettingsProperties(typeSettingsProperties);
2391
2392 Layout layout = layoutPersistence.findByG_P_L(
2393 groupId, privateLayout, layoutId);
2394
2395 layout.setModifiedDate(now);
2396 layout.setTypeSettings(typeSettingsProperties.toString());
2397
2398 layoutPersistence.update(layout);
2399
2400 return layout;
2401 }
2402
2403
2417 @Override
2418 public Layout updateLookAndFeel(
2419 long groupId, boolean privateLayout, long layoutId, String themeId,
2420 String colorSchemeId, String css, boolean wapTheme)
2421 throws PortalException, SystemException {
2422
2423 Date now = new Date();
2424
2425 Layout layout = layoutPersistence.findByG_P_L(
2426 groupId, privateLayout, layoutId);
2427
2428 layout.setModifiedDate(now);
2429
2430 if (wapTheme) {
2431 layout.setWapThemeId(themeId);
2432 layout.setWapColorSchemeId(colorSchemeId);
2433 }
2434 else {
2435 layout.setThemeId(themeId);
2436 layout.setColorSchemeId(colorSchemeId);
2437 layout.setCss(css);
2438 }
2439
2440 layoutPersistence.update(layout);
2441
2442 return layout;
2443 }
2444
2445
2456 @Override
2457 public Layout updateName(Layout layout, String name, String languageId)
2458 throws PortalException, SystemException {
2459
2460 Date now = new Date();
2461
2462 layoutLocalServiceHelper.validateName(name, languageId);
2463
2464 layout.setModifiedDate(now);
2465 layout.setName(name, LocaleUtil.fromLanguageId(languageId));
2466
2467 layoutPersistence.update(layout);
2468
2469 return layout;
2470 }
2471
2472
2487 @Override
2488 public Layout updateName(
2489 long groupId, boolean privateLayout, long layoutId, String name,
2490 String languageId)
2491 throws PortalException, SystemException {
2492
2493 Layout layout = layoutPersistence.findByG_P_L(
2494 groupId, privateLayout, layoutId);
2495
2496 return layoutLocalService.updateName(layout, name, languageId);
2497 }
2498
2499
2511 @Override
2512 public Layout updateName(long plid, String name, String languageId)
2513 throws PortalException, SystemException {
2514
2515 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2516
2517 return layoutLocalService.updateName(layout, name, languageId);
2518 }
2519
2520
2534 @Override
2535 public Layout updateParentLayoutId(
2536 long groupId, boolean privateLayout, long layoutId,
2537 long parentLayoutId)
2538 throws PortalException, SystemException {
2539
2540 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2541 groupId, privateLayout, parentLayoutId);
2542
2543 layoutLocalServiceHelper.validateParentLayoutId(
2544 groupId, privateLayout, layoutId, parentLayoutId);
2545
2546 Date now = new Date();
2547
2548 Layout layout = layoutPersistence.findByG_P_L(
2549 groupId, privateLayout, layoutId);
2550
2551 if (parentLayoutId != layout.getParentLayoutId()) {
2552 int priority = layoutLocalServiceHelper.getNextPriority(
2553 groupId, privateLayout, parentLayoutId,
2554 layout.getSourcePrototypeLayoutUuid(), -1);
2555
2556 layout.setPriority(priority);
2557 }
2558
2559 layout.setModifiedDate(now);
2560 layout.setParentLayoutId(parentLayoutId);
2561
2562 layoutPersistence.update(layout);
2563
2564 return layout;
2565 }
2566
2567
2581 @Override
2582 public Layout updateParentLayoutId(long plid, long parentPlid)
2583 throws PortalException, SystemException {
2584
2585 Date now = new Date();
2586
2587 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2588
2589 long parentLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
2590
2591 if (parentPlid > 0) {
2592 Layout parentLayout = layoutPersistence.fetchByPrimaryKey(
2593 parentPlid);
2594
2595 if (parentLayout != null) {
2596 parentLayoutId = parentLayout.getLayoutId();
2597 }
2598 }
2599
2600 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2601 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId);
2602
2603 layoutLocalServiceHelper.validateParentLayoutId(
2604 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2605 parentLayoutId);
2606
2607 if (parentLayoutId != layout.getParentLayoutId()) {
2608 int priority = layoutLocalServiceHelper.getNextPriority(
2609 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId,
2610 layout.getSourcePrototypeLayoutUuid(), -1);
2611
2612 layout.setPriority(priority);
2613 }
2614
2615 layout.setModifiedDate(now);
2616 layout.setParentLayoutId(parentLayoutId);
2617
2618 layoutPersistence.update(layout);
2619
2620 return layout;
2621 }
2622
2623
2631 @Override
2632 public void updatePriorities(long groupId, boolean privateLayout)
2633 throws PortalException, SystemException {
2634
2635 List<Layout> layouts = layoutPersistence.findByG_P(
2636 groupId, privateLayout);
2637
2638 for (Layout layout : layouts) {
2639 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2640 layout.getGroupId(), layout.isPrivateLayout(),
2641 layout.getParentLayoutId(),
2642 layout.getSourcePrototypeLayoutUuid(), layout.getPriority());
2643
2644 layout.setPriority(nextPriority);
2645
2646 layoutPersistence.update(layout);
2647 }
2648 }
2649
2650
2659 @Override
2660 public Layout updatePriority(Layout layout, int priority)
2661 throws PortalException, SystemException {
2662
2663 if (layout.getPriority() == priority) {
2664 return layout;
2665 }
2666
2667 int oldPriority = layout.getPriority();
2668
2669 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2670 layout.getGroupId(), layout.isPrivateLayout(),
2671 layout.getParentLayoutId(), layout.getSourcePrototypeLayoutUuid(),
2672 priority);
2673
2674 if (oldPriority == nextPriority) {
2675 return layout;
2676 }
2677
2678 layout.setModifiedDate(new Date());
2679 layout.setPriority(nextPriority);
2680
2681 layoutPersistence.update(layout);
2682
2683 List<Layout> layouts = layoutPersistence.findByG_P_P(
2684 layout.getGroupId(), layout.isPrivateLayout(),
2685 layout.getParentLayoutId());
2686
2687 boolean lessThan = false;
2688
2689 if (oldPriority < nextPriority) {
2690 lessThan = true;
2691 }
2692
2693 layouts = ListUtil.sort(
2694 layouts, new LayoutPriorityComparator(layout, lessThan));
2695
2696 Layout firstLayout = layouts.get(0);
2697
2698 layoutLocalServiceHelper.validateFirstLayout(firstLayout.getType());
2699
2700 int newPriority = LayoutConstants.FIRST_PRIORITY;
2701
2702 for (Layout curLayout : layouts) {
2703 int curNextPriority = layoutLocalServiceHelper.getNextPriority(
2704 layout.getGroupId(), layout.isPrivateLayout(),
2705 layout.getParentLayoutId(),
2706 curLayout.getSourcePrototypeLayoutUuid(), newPriority++);
2707
2708 if (curLayout.getPriority() == curNextPriority) {
2709 continue;
2710 }
2711
2712 curLayout.setModifiedDate(layout.getModifiedDate());
2713 curLayout.setPriority(curNextPriority);
2714
2715 layoutPersistence.update(curLayout);
2716
2717 if (curLayout.equals(layout)) {
2718 layout = curLayout;
2719 }
2720 }
2721
2722 return layout;
2723 }
2724
2725
2737 @Override
2738 public Layout updatePriority(
2739 long groupId, boolean privateLayout, long layoutId, int priority)
2740 throws PortalException, SystemException {
2741
2742 Layout layout = layoutPersistence.findByG_P_L(
2743 groupId, privateLayout, layoutId);
2744
2745 return updatePriority(layout, priority);
2746 }
2747
2748
2758 @Override
2759 public Layout updatePriority(long plid, int priority)
2760 throws PortalException, SystemException {
2761
2762 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2763
2764 return updatePriority(layout, priority);
2765 }
2766
2767
2770 @Override
2771 @SuppressWarnings("unused")
2772 public void updateScopedPortletNames(
2773 long groupId, boolean privateLayout, long layoutId,
2774 Map<Locale, String> nameMap, List<Locale> nameMapModifiedLocales)
2775 throws PortalException, SystemException {
2776 }
2777
2778
2792 @Override
2793 public void updateScopedPortletNames(
2794 long groupId, boolean privateLayout, long layoutId, String name,
2795 String languageId)
2796 throws PortalException, SystemException {
2797 }
2798
2799 @Override
2800 public MissingReferences validateImportLayoutsFile(
2801 long userId, long groupId, boolean privateLayout,
2802 Map<String, String[]> parameterMap, File file)
2803 throws PortalException, SystemException {
2804
2805 try {
2806 LayoutImporter layoutImporter = new LayoutImporter();
2807
2808 return layoutImporter.validateFile(
2809 userId, groupId, privateLayout, parameterMap, file);
2810 }
2811 catch (PortalException pe) {
2812 Throwable cause = pe.getCause();
2813
2814 if (cause instanceof LocaleException) {
2815 throw (PortalException)cause;
2816 }
2817
2818 throw pe;
2819 }
2820 catch (SystemException se) {
2821 throw se;
2822 }
2823 catch (Exception e) {
2824 throw new SystemException(e);
2825 }
2826 }
2827
2828 @Override
2829 public MissingReferences validateImportLayoutsFile(
2830 long userId, long groupId, boolean privateLayout,
2831 Map<String, String[]> parameterMap, InputStream inputStream)
2832 throws PortalException, SystemException {
2833
2834 File file = null;
2835
2836 try {
2837 file = FileUtil.createTempFile("lar");
2838
2839 FileUtil.write(file, inputStream);
2840
2841 return validateImportLayoutsFile(
2842 userId, groupId, privateLayout, parameterMap, file);
2843 }
2844 catch (IOException ioe) {
2845 throw new SystemException(ioe);
2846 }
2847 finally {
2848 FileUtil.delete(file);
2849 }
2850 }
2851
2852 @Override
2853 public MissingReferences validateImportPortletInfo(
2854 long userId, long plid, long groupId, String portletId,
2855 Map<String, String[]> parameterMap, File file)
2856 throws PortalException, SystemException {
2857
2858 try {
2859 PortletImporter portletImporter = new PortletImporter();
2860
2861 return portletImporter.validateFile(
2862 userId, plid, groupId, portletId, parameterMap, file);
2863 }
2864 catch (PortalException pe) {
2865 Throwable cause = pe.getCause();
2866
2867 if (cause instanceof LocaleException) {
2868 throw (PortalException)cause;
2869 }
2870
2871 throw pe;
2872 }
2873 catch (SystemException se) {
2874 throw se;
2875 }
2876 catch (Exception e) {
2877 throw new SystemException(e);
2878 }
2879 }
2880
2881 @Override
2882 public MissingReferences validateImportPortletInfo(
2883 long userId, long plid, long groupId, String portletId,
2884 Map<String, String[]> parameterMap, InputStream inputStream)
2885 throws PortalException, SystemException {
2886
2887 File file = null;
2888
2889 try {
2890 file = FileUtil.createTempFile("lar");
2891
2892 FileUtil.write(file, inputStream);
2893
2894 return validateImportPortletInfo(
2895 userId, plid, groupId, portletId, parameterMap, file);
2896 }
2897 catch (IOException ioe) {
2898 throw new SystemException(ioe);
2899 }
2900 finally {
2901 FileUtil.delete(file);
2902 }
2903 }
2904
2905 protected void validateTypeSettingsProperties(
2906 UnicodeProperties typeSettingsProperties)
2907 throws PortalException {
2908
2909 String sitemapChangeFrequency = typeSettingsProperties.getProperty(
2910 "sitemap-changefreq");
2911
2912 if (Validator.isNotNull(sitemapChangeFrequency) &&
2913 !sitemapChangeFrequency.equals("always") &&
2914 !sitemapChangeFrequency.equals("hourly") &&
2915 !sitemapChangeFrequency.equals("daily") &&
2916 !sitemapChangeFrequency.equals("weekly") &&
2917 !sitemapChangeFrequency.equals("monthly") &&
2918 !sitemapChangeFrequency.equals("yearly") &&
2919 !sitemapChangeFrequency.equals("never")) {
2920
2921 throw new SitemapChangeFrequencyException();
2922 }
2923
2924 String sitemapInclude = typeSettingsProperties.getProperty(
2925 "sitemap-include");
2926
2927 if (Validator.isNotNull(sitemapInclude) &&
2928 !sitemapInclude.equals("0") && !sitemapInclude.equals("1")) {
2929
2930 throw new SitemapIncludeException();
2931 }
2932
2933 String sitemapPriority = typeSettingsProperties.getProperty(
2934 "sitemap-priority");
2935
2936 if (Validator.isNotNull(sitemapPriority)) {
2937 try {
2938 double priority = Double.parseDouble(sitemapPriority);
2939
2940 if ((priority < 0) || (priority > 1)) {
2941 throw new SitemapPagePriorityException();
2942 }
2943 }
2944 catch (NumberFormatException nfe) {
2945 throw new SitemapPagePriorityException();
2946 }
2947 }
2948 }
2949
2950 @BeanReference(type = LayoutLocalServiceHelper.class)
2951 protected LayoutLocalServiceHelper layoutLocalServiceHelper;
2952
2953 }