001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.NoSuchLayoutException;
018 import com.liferay.portal.RequiredLayoutException;
019 import com.liferay.portal.SitemapChangeFrequencyException;
020 import com.liferay.portal.SitemapIncludeException;
021 import com.liferay.portal.SitemapPagePriorityException;
022 import com.liferay.portal.kernel.bean.BeanReference;
023 import com.liferay.portal.kernel.dao.orm.QueryUtil;
024 import com.liferay.portal.kernel.exception.PortalException;
025 import com.liferay.portal.kernel.exception.SystemException;
026 import com.liferay.portal.kernel.systemevent.SystemEvent;
027 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntry;
028 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntryThreadLocal;
029 import com.liferay.portal.kernel.util.ContentTypes;
030 import com.liferay.portal.kernel.util.GetterUtil;
031 import com.liferay.portal.kernel.util.ListUtil;
032 import com.liferay.portal.kernel.util.LocaleUtil;
033 import com.liferay.portal.kernel.util.ParamUtil;
034 import com.liferay.portal.kernel.util.StringBundler;
035 import com.liferay.portal.kernel.util.StringPool;
036 import com.liferay.portal.kernel.util.StringUtil;
037 import com.liferay.portal.kernel.util.UnicodeProperties;
038 import com.liferay.portal.kernel.util.Validator;
039 import com.liferay.portal.model.Group;
040 import com.liferay.portal.model.Layout;
041 import com.liferay.portal.model.LayoutConstants;
042 import com.liferay.portal.model.LayoutFriendlyURL;
043 import com.liferay.portal.model.LayoutPrototype;
044 import com.liferay.portal.model.LayoutReference;
045 import com.liferay.portal.model.LayoutSet;
046 import com.liferay.portal.model.LayoutSetPrototype;
047 import com.liferay.portal.model.LayoutType;
048 import com.liferay.portal.model.LayoutTypePortlet;
049 import com.liferay.portal.model.PortletConstants;
050 import com.liferay.portal.model.ResourceConstants;
051 import com.liferay.portal.model.ResourcePermission;
052 import com.liferay.portal.model.SystemEventConstants;
053 import com.liferay.portal.model.User;
054 import com.liferay.portal.model.UserGroup;
055 import com.liferay.portal.model.impl.VirtualLayout;
056 import com.liferay.portal.service.ServiceContext;
057 import com.liferay.portal.service.base.LayoutLocalServiceBaseImpl;
058 import com.liferay.portal.util.PortalUtil;
059 import com.liferay.portal.util.PropsValues;
060 import com.liferay.portal.util.comparator.LayoutComparator;
061 import com.liferay.portal.util.comparator.LayoutPriorityComparator;
062 import com.liferay.portlet.exportimport.lar.MissingReferences;
063 import com.liferay.portlet.exportimport.model.ExportImportConfiguration;
064 import com.liferay.portlet.sites.util.Sites;
065 import com.liferay.portlet.sites.util.SitesUtil;
066
067 import java.io.File;
068 import java.io.InputStream;
069
070 import java.util.ArrayList;
071 import java.util.Date;
072 import java.util.HashMap;
073 import java.util.HashSet;
074 import java.util.LinkedHashSet;
075 import java.util.List;
076 import java.util.Locale;
077 import java.util.Map;
078 import java.util.Set;
079
080
095 public class LayoutLocalServiceImpl extends LayoutLocalServiceBaseImpl {
096
097
104 public static String getCounterName(long groupId, boolean privateLayout) {
105 StringBundler sb = new StringBundler(5);
106
107 sb.append(Layout.class.getName());
108 sb.append(StringPool.POUND);
109 sb.append(groupId);
110 sb.append(StringPool.POUND);
111 sb.append(privateLayout);
112
113 return sb.toString();
114 }
115
116
175 @Deprecated
176 @Override
177 public Layout addLayout(
178 long userId, long groupId, boolean privateLayout,
179 long parentLayoutId, Map<Locale, String> nameMap,
180 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
181 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
182 String type, boolean hidden, String friendlyURL,
183 ServiceContext serviceContext)
184 throws PortalException {
185
186 Map<Locale, String> friendlyURLMap = new HashMap<>();
187
188 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
189
190 return addLayout(
191 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
192 descriptionMap, keywordsMap, robotsMap, type, StringPool.BLANK,
193 hidden, friendlyURLMap, serviceContext);
194 }
195
196
247 @Override
248 public Layout addLayout(
249 long userId, long groupId, boolean privateLayout,
250 long parentLayoutId, Map<Locale, String> nameMap,
251 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
252 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
253 String type, String typeSettings, boolean hidden,
254 Map<Locale, String> friendlyURLMap, ServiceContext serviceContext)
255 throws PortalException {
256
257
258
259 User user = userPersistence.findByPrimaryKey(userId);
260 long layoutId = getNextLayoutId(groupId, privateLayout);
261 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
262 groupId, privateLayout, parentLayoutId);
263 String name = nameMap.get(LocaleUtil.getSiteDefault());
264 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
265 groupId, privateLayout, layoutId, name, friendlyURLMap);
266
267 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
268
269 int priority = layoutLocalServiceHelper.getNextPriority(
270 groupId, privateLayout, parentLayoutId, null, -1);
271
272 layoutLocalServiceHelper.validate(
273 groupId, privateLayout, layoutId, parentLayoutId, name, type,
274 hidden, friendlyURLMap);
275
276 Date now = new Date();
277
278 long plid = counterLocalService.increment();
279
280 Layout layout = layoutPersistence.create(plid);
281
282 layout.setUuid(serviceContext.getUuid());
283 layout.setGroupId(groupId);
284 layout.setCompanyId(user.getCompanyId());
285 layout.setUserId(user.getUserId());
286 layout.setUserName(user.getFullName());
287 layout.setCreateDate(serviceContext.getCreateDate(now));
288 layout.setModifiedDate(serviceContext.getModifiedDate(now));
289 layout.setPrivateLayout(privateLayout);
290 layout.setLayoutId(layoutId);
291 layout.setParentLayoutId(parentLayoutId);
292 layout.setNameMap(nameMap);
293 layout.setTitleMap(titleMap);
294 layout.setDescriptionMap(descriptionMap);
295 layout.setKeywordsMap(keywordsMap);
296 layout.setRobotsMap(robotsMap);
297 layout.setType(type);
298 layout.setHidden(hidden);
299 layout.setFriendlyURL(friendlyURL);
300 layout.setPriority(priority);
301
302 boolean layoutUpdateable = ParamUtil.getBoolean(
303 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
304
305 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
306
307 typeSettingsProperties.fastLoad(typeSettings);
308
309 if (!layoutUpdateable) {
310 typeSettingsProperties.put(
311 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
312 }
313
314 if (privateLayout) {
315 typeSettingsProperties.put(
316 "privateLayout", String.valueOf(privateLayout));
317 }
318
319 validateTypeSettingsProperties(typeSettingsProperties);
320
321 layout.setTypeSettingsProperties(typeSettingsProperties);
322
323 String layoutPrototypeUuid = ParamUtil.getString(
324 serviceContext, "layoutPrototypeUuid");
325 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
326 serviceContext, "layoutPrototypeLinkEnabled",
327 PropsValues.LAYOUT_PROTOTYPE_LINK_ENABLED_DEFAULT);
328
329 if (Validator.isNotNull(layoutPrototypeUuid)) {
330 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
331 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
332 }
333
334 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
335 LayoutTypePortlet layoutTypePortlet =
336 (LayoutTypePortlet)layout.getLayoutType();
337
338 if (Validator.isNull(layoutTypePortlet.getLayoutTemplateId())) {
339 layoutTypePortlet.setLayoutTemplateId(
340 0, PropsValues.LAYOUT_DEFAULT_TEMPLATE_ID, false);
341 }
342 }
343
344 layout.setExpandoBridgeAttributes(serviceContext);
345
346 layoutPersistence.update(layout);
347
348
349
350 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
351 user.getUserId(), user.getCompanyId(), groupId, plid, privateLayout,
352 friendlyURLMap, serviceContext);
353
354
355
356 if (Validator.isNotNull(layoutPrototypeUuid) &&
357 !layoutPrototypeLinkEnabled) {
358
359 LayoutPrototype layoutPrototype =
360 layoutPrototypeLocalService.
361 getLayoutPrototypeByUuidAndCompanyId(
362 layoutPrototypeUuid, layout.getCompanyId());
363
364 try {
365 SitesUtil.applyLayoutPrototype(
366 layoutPrototype, layout, layoutPrototypeLinkEnabled);
367 }
368 catch (PortalException pe) {
369 throw pe;
370 }
371 catch (SystemException se) {
372 throw se;
373 }
374 catch (Exception e) {
375 throw new SystemException(e);
376 }
377 }
378
379
380
381 boolean addGroupPermissions = true;
382
383 Group group = groupLocalService.getGroup(groupId);
384
385 if (privateLayout && group.isUser()) {
386 addGroupPermissions = false;
387 }
388
389 boolean addGuestPermissions = false;
390
391 if (!privateLayout || type.equals(LayoutConstants.TYPE_CONTROL_PANEL) ||
392 type.equals(LayoutConstants.TYPE_USER_PERSONAL_PANEL) ||
393 group.isLayoutSetPrototype()) {
394
395 addGuestPermissions = true;
396 }
397
398 resourceLocalService.addResources(
399 user.getCompanyId(), groupId, user.getUserId(),
400 Layout.class.getName(), layout.getPlid(), false,
401 addGroupPermissions, addGuestPermissions);
402
403
404
405 groupLocalService.updateSite(groupId, true);
406
407
408
409 layoutSetLocalService.updatePageCount(groupId, privateLayout);
410
411 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
412 groupId, privateLayout);
413
414 layout.setLayoutSet(layoutSet);
415
416
417
418 updateAsset(
419 userId, layout, serviceContext.getAssetCategoryIds(),
420 serviceContext.getAssetTagNames());
421
422 return layout;
423 }
424
425
480 @Override
481 public Layout addLayout(
482 long userId, long groupId, boolean privateLayout,
483 long parentLayoutId, String name, String title, String description,
484 String type, boolean hidden, String friendlyURL,
485 ServiceContext serviceContext)
486 throws PortalException {
487
488 Locale locale = LocaleUtil.getSiteDefault();
489
490 Map<Locale, String> nameMap = new HashMap<>();
491
492 nameMap.put(locale, name);
493
494 Map<Locale, String> titleMap = new HashMap<>();
495
496 titleMap.put(locale, title);
497
498 Map<Locale, String> descriptionMap = new HashMap<>();
499
500 descriptionMap.put(locale, description);
501
502 Map<Locale, String> friendlyURLMap = new HashMap<>();
503
504 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
505
506 return addLayout(
507 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
508 descriptionMap, new HashMap<Locale, String>(),
509 new HashMap<Locale, String>(), type, StringPool.BLANK, hidden,
510 friendlyURLMap, serviceContext);
511 }
512
513
522 @Override
523 @SystemEvent(
524 action = SystemEventConstants.ACTION_SKIP,
525 type = SystemEventConstants.TYPE_DELETE
526 )
527 public void deleteLayout(
528 Layout layout, boolean updateLayoutSet,
529 ServiceContext serviceContext)
530 throws PortalException {
531
532
533
534 if (layout.getParentLayoutId() ==
535 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
536
537 List<Layout> rootLayouts = layoutPersistence.findByG_P_P(
538 layout.getGroupId(), layout.isPrivateLayout(),
539 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, 0, 2);
540
541 if (rootLayouts.size() > 1) {
542 Layout firstLayout = rootLayouts.get(0);
543
544 if (firstLayout.getLayoutId() == layout.getLayoutId()) {
545 Layout secondLayout = rootLayouts.get(1);
546
547 layoutLocalServiceHelper.validateFirstLayout(secondLayout);
548 }
549 }
550 }
551
552
553
554 List<Layout> childLayouts = layoutPersistence.findByG_P_P(
555 layout.getGroupId(), layout.isPrivateLayout(),
556 layout.getLayoutId());
557
558 for (Layout childLayout : childLayouts) {
559 layoutLocalService.deleteLayout(
560 childLayout, updateLayoutSet, serviceContext);
561 }
562
563
564
565 layoutFriendlyURLLocalService.deleteLayoutFriendlyURLs(
566 layout.getPlid());
567
568
569
570 portletPreferencesLocalService.deletePortletPreferencesByPlid(
571 layout.getPlid());
572
573
574
575 subscriptionLocalService.deleteSubscriptions(
576 layout.getCompanyId(), Layout.class.getName(), layout.getPlid());
577
578
579
580 assetEntryLocalService.deleteEntry(
581 Layout.class.getName(), layout.getPlid());
582
583
584
585 ratingsStatsLocalService.deleteStats(
586 Layout.class.getName(), layout.getPlid());
587
588
589
590 expandoRowLocalService.deleteRows(layout.getPlid());
591
592
593
594 imageLocalService.deleteImage(layout.getIconImageId());
595
596
597
598 Group scopeGroup = layout.getScopeGroup();
599
600 if (scopeGroup != null) {
601 groupLocalService.deleteGroup(scopeGroup.getGroupId());
602 }
603
604
605
606 String primKey =
607 layout.getPlid() + PortletConstants.LAYOUT_SEPARATOR + "%";
608
609 List<ResourcePermission> resourcePermissions =
610 resourcePermissionPersistence.findByC_LikeP(
611 layout.getCompanyId(), primKey);
612
613 for (ResourcePermission resourcePermission : resourcePermissions) {
614 resourcePermissionLocalService.deleteResourcePermission(
615 resourcePermission);
616 }
617
618 resourceLocalService.deleteResource(
619 layout.getCompanyId(), Layout.class.getName(),
620 ResourceConstants.SCOPE_INDIVIDUAL, layout.getPlid());
621
622
623
624 layoutPersistence.remove(layout);
625
626
627
628 if (updateLayoutSet) {
629 layoutSetLocalService.updatePageCount(
630 layout.getGroupId(), layout.isPrivateLayout());
631 }
632
633
634
635 SystemEventHierarchyEntry systemEventHierarchyEntry =
636 SystemEventHierarchyEntryThreadLocal.peek();
637
638 if ((systemEventHierarchyEntry != null) &&
639 systemEventHierarchyEntry.hasTypedModel(
640 Layout.class.getName(), layout.getPlid())) {
641
642 systemEventHierarchyEntry.setExtraDataValue(
643 "privateLayout", StringUtil.valueOf(layout.isPrivateLayout()));
644 }
645 }
646
647
658 @Override
659 public void deleteLayout(
660 long groupId, boolean privateLayout, long layoutId,
661 ServiceContext serviceContext)
662 throws PortalException {
663
664 Layout layout = layoutPersistence.findByG_P_L(
665 groupId, privateLayout, layoutId);
666
667 layoutLocalService.deleteLayout(layout, true, serviceContext);
668 }
669
670
679 @Override
680 public void deleteLayout(long plid, ServiceContext serviceContext)
681 throws PortalException {
682
683 Layout layout = layoutPersistence.findByPrimaryKey(plid);
684
685 layoutLocalService.deleteLayout(layout, true, serviceContext);
686 }
687
688
702 @Override
703 public void deleteLayouts(
704 long groupId, boolean privateLayout, ServiceContext serviceContext)
705 throws PortalException {
706
707
708
709 List<Layout> layouts = layoutPersistence.findByG_P_P(
710 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
711 QueryUtil.ALL_POS, QueryUtil.ALL_POS,
712 new LayoutPriorityComparator(false));
713
714 for (Layout layout : layouts) {
715 try {
716 layoutLocalService.deleteLayout(layout, false, serviceContext);
717 }
718 catch (NoSuchLayoutException nsle) {
719 }
720 }
721
722
723
724 if (GetterUtil.getBoolean(
725 serviceContext.getAttribute("updatePageCount"), true)) {
726
727 layoutSetLocalService.updatePageCount(groupId, privateLayout);
728 }
729
730
731
732 counterLocalService.reset(getCounterName(groupId, privateLayout));
733 }
734
735
753 @Deprecated
754 @Override
755 public byte[] exportLayouts(
756 long groupId, boolean privateLayout, long[] layoutIds,
757 Map<String, String[]> parameterMap, Date startDate, Date endDate)
758 throws PortalException {
759
760 throw new UnsupportedOperationException();
761 }
762
763
779 @Deprecated
780 @Override
781 public byte[] exportLayouts(
782 long groupId, boolean privateLayout,
783 Map<String, String[]> parameterMap, Date startDate, Date endDate)
784 throws PortalException {
785
786 throw new UnsupportedOperationException();
787 }
788
789
795 @Deprecated
796 @Override
797 public File exportLayoutsAsFile(
798 ExportImportConfiguration exportImportConfiguration)
799 throws PortalException {
800
801 throw new UnsupportedOperationException();
802 }
803
804
823 @Deprecated
824 @Override
825 public File exportLayoutsAsFile(
826 long groupId, boolean privateLayout, long[] layoutIds,
827 Map<String, String[]> parameterMap, Date startDate, Date endDate)
828 throws PortalException {
829
830 throw new UnsupportedOperationException();
831 }
832
833
839 @Deprecated
840 @Override
841 public long exportLayoutsAsFileInBackground(
842 long userId, ExportImportConfiguration exportImportConfiguration)
843 throws PortalException {
844
845 throw new UnsupportedOperationException();
846 }
847
848
854 @Deprecated
855 @Override
856 public long exportLayoutsAsFileInBackground(
857 long userId, long exportImportConfigurationId)
858 throws PortalException {
859
860 throw new UnsupportedOperationException();
861 }
862
863
867 @Deprecated
868 @Override
869 public long exportLayoutsAsFileInBackground(
870 long userId, String taskName, long groupId, boolean privateLayout,
871 long[] layoutIds, Map<String, String[]> parameterMap,
872 Date startDate, Date endDate)
873 throws PortalException {
874
875 throw new UnsupportedOperationException();
876 }
877
878
882 @Deprecated
883 @Override
884 public long exportLayoutsAsFileInBackground(
885 long userId, String taskName, long groupId, boolean privateLayout,
886 long[] layoutIds, Map<String, String[]> parameterMap,
887 Date startDate, Date endDate, String fileName)
888 throws PortalException {
889
890 throw new UnsupportedOperationException();
891 }
892
893
912 @Deprecated
913 @Override
914 public byte[] exportPortletInfo(
915 long plid, long groupId, String portletId,
916 Map<String, String[]> parameterMap, Date startDate, Date endDate)
917 throws PortalException {
918
919 throw new UnsupportedOperationException();
920 }
921
922
926 @Deprecated
927 @Override
928 public byte[] exportPortletInfo(
929 long companyId, String portletId,
930 Map<String, String[]> parameterMap, Date startDate, Date endDate)
931 throws PortalException {
932
933 throw new UnsupportedOperationException();
934 }
935
936
942 @Deprecated
943 @Override
944 public File exportPortletInfoAsFile(
945 ExportImportConfiguration exportImportConfiguration)
946 throws PortalException {
947
948 throw new UnsupportedOperationException();
949 }
950
951
970 @Deprecated
971 @Override
972 public File exportPortletInfoAsFile(
973 long plid, long groupId, String portletId,
974 Map<String, String[]> parameterMap, Date startDate, Date endDate)
975 throws PortalException {
976
977 throw new UnsupportedOperationException();
978 }
979
980
984 @Deprecated
985 @Override
986 public File exportPortletInfoAsFile(
987 long companyId, String portletId,
988 Map<String, String[]> parameterMap, Date startDate, Date endDate)
989 throws PortalException {
990
991 throw new UnsupportedOperationException();
992 }
993
994
1000 @Deprecated
1001 @Override
1002 public long exportPortletInfoAsFileInBackground(
1003 long userId, ExportImportConfiguration exportImportConfiguration)
1004 throws PortalException {
1005
1006 throw new UnsupportedOperationException();
1007 }
1008
1009
1015 @Deprecated
1016 @Override
1017 public long exportPortletInfoAsFileInBackground(
1018 long userId, long exportImportConfigurationId)
1019 throws PortalException {
1020
1021 throw new UnsupportedOperationException();
1022 }
1023
1024
1028 @Deprecated
1029 @Override
1030 public long exportPortletInfoAsFileInBackground(
1031 long userId, String taskName, long plid, long groupId,
1032 String portletId, Map<String, String[]> parameterMap,
1033 Date startDate, Date endDate, String fileName)
1034 throws PortalException {
1035
1036 throw new UnsupportedOperationException();
1037 }
1038
1039
1043 @Deprecated
1044 @Override
1045 public long exportPortletInfoAsFileInBackground(
1046 long userId, String taskName, String portletId,
1047 Map<String, String[]> parameterMap, Date startDate, Date endDate,
1048 String fileName)
1049 throws PortalException {
1050
1051 throw new UnsupportedOperationException();
1052 }
1053
1054 @Override
1055 public Layout fetchFirstLayout(
1056 long groupId, boolean privateLayout, long parentLayoutId) {
1057
1058 return layoutPersistence.fetchByG_P_P_First(
1059 groupId, privateLayout, parentLayoutId,
1060 new LayoutPriorityComparator());
1061 }
1062
1063 @Override
1064 public Layout fetchLayout(
1065 long groupId, boolean privateLayout, long layoutId) {
1066
1067 return layoutPersistence.fetchByG_P_L(groupId, privateLayout, layoutId);
1068 }
1069
1070 @Override
1071 public Layout fetchLayoutByFriendlyURL(
1072 long groupId, boolean privateLayout, String friendlyURL) {
1073
1074 return layoutPersistence.fetchByG_P_F(
1075 groupId, privateLayout, friendlyURL);
1076 }
1077
1078
1085 @Override
1086 public long getDefaultPlid(long groupId) {
1087 if (groupId > 0) {
1088 List<Layout> layouts = layoutPersistence.findByGroupId(
1089 groupId, 0, 1);
1090
1091 if (!layouts.isEmpty()) {
1092 Layout layout = layouts.get(0);
1093
1094 return layout.getPlid();
1095 }
1096 }
1097
1098 return LayoutConstants.DEFAULT_PLID;
1099 }
1100
1101
1109 @Override
1110 public long getDefaultPlid(long groupId, boolean privateLayout) {
1111 if (groupId > 0) {
1112 List<Layout> layouts = layoutPersistence.findByG_P(
1113 groupId, privateLayout, 0, 1);
1114
1115 if (!layouts.isEmpty()) {
1116 Layout layout = layouts.get(0);
1117
1118 return layout.getPlid();
1119 }
1120 }
1121
1122 return LayoutConstants.DEFAULT_PLID;
1123 }
1124
1125
1137 @Override
1138 public long getDefaultPlid(
1139 long groupId, boolean privateLayout, String portletId)
1140 throws PortalException {
1141
1142 if (groupId > 0) {
1143 List<Layout> layouts = layoutPersistence.findByG_P(
1144 groupId, privateLayout);
1145
1146 for (Layout layout : layouts) {
1147 if (layout.isTypePortlet()) {
1148 LayoutTypePortlet layoutTypePortlet =
1149 (LayoutTypePortlet)layout.getLayoutType();
1150
1151 if (layoutTypePortlet.hasPortletId(portletId)) {
1152 return layout.getPlid();
1153 }
1154 }
1155 }
1156 }
1157
1158 return LayoutConstants.DEFAULT_PLID;
1159 }
1160
1161
1171 @Override
1172 public Layout getFriendlyURLLayout(
1173 long groupId, boolean privateLayout, String friendlyURL)
1174 throws PortalException {
1175
1176 if (Validator.isNull(friendlyURL)) {
1177 StringBundler sb = new StringBundler(5);
1178
1179 sb.append("{groupId=");
1180 sb.append(groupId);
1181 sb.append(", privateLayout=");
1182 sb.append(privateLayout);
1183 sb.append("}");
1184
1185 throw new NoSuchLayoutException(sb.toString());
1186 }
1187
1188 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(friendlyURL);
1189
1190 Layout layout = null;
1191
1192 List<LayoutFriendlyURL> layoutFriendlyURLs =
1193 layoutFriendlyURLPersistence.findByG_P_F(
1194 groupId, privateLayout, friendlyURL, 0, 1);
1195
1196 if (!layoutFriendlyURLs.isEmpty()) {
1197 LayoutFriendlyURL layoutFriendlyURL = layoutFriendlyURLs.get(0);
1198
1199 layout = layoutPersistence.findByPrimaryKey(
1200 layoutFriendlyURL.getPlid());
1201 }
1202
1203 if ((layout == null) && friendlyURL.startsWith(StringPool.SLASH) &&
1204 Validator.isNumber(friendlyURL.substring(1))) {
1205
1206 long layoutId = GetterUtil.getLong(friendlyURL.substring(1));
1207
1208 layout = layoutPersistence.fetchByG_P_L(
1209 groupId, privateLayout, layoutId);
1210 }
1211
1212 if (layout == null) {
1213 StringBundler sb = new StringBundler(7);
1214
1215 sb.append("{groupId=");
1216 sb.append(groupId);
1217 sb.append(", privateLayout=");
1218 sb.append(privateLayout);
1219 sb.append(", friendlyURL=");
1220 sb.append(friendlyURL);
1221 sb.append("}");
1222
1223 throw new NoSuchLayoutException(sb.toString());
1224 }
1225
1226 return layout;
1227 }
1228
1229
1239 @Override
1240 public Layout getLayout(long groupId, boolean privateLayout, long layoutId)
1241 throws PortalException {
1242
1243 return layoutPersistence.findByG_P_L(groupId, privateLayout, layoutId);
1244 }
1245
1246
1255 @Override
1256 public Layout getLayoutByIconImageId(long iconImageId)
1257 throws PortalException {
1258
1259 return layoutPersistence.findByIconImageId(iconImageId);
1260 }
1261
1262
1270 @Override
1271 public List<Layout> getLayouts(long groupId, boolean privateLayout) {
1272 return layoutPersistence.findByG_P(groupId, privateLayout);
1273 }
1274
1275
1285 @Override
1286 public List<Layout> getLayouts(
1287 long groupId, boolean privateLayout, long parentLayoutId) {
1288
1289 return layoutPersistence.findByG_P_P(
1290 groupId, privateLayout, parentLayoutId);
1291 }
1292
1293
1316 @Override
1317 public List<Layout> getLayouts(
1318 long groupId, boolean privateLayout, long parentLayoutId,
1319 boolean incomplete, int start, int end) {
1320
1321 return layoutPersistence.findByG_P_P(
1322 groupId, privateLayout, parentLayoutId, start, end);
1323 }
1324
1325
1336 @Override
1337 public List<Layout> getLayouts(
1338 long groupId, boolean privateLayout, long[] layoutIds)
1339 throws PortalException {
1340
1341 List<Layout> layouts = new ArrayList<>();
1342
1343 for (long layoutId : layoutIds) {
1344 Layout layout = getLayout(groupId, privateLayout, layoutId);
1345
1346 layouts.add(layout);
1347 }
1348
1349 return layouts;
1350 }
1351
1352
1362 @Override
1363 public List<Layout> getLayouts(
1364 long groupId, boolean privateLayout, String type) {
1365
1366 return layoutPersistence.findByG_P_T(groupId, privateLayout, type);
1367 }
1368
1369
1379 @Override
1380 public LayoutReference[] getLayouts(
1381 long companyId, String portletId, String preferencesKey,
1382 String preferencesValue) {
1383
1384 List<LayoutReference> layoutReferences = layoutFinder.findByC_P_P(
1385 companyId, portletId, preferencesKey, preferencesValue);
1386
1387 return layoutReferences.toArray(
1388 new LayoutReference[layoutReferences.size()]);
1389 }
1390
1391 @Override
1392 public List<Layout> getLayoutsByLayoutPrototypeUuid(
1393 String layoutPrototypeUuid) {
1394
1395 return layoutPersistence.findByLayoutPrototypeUuid(layoutPrototypeUuid);
1396 }
1397
1398 @Override
1399 public int getLayoutsByLayoutPrototypeUuidCount(
1400 String layoutPrototypeUuid) {
1401
1402 return layoutPersistence.countByLayoutPrototypeUuid(
1403 layoutPrototypeUuid);
1404 }
1405
1406 @Override
1407 public int getLayoutsCount(Group group, boolean privateLayout)
1408 throws PortalException {
1409
1410 return getLayoutsCount(group, privateLayout, true);
1411 }
1412
1413 @Override
1414 public int getLayoutsCount(
1415 Group group, boolean privateLayout, boolean includeUserGroups)
1416 throws PortalException {
1417
1418 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1419 group.getGroupId(), privateLayout);
1420
1421 int count = layoutSet.getPageCount();
1422
1423 if (!group.isUser() || !includeUserGroups) {
1424 return count;
1425 }
1426
1427 long[] userGroupIds = userPersistence.getUserGroupPrimaryKeys(
1428 group.getClassPK());
1429
1430 if (userGroupIds.length != 0) {
1431 long userGroupClassNameId = classNameLocalService.getClassNameId(
1432 UserGroup.class);
1433
1434 for (long userGroupId : userGroupIds) {
1435 Group userGroupGroup = groupPersistence.findByC_C_C(
1436 group.getCompanyId(), userGroupClassNameId, userGroupId);
1437
1438 layoutSet = layoutSetPersistence.findByG_P(
1439 userGroupGroup.getGroupId(), privateLayout);
1440
1441 count += layoutSet.getPageCount();
1442 }
1443 }
1444
1445 return count;
1446 }
1447
1448 @Override
1449 public int getLayoutsCount(
1450 Group group, boolean privateLayout, long parentLayoutId) {
1451
1452 return layoutPersistence.countByG_P_P(
1453 group.getGroupId(), privateLayout, parentLayoutId);
1454 }
1455
1456 @Override
1457 public int getLayoutsCount(User user, boolean privateLayout)
1458 throws PortalException {
1459
1460 return getLayoutsCount(user, privateLayout, true);
1461 }
1462
1463 @Override
1464 public int getLayoutsCount(
1465 User user, boolean privateLayout, boolean includeUserGroups)
1466 throws PortalException {
1467
1468 long classNameId = classNameLocalService.getClassNameId(User.class);
1469
1470 Group group = groupPersistence.findByC_C_C(
1471 user.getCompanyId(), classNameId, user.getUserId());
1472
1473 return getLayoutsCount(group, privateLayout, includeUserGroups);
1474 }
1475
1476
1483 @Override
1484 public long getNextLayoutId(long groupId, boolean privateLayout) {
1485 long nextLayoutId = counterLocalService.increment(
1486 getCounterName(groupId, privateLayout));
1487
1488 if (nextLayoutId == 1) {
1489 List<Layout> layouts = layoutPersistence.findByG_P(
1490 groupId, privateLayout, 0, 1, new LayoutComparator());
1491
1492 if (!layouts.isEmpty()) {
1493 Layout layout = layouts.get(0);
1494
1495 nextLayoutId = layout.getLayoutId() + 1;
1496
1497 counterLocalService.reset(
1498 getCounterName(groupId, privateLayout), nextLayoutId);
1499 }
1500 }
1501
1502 return nextLayoutId;
1503 }
1504
1505
1511 @Override
1512 public List<Layout> getNoPermissionLayouts(long roleId) {
1513 return layoutFinder.findByNoPermissions(roleId);
1514 }
1515
1516
1521 @Override
1522 public List<Layout> getNullFriendlyURLLayouts() {
1523 return layoutFinder.findByNullFriendlyURL();
1524 }
1525
1526 @Override
1527 public Layout getParentLayout(Layout layout) throws PortalException {
1528 Layout parentLayout = null;
1529
1530 if (layout instanceof VirtualLayout) {
1531 VirtualLayout virtualLayout = (VirtualLayout)layout;
1532
1533 Layout sourceLayout = virtualLayout.getSourceLayout();
1534
1535 parentLayout = getLayout(
1536 sourceLayout.getGroupId(), sourceLayout.isPrivateLayout(),
1537 sourceLayout.getParentLayoutId());
1538
1539 parentLayout = new VirtualLayout(parentLayout, layout.getGroup());
1540 }
1541 else {
1542 parentLayout = getLayout(
1543 layout.getGroupId(), layout.isPrivateLayout(),
1544 layout.getParentLayoutId());
1545 }
1546
1547 return parentLayout;
1548 }
1549
1550
1557 @Override
1558 public List<Layout> getScopeGroupLayouts(
1559 long groupId, boolean privateLayout) {
1560
1561 return layoutFinder.findByScopeGroup(groupId, privateLayout);
1562 }
1563
1564 @Override
1565 public boolean hasLayouts(Group group, boolean privateLayout)
1566 throws PortalException {
1567
1568 return hasLayouts(group, privateLayout, true);
1569 }
1570
1571 @Override
1572 public boolean hasLayouts(
1573 Group group, boolean privateLayout, boolean includeUserGroups)
1574 throws PortalException {
1575
1576 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1577 group.getGroupId(), privateLayout);
1578
1579 if (layoutSet.getPageCount() > 0) {
1580 return true;
1581 }
1582
1583 if (!group.isUser() || !includeUserGroups) {
1584 return false;
1585 }
1586
1587 long[] userGroupIds = userPersistence.getUserGroupPrimaryKeys(
1588 group.getClassPK());
1589
1590 if (userGroupIds.length != 0) {
1591 long userGroupClassNameId = classNameLocalService.getClassNameId(
1592 UserGroup.class);
1593
1594 for (long userGroupId : userGroupIds) {
1595 Group userGroupGroup = groupPersistence.findByC_C_C(
1596 group.getCompanyId(), userGroupClassNameId, userGroupId);
1597
1598 layoutSet = layoutSetPersistence.findByG_P(
1599 userGroupGroup.getGroupId(), privateLayout);
1600
1601 if (layoutSet.getPageCount() > 0) {
1602 return true;
1603 }
1604 }
1605 }
1606
1607 return false;
1608 }
1609
1610
1620 @Override
1621 public boolean hasLayouts(
1622 long groupId, boolean privateLayout, long parentLayoutId) {
1623
1624 return layoutPersistence.countByG_P_P(
1625 groupId, privateLayout, parentLayoutId) > 0;
1626 }
1627
1628 @Override
1629 public boolean hasLayouts(User user, boolean privateLayout)
1630 throws PortalException {
1631
1632 return hasLayouts(user, privateLayout, true);
1633 }
1634
1635 @Override
1636 public boolean hasLayouts(
1637 User user, boolean privateLayout, boolean includeUserGroups)
1638 throws PortalException {
1639
1640 long classNameId = classNameLocalService.getClassNameId(User.class);
1641
1642 Group group = groupPersistence.findByC_C_C(
1643 user.getCompanyId(), classNameId, user.getUserId());
1644
1645 return hasLayouts(group, privateLayout, includeUserGroups);
1646 }
1647
1648 @Override
1649 public boolean hasLayoutSetPrototypeLayout(
1650 long layoutSetPrototypeId, String layoutUuid)
1651 throws PortalException {
1652
1653 LayoutSetPrototype layoutSetPrototype =
1654 layoutSetPrototypeLocalService.getLayoutSetPrototype(
1655 layoutSetPrototypeId);
1656
1657 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1658 layoutSetPrototype, layoutUuid);
1659 }
1660
1661 @Override
1662 public boolean hasLayoutSetPrototypeLayout(
1663 String layoutSetPrototypeUuid, long companyId, String layoutUuid)
1664 throws PortalException {
1665
1666 LayoutSetPrototype layoutSetPrototype =
1667 layoutSetPrototypeLocalService.
1668 getLayoutSetPrototypeByUuidAndCompanyId(
1669 layoutSetPrototypeUuid, companyId);
1670
1671 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1672 layoutSetPrototype, layoutUuid);
1673 }
1674
1675
1681 @Deprecated
1682 @Override
1683 public void importLayouts(
1684 ExportImportConfiguration exportImportConfiguration, File file)
1685 throws PortalException {
1686
1687 throw new UnsupportedOperationException();
1688 }
1689
1690
1696 @Deprecated
1697 @Override
1698 public void importLayouts(
1699 ExportImportConfiguration exportImportConfiguration, InputStream is)
1700 throws PortalException {
1701
1702 throw new UnsupportedOperationException();
1703 }
1704
1705
1721 @Deprecated
1722 @Override
1723 public void importLayouts(
1724 long userId, long groupId, boolean privateLayout,
1725 Map<String, String[]> parameterMap, byte[] bytes)
1726 throws PortalException {
1727
1728 throw new UnsupportedOperationException();
1729 }
1730
1731
1747 @Deprecated
1748 @Override
1749 public void importLayouts(
1750 long userId, long groupId, boolean privateLayout,
1751 Map<String, String[]> parameterMap, File file)
1752 throws PortalException {
1753
1754 throw new UnsupportedOperationException();
1755 }
1756
1757
1773 @Deprecated
1774 @Override
1775 public void importLayouts(
1776 long userId, long groupId, boolean privateLayout,
1777 Map<String, String[]> parameterMap, InputStream is)
1778 throws PortalException {
1779
1780 throw new UnsupportedOperationException();
1781 }
1782
1783
1789 @Deprecated
1790 @Override
1791 public void importLayoutsDataDeletions(
1792 ExportImportConfiguration exportImportConfiguration, File file)
1793 throws PortalException {
1794
1795 throw new UnsupportedOperationException();
1796 }
1797
1798
1804 @Deprecated
1805 @Override
1806 public long importLayoutsInBackground(
1807 long userId, ExportImportConfiguration exportImportConfiguration,
1808 File file)
1809 throws PortalException {
1810
1811 throw new UnsupportedOperationException();
1812 }
1813
1814
1820 @Deprecated
1821 @Override
1822 public long importLayoutsInBackground(
1823 long userId, long exportImportConfigurationId, File file)
1824 throws PortalException {
1825
1826 throw new UnsupportedOperationException();
1827 }
1828
1829
1833 @Deprecated
1834 @Override
1835 public long importLayoutsInBackground(
1836 long userId, String taskName, long groupId, boolean privateLayout,
1837 Map<String, String[]> parameterMap, File file)
1838 throws PortalException {
1839
1840 throw new UnsupportedOperationException();
1841 }
1842
1843
1847 @Deprecated
1848 @Override
1849 public long importLayoutsInBackground(
1850 long userId, String taskName, long groupId, boolean privateLayout,
1851 Map<String, String[]> parameterMap, InputStream is)
1852 throws PortalException {
1853
1854 throw new UnsupportedOperationException();
1855 }
1856
1857
1863 @Deprecated
1864 @Override
1865 public void importPortletDataDeletions(
1866 ExportImportConfiguration exportImportConfiguration, File file)
1867 throws PortalException {
1868
1869 throw new UnsupportedOperationException();
1870 }
1871
1872
1878 @Deprecated
1879 @Override
1880 public void importPortletInfo(
1881 ExportImportConfiguration exportImportConfiguration, File file)
1882 throws PortalException {
1883
1884 throw new UnsupportedOperationException();
1885 }
1886
1887
1893 @Deprecated
1894 @Override
1895 public void importPortletInfo(
1896 ExportImportConfiguration exportImportConfiguration, InputStream is)
1897 throws PortalException {
1898
1899 throw new UnsupportedOperationException();
1900 }
1901
1902
1919 @Deprecated
1920 @Override
1921 public void importPortletInfo(
1922 long userId, long plid, long groupId, String portletId,
1923 Map<String, String[]> parameterMap, File file)
1924 throws PortalException {
1925
1926 throw new UnsupportedOperationException();
1927 }
1928
1929
1946 @Deprecated
1947 @Override
1948 public void importPortletInfo(
1949 long userId, long plid, long groupId, String portletId,
1950 Map<String, String[]> parameterMap, InputStream is)
1951 throws PortalException {
1952
1953 throw new UnsupportedOperationException();
1954 }
1955
1956
1960 @Deprecated
1961 @Override
1962 public void importPortletInfo(
1963 long userId, String portletId, Map<String, String[]> parameterMap,
1964 File file)
1965 throws PortalException {
1966
1967 throw new UnsupportedOperationException();
1968 }
1969
1970
1974 @Deprecated
1975 @Override
1976 public void importPortletInfo(
1977 long userId, String portletId, Map<String, String[]> parameterMap,
1978 InputStream is)
1979 throws PortalException {
1980
1981 throw new UnsupportedOperationException();
1982 }
1983
1984
1990 @Deprecated
1991 @Override
1992 public long importPortletInfoInBackground(
1993 long userId, ExportImportConfiguration exportImportConfiguration,
1994 File file)
1995 throws PortalException {
1996
1997 throw new UnsupportedOperationException();
1998 }
1999
2000
2006 @Deprecated
2007 @Override
2008 public long importPortletInfoInBackground(
2009 long userId, long exportImportConfigurationId, File file)
2010 throws PortalException {
2011
2012 throw new UnsupportedOperationException();
2013 }
2014
2015
2019 @Deprecated
2020 @Override
2021 public long importPortletInfoInBackground(
2022 long userId, String taskName, long plid, long groupId,
2023 String portletId, Map<String, String[]> parameterMap, File file)
2024 throws PortalException {
2025
2026 throw new UnsupportedOperationException();
2027 }
2028
2029
2033 @Deprecated
2034 @Override
2035 public long importPortletInfoInBackground(
2036 long userId, String taskName, long plid, long groupId,
2037 String portletId, Map<String, String[]> parameterMap,
2038 InputStream is)
2039 throws PortalException {
2040
2041 throw new UnsupportedOperationException();
2042 }
2043
2044
2048 @Deprecated
2049 @Override
2050 public long importPortletInfoInBackground(
2051 long userId, String taskName, String portletId,
2052 Map<String, String[]> parameterMap, File file)
2053 throws PortalException {
2054
2055 throw new UnsupportedOperationException();
2056 }
2057
2058
2062 @Deprecated
2063 @Override
2064 public long importPortletInfoInBackground(
2065 long userId, String taskName, String portletId,
2066 Map<String, String[]> parameterMap, InputStream is)
2067 throws PortalException {
2068
2069 throw new UnsupportedOperationException();
2070 }
2071
2072
2086 @Override
2087 public void setLayouts(
2088 long groupId, boolean privateLayout, long parentLayoutId,
2089 long[] layoutIds, ServiceContext serviceContext)
2090 throws PortalException {
2091
2092 if (layoutIds == null) {
2093 return;
2094 }
2095
2096 if (parentLayoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2097 if (layoutIds.length < 1) {
2098 throw new RequiredLayoutException(
2099 RequiredLayoutException.AT_LEAST_ONE);
2100 }
2101
2102 Layout layout = layoutPersistence.findByG_P_L(
2103 groupId, privateLayout, layoutIds[0]);
2104
2105 LayoutType layoutType = layout.getLayoutType();
2106
2107 if (!layoutType.isFirstPageable()) {
2108 throw new RequiredLayoutException(
2109 RequiredLayoutException.FIRST_LAYOUT_TYPE);
2110 }
2111 }
2112
2113 Set<Long> layoutIdsSet = new LinkedHashSet<>();
2114
2115 for (long layoutId : layoutIds) {
2116 layoutIdsSet.add(layoutId);
2117 }
2118
2119 Set<Long> newLayoutIdsSet = new HashSet<>();
2120
2121 List<Layout> layouts = layoutPersistence.findByG_P_P(
2122 groupId, privateLayout, parentLayoutId);
2123
2124 for (Layout layout : layouts) {
2125 if (!layoutIdsSet.contains(layout.getLayoutId())) {
2126 deleteLayout(layout, true, serviceContext);
2127 }
2128 else {
2129 newLayoutIdsSet.add(layout.getLayoutId());
2130 }
2131 }
2132
2133 int priority = 0;
2134
2135 for (long layoutId : layoutIdsSet) {
2136 Layout layout = layoutPersistence.findByG_P_L(
2137 groupId, privateLayout, layoutId);
2138
2139 layout.setPriority(priority++);
2140
2141 layoutPersistence.update(layout);
2142 }
2143
2144 layoutSetLocalService.updatePageCount(groupId, privateLayout);
2145 }
2146
2147 @Override
2148 public void updateAsset(
2149 long userId, Layout layout, long[] assetCategoryIds,
2150 String[] assetTagNames)
2151 throws PortalException {
2152
2153 assetEntryLocalService.updateEntry(
2154 userId, layout.getGroupId(), layout.getCreateDate(),
2155 layout.getModifiedDate(), Layout.class.getName(), layout.getPlid(),
2156 layout.getUuid(), 0, assetCategoryIds, assetTagNames, false, null,
2157 null, null, ContentTypes.TEXT_HTML,
2158 layout.getName(LocaleUtil.getDefault()), null, null, null, null, 0,
2159 0, null);
2160 }
2161
2162
2173 @Override
2174 public Layout updateFriendlyURL(
2175 long userId, long plid, String friendlyURL, String languageId)
2176 throws PortalException {
2177
2178 Date now = new Date();
2179
2180 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2181
2182 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
2183 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2184 StringPool.BLANK, friendlyURL);
2185
2186 layoutLocalServiceHelper.validateFriendlyURL(
2187 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2188 friendlyURL);
2189
2190 layoutFriendlyURLLocalService.updateLayoutFriendlyURL(
2191 userId, layout.getCompanyId(), layout.getGroupId(),
2192 layout.getPlid(), layout.isPrivateLayout(), friendlyURL, languageId,
2193 new ServiceContext());
2194
2195 layout.setModifiedDate(now);
2196
2197 String defaultLanguageId = LocaleUtil.toLanguageId(
2198 LocaleUtil.getSiteDefault());
2199
2200 if (languageId.equals(defaultLanguageId)) {
2201 layout.setFriendlyURL(friendlyURL);
2202 }
2203
2204 layoutPersistence.update(layout);
2205
2206 return layout;
2207 }
2208
2209
2221 @Deprecated
2222 @Override
2223 public Layout updateFriendlyURL(
2224 long plid, String friendlyURL, String languageId)
2225 throws PortalException {
2226
2227 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2228
2229 return updateFriendlyURL(
2230 layout.getUserId(), plid, friendlyURL, languageId);
2231 }
2232
2233 @Override
2234 public Layout updateIconImage(long plid, byte[] bytes)
2235 throws PortalException {
2236
2237 Layout layout = layoutPersistence.fetchByPrimaryKey(plid);
2238
2239 if (layout == null) {
2240 return null;
2241 }
2242
2243 PortalUtil.updateImageId(layout, true, bytes, "iconImageId", 0, 0, 0);
2244
2245 layoutPersistence.update(layout);
2246
2247 return layout;
2248 }
2249
2250
2291 @Override
2292 public Layout updateLayout(
2293 long groupId, boolean privateLayout, long layoutId,
2294 long parentLayoutId, Map<Locale, String> nameMap,
2295 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2296 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2297 String type, boolean hidden, Map<Locale, String> friendlyURLMap,
2298 boolean iconImage, byte[] iconBytes, ServiceContext serviceContext)
2299 throws PortalException {
2300
2301
2302
2303 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2304 groupId, privateLayout, parentLayoutId);
2305 String name = nameMap.get(LocaleUtil.getSiteDefault());
2306 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
2307 groupId, privateLayout, layoutId, name, friendlyURLMap);
2308
2309 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
2310
2311 layoutLocalServiceHelper.validate(
2312 groupId, privateLayout, layoutId, parentLayoutId, name, type,
2313 hidden, friendlyURLMap);
2314
2315 layoutLocalServiceHelper.validateParentLayoutId(
2316 groupId, privateLayout, layoutId, parentLayoutId);
2317
2318 Date now = new Date();
2319
2320 Layout layout = layoutPersistence.findByG_P_L(
2321 groupId, privateLayout, layoutId);
2322
2323 if (parentLayoutId != layout.getParentLayoutId()) {
2324 int priority = layoutLocalServiceHelper.getNextPriority(
2325 groupId, privateLayout, parentLayoutId,
2326 layout.getSourcePrototypeLayoutUuid(), -1);
2327
2328 layout.setPriority(priority);
2329 }
2330
2331 layout.setModifiedDate(serviceContext.getModifiedDate(now));
2332 layout.setParentLayoutId(parentLayoutId);
2333 layout.setNameMap(nameMap);
2334 layout.setTitleMap(titleMap);
2335 layout.setDescriptionMap(descriptionMap);
2336 layout.setKeywordsMap(keywordsMap);
2337 layout.setRobotsMap(robotsMap);
2338 layout.setType(type);
2339 layout.setHidden(hidden);
2340 layout.setFriendlyURL(friendlyURL);
2341
2342 PortalUtil.updateImageId(
2343 layout, iconImage, iconBytes, "iconImageId", 0, 0, 0);
2344
2345 boolean layoutUpdateable = ParamUtil.getBoolean(
2346 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
2347
2348 UnicodeProperties typeSettingsProperties =
2349 layout.getTypeSettingsProperties();
2350
2351 typeSettingsProperties.put(
2352 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
2353
2354 if (privateLayout) {
2355 typeSettingsProperties.put(
2356 "privateLayout", String.valueOf(privateLayout));
2357 }
2358
2359 layout.setTypeSettingsProperties(typeSettingsProperties);
2360
2361 String layoutPrototypeUuid = ParamUtil.getString(
2362 serviceContext, "layoutPrototypeUuid");
2363 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
2364 serviceContext, "layoutPrototypeLinkEnabled");
2365
2366 if (Validator.isNotNull(layoutPrototypeUuid)) {
2367 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
2368 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
2369 }
2370
2371 layout.setExpandoBridgeAttributes(serviceContext);
2372
2373 layoutPersistence.update(layout);
2374
2375
2376
2377 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
2378 serviceContext.getUserId(), layout.getCompanyId(),
2379 layout.getGroupId(), layout.getPlid(), layout.isPrivateLayout(),
2380 friendlyURLMap, serviceContext);
2381
2382
2383
2384 updateAsset(
2385 serviceContext.getUserId(), layout,
2386 serviceContext.getAssetCategoryIds(),
2387 serviceContext.getAssetTagNames());
2388
2389 return layout;
2390 }
2391
2392
2445 @Deprecated
2446 @Override
2447 public Layout updateLayout(
2448 long groupId, boolean privateLayout, long layoutId,
2449 long parentLayoutId, Map<Locale, String> nameMap,
2450 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2451 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2452 String type, boolean hidden, String friendlyURL, Boolean iconImage,
2453 byte[] iconBytes, ServiceContext serviceContext)
2454 throws PortalException {
2455
2456 Map<Locale, String> friendlyURLMap = new HashMap<>();
2457
2458 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
2459
2460 return updateLayout(
2461 groupId, privateLayout, layoutId, parentLayoutId, nameMap, titleMap,
2462 descriptionMap, keywordsMap, robotsMap, type, hidden,
2463 friendlyURLMap, iconImage, iconBytes, serviceContext);
2464 }
2465
2466
2479 @Override
2480 public Layout updateLayout(
2481 long groupId, boolean privateLayout, long layoutId,
2482 String typeSettings)
2483 throws PortalException {
2484
2485 Date now = new Date();
2486
2487 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
2488
2489 typeSettingsProperties.fastLoad(typeSettings);
2490
2491 validateTypeSettingsProperties(typeSettingsProperties);
2492
2493 Layout layout = layoutPersistence.findByG_P_L(
2494 groupId, privateLayout, layoutId);
2495
2496 layout.setModifiedDate(now);
2497 layout.setTypeSettings(typeSettingsProperties.toString());
2498
2499 layoutPersistence.update(layout);
2500
2501 return layout;
2502 }
2503
2504
2517 @Override
2518 public Layout updateLookAndFeel(
2519 long groupId, boolean privateLayout, long layoutId, String themeId,
2520 String colorSchemeId, String css, boolean wapTheme)
2521 throws PortalException {
2522
2523 Date now = new Date();
2524
2525 Layout layout = layoutPersistence.findByG_P_L(
2526 groupId, privateLayout, layoutId);
2527
2528 layout.setModifiedDate(now);
2529
2530 if (wapTheme) {
2531 layout.setWapThemeId(themeId);
2532 layout.setWapColorSchemeId(colorSchemeId);
2533 }
2534 else {
2535 layout.setThemeId(themeId);
2536 layout.setColorSchemeId(colorSchemeId);
2537 layout.setCss(css);
2538 }
2539
2540 layoutPersistence.update(layout);
2541
2542 return layout;
2543 }
2544
2545
2555 @Override
2556 public Layout updateName(Layout layout, String name, String languageId)
2557 throws PortalException {
2558
2559 Date now = new Date();
2560
2561 layoutLocalServiceHelper.validateName(name, languageId);
2562
2563 layout.setModifiedDate(now);
2564 layout.setName(name, LocaleUtil.fromLanguageId(languageId));
2565
2566 layoutPersistence.update(layout);
2567
2568 Group group = layout.getGroup();
2569
2570 if (group.isLayoutPrototype()) {
2571 LayoutPrototype layoutPrototype =
2572 layoutPrototypeLocalService.getLayoutPrototype(
2573 group.getClassPK());
2574
2575 layoutPrototype.setModifiedDate(now);
2576 layoutPrototype.setName(
2577 name, LocaleUtil.fromLanguageId(languageId));
2578
2579 layoutPrototypePersistence.update(layoutPrototype);
2580 }
2581
2582 return layout;
2583 }
2584
2585
2599 @Override
2600 public Layout updateName(
2601 long groupId, boolean privateLayout, long layoutId, String name,
2602 String languageId)
2603 throws PortalException {
2604
2605 Layout layout = layoutPersistence.findByG_P_L(
2606 groupId, privateLayout, layoutId);
2607
2608 return updateName(layout, name, languageId);
2609 }
2610
2611
2622 @Override
2623 public Layout updateName(long plid, String name, String languageId)
2624 throws PortalException {
2625
2626 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2627
2628 return updateName(layout, name, languageId);
2629 }
2630
2631
2644 @Override
2645 public Layout updateParentLayoutId(
2646 long groupId, boolean privateLayout, long layoutId,
2647 long parentLayoutId)
2648 throws PortalException {
2649
2650 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2651 groupId, privateLayout, parentLayoutId);
2652
2653 layoutLocalServiceHelper.validateParentLayoutId(
2654 groupId, privateLayout, layoutId, parentLayoutId);
2655
2656 Date now = new Date();
2657
2658 Layout layout = layoutPersistence.findByG_P_L(
2659 groupId, privateLayout, layoutId);
2660
2661 if (parentLayoutId != layout.getParentLayoutId()) {
2662 int priority = layoutLocalServiceHelper.getNextPriority(
2663 groupId, privateLayout, parentLayoutId,
2664 layout.getSourcePrototypeLayoutUuid(), -1);
2665
2666 layout.setPriority(priority);
2667 }
2668
2669 layout.setModifiedDate(now);
2670 layout.setParentLayoutId(parentLayoutId);
2671
2672 layoutPersistence.update(layout);
2673
2674 return layout;
2675 }
2676
2677
2690 @Override
2691 public Layout updateParentLayoutId(long plid, long parentPlid)
2692 throws PortalException {
2693
2694 Date now = new Date();
2695
2696 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2697
2698 long parentLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
2699
2700 if (parentPlid > 0) {
2701 Layout parentLayout = layoutPersistence.fetchByPrimaryKey(
2702 parentPlid);
2703
2704 if (parentLayout != null) {
2705 parentLayoutId = parentLayout.getLayoutId();
2706 }
2707 }
2708
2709 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2710 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId);
2711
2712 layoutLocalServiceHelper.validateParentLayoutId(
2713 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2714 parentLayoutId);
2715
2716 if (parentLayoutId != layout.getParentLayoutId()) {
2717 int priority = layoutLocalServiceHelper.getNextPriority(
2718 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId,
2719 layout.getSourcePrototypeLayoutUuid(), -1);
2720
2721 layout.setPriority(priority);
2722 }
2723
2724 layout.setModifiedDate(now);
2725 layout.setParentLayoutId(parentLayoutId);
2726
2727 layoutPersistence.update(layout);
2728
2729 return layout;
2730 }
2731
2732
2742 @Override
2743 public Layout updateParentLayoutIdAndPriority(
2744 long plid, long parentPlid, int priority)
2745 throws PortalException {
2746
2747 Layout layout = updateParentLayoutId(plid, parentPlid);
2748
2749 return updatePriority(layout, priority);
2750 }
2751
2752
2759 @Override
2760 public void updatePriorities(long groupId, boolean privateLayout)
2761 throws PortalException {
2762
2763 List<Layout> layouts = layoutPersistence.findByG_P(
2764 groupId, privateLayout);
2765
2766 for (Layout layout : layouts) {
2767 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2768 layout.getGroupId(), layout.isPrivateLayout(),
2769 layout.getParentLayoutId(),
2770 layout.getSourcePrototypeLayoutUuid(), layout.getPriority());
2771
2772 layout.setPriority(nextPriority);
2773
2774 layoutPersistence.update(layout);
2775 }
2776 }
2777
2778
2786 @Override
2787 public Layout updatePriority(Layout layout, int priority)
2788 throws PortalException {
2789
2790 if (layout.getPriority() == priority) {
2791 return layout;
2792 }
2793
2794 int oldPriority = layout.getPriority();
2795
2796 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2797 layout.getGroupId(), layout.isPrivateLayout(),
2798 layout.getParentLayoutId(), layout.getSourcePrototypeLayoutUuid(),
2799 priority);
2800
2801 if (oldPriority == nextPriority) {
2802 return layout;
2803 }
2804
2805 layout.setModifiedDate(new Date());
2806 layout.setPriority(nextPriority);
2807
2808 layoutPersistence.update(layout);
2809
2810 List<Layout> layouts = layoutPersistence.findByG_P_P(
2811 layout.getGroupId(), layout.isPrivateLayout(),
2812 layout.getParentLayoutId());
2813
2814 boolean lessThan = false;
2815
2816 if (oldPriority < nextPriority) {
2817 lessThan = true;
2818 }
2819
2820 layouts = ListUtil.sort(
2821 layouts, new LayoutPriorityComparator(layout, lessThan));
2822
2823 if (layout.getParentLayoutId() ==
2824 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2825
2826 Layout firstLayout = layouts.get(0);
2827
2828 layoutLocalServiceHelper.validateFirstLayout(firstLayout);
2829 }
2830
2831 int newPriority = LayoutConstants.FIRST_PRIORITY;
2832
2833 for (Layout curLayout : layouts) {
2834 int curNextPriority = layoutLocalServiceHelper.getNextPriority(
2835 layout.getGroupId(), layout.isPrivateLayout(),
2836 layout.getParentLayoutId(),
2837 curLayout.getSourcePrototypeLayoutUuid(), newPriority++);
2838
2839 if (curLayout.getPriority() == curNextPriority) {
2840 continue;
2841 }
2842
2843 curLayout.setModifiedDate(layout.getModifiedDate());
2844 curLayout.setPriority(curNextPriority);
2845
2846 layoutPersistence.update(curLayout);
2847
2848 if (curLayout.equals(layout)) {
2849 layout = curLayout;
2850 }
2851 }
2852
2853 return layout;
2854 }
2855
2856
2867 @Override
2868 public Layout updatePriority(
2869 long groupId, boolean privateLayout, long layoutId, int priority)
2870 throws PortalException {
2871
2872 Layout layout = layoutPersistence.findByG_P_L(
2873 groupId, privateLayout, layoutId);
2874
2875 return updatePriority(layout, priority);
2876 }
2877
2878
2891 @Override
2892 public Layout updatePriority(
2893 long groupId, boolean privateLayout, long layoutId,
2894 long nextLayoutId, long previousLayoutId)
2895 throws PortalException {
2896
2897 Layout layout = getLayout(groupId, privateLayout, layoutId);
2898
2899 int priority = layout.getPriority();
2900
2901 Layout nextLayout = null;
2902
2903 if (nextLayoutId > -1) {
2904 nextLayout = getLayout(groupId, privateLayout, nextLayoutId);
2905 }
2906
2907 Layout previousLayout = null;
2908
2909 if (previousLayoutId > -1) {
2910 previousLayout = getLayout(
2911 groupId, privateLayout, previousLayoutId);
2912 }
2913
2914 if ((nextLayout != null) && (priority > nextLayout.getPriority())) {
2915 priority = nextLayout.getPriority();
2916 }
2917 else if ((previousLayout != null) &&
2918 (priority < previousLayout.getPriority())) {
2919
2920 priority = previousLayout.getPriority();
2921 }
2922
2923 return updatePriority(layout, priority);
2924 }
2925
2926
2935 @Override
2936 public Layout updatePriority(long plid, int priority)
2937 throws PortalException {
2938
2939 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2940
2941 return updatePriority(layout, priority);
2942 }
2943
2944
2947 @Deprecated
2948 @Override
2949 @SuppressWarnings("unused")
2950 public void updateScopedPortletNames(
2951 long groupId, boolean privateLayout, long layoutId,
2952 Map<Locale, String> nameMap, List<Locale> nameMapModifiedLocales)
2953 throws PortalException {
2954 }
2955
2956
2969 @Deprecated
2970 @Override
2971 public void updateScopedPortletNames(
2972 long groupId, boolean privateLayout, long layoutId, String name,
2973 String languageId)
2974 throws PortalException {
2975 }
2976
2977
2983 @Deprecated
2984 @Override
2985 public MissingReferences validateImportLayoutsFile(
2986 ExportImportConfiguration exportImportConfiguration, File file)
2987 throws PortalException {
2988
2989 throw new UnsupportedOperationException();
2990 }
2991
2992
2998 @Deprecated
2999 @Override
3000 public MissingReferences validateImportLayoutsFile(
3001 ExportImportConfiguration exportImportConfiguration,
3002 InputStream inputStream)
3003 throws PortalException {
3004
3005 throw new UnsupportedOperationException();
3006 }
3007
3008
3012 @Deprecated
3013 @Override
3014 public MissingReferences validateImportLayoutsFile(
3015 long userId, long groupId, boolean privateLayout,
3016 Map<String, String[]> parameterMap, File file)
3017 throws PortalException {
3018
3019 throw new UnsupportedOperationException();
3020 }
3021
3022
3026 @Deprecated
3027 @Override
3028 public MissingReferences validateImportLayoutsFile(
3029 long userId, long groupId, boolean privateLayout,
3030 Map<String, String[]> parameterMap, InputStream inputStream)
3031 throws PortalException {
3032
3033 throw new UnsupportedOperationException();
3034 }
3035
3036
3042 @Deprecated
3043 @Override
3044 public MissingReferences validateImportPortletInfo(
3045 ExportImportConfiguration exportImportConfiguration, File file)
3046 throws PortalException {
3047
3048 throw new UnsupportedOperationException();
3049 }
3050
3051
3057 @Deprecated
3058 @Override
3059 public MissingReferences validateImportPortletInfo(
3060 ExportImportConfiguration exportImportConfiguration,
3061 InputStream inputStream)
3062 throws PortalException {
3063
3064 throw new UnsupportedOperationException();
3065 }
3066
3067
3071 @Deprecated
3072 @Override
3073 public MissingReferences validateImportPortletInfo(
3074 long userId, long plid, long groupId, String portletId,
3075 Map<String, String[]> parameterMap, File file)
3076 throws PortalException {
3077
3078 throw new UnsupportedOperationException();
3079 }
3080
3081
3085 @Deprecated
3086 @Override
3087 public MissingReferences validateImportPortletInfo(
3088 long userId, long plid, long groupId, String portletId,
3089 Map<String, String[]> parameterMap, InputStream inputStream)
3090 throws PortalException {
3091
3092 throw new UnsupportedOperationException();
3093 }
3094
3095 protected void validateTypeSettingsProperties(
3096 UnicodeProperties typeSettingsProperties)
3097 throws PortalException {
3098
3099 String sitemapChangeFrequency = typeSettingsProperties.getProperty(
3100 "sitemap-changefreq");
3101
3102 if (Validator.isNotNull(sitemapChangeFrequency) &&
3103 !sitemapChangeFrequency.equals("always") &&
3104 !sitemapChangeFrequency.equals("hourly") &&
3105 !sitemapChangeFrequency.equals("daily") &&
3106 !sitemapChangeFrequency.equals("weekly") &&
3107 !sitemapChangeFrequency.equals("monthly") &&
3108 !sitemapChangeFrequency.equals("yearly") &&
3109 !sitemapChangeFrequency.equals("never")) {
3110
3111 throw new SitemapChangeFrequencyException();
3112 }
3113
3114 String sitemapInclude = typeSettingsProperties.getProperty(
3115 "sitemap-include");
3116
3117 if (Validator.isNotNull(sitemapInclude) &&
3118 !sitemapInclude.equals("0") && !sitemapInclude.equals("1")) {
3119
3120 throw new SitemapIncludeException();
3121 }
3122
3123 String sitemapPriority = typeSettingsProperties.getProperty(
3124 "sitemap-priority");
3125
3126 if (Validator.isNotNull(sitemapPriority)) {
3127 try {
3128 double priority = Double.parseDouble(sitemapPriority);
3129
3130 if ((priority < 0) || (priority > 1)) {
3131 throw new SitemapPagePriorityException();
3132 }
3133 }
3134 catch (NumberFormatException nfe) {
3135 throw new SitemapPagePriorityException();
3136 }
3137 }
3138 }
3139
3140 @BeanReference(type = LayoutLocalServiceHelper.class)
3141 protected LayoutLocalServiceHelper layoutLocalServiceHelper;
3142
3143 }