001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.exception.NoSuchLayoutException;
018 import com.liferay.portal.exception.RequiredLayoutException;
019 import com.liferay.portal.exception.SitemapChangeFrequencyException;
020 import com.liferay.portal.exception.SitemapIncludeException;
021 import com.liferay.portal.exception.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.sites.kernel.util.Sites;
065 import com.liferay.sites.kernel.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
169 @Deprecated
170 @Override
171 public Layout addLayout(
172 long userId, long groupId, boolean privateLayout,
173 long parentLayoutId, Map<Locale, String> nameMap,
174 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
175 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
176 String type, boolean hidden, String friendlyURL,
177 ServiceContext serviceContext)
178 throws PortalException {
179
180 Map<Locale, String> friendlyURLMap = new HashMap<>();
181
182 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
183
184 return addLayout(
185 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
186 descriptionMap, keywordsMap, robotsMap, type, StringPool.BLANK,
187 hidden, friendlyURLMap, serviceContext);
188 }
189
190
235 @Override
236 public Layout addLayout(
237 long userId, long groupId, boolean privateLayout,
238 long parentLayoutId, Map<Locale, String> nameMap,
239 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
240 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
241 String type, String typeSettings, boolean hidden,
242 Map<Locale, String> friendlyURLMap, ServiceContext serviceContext)
243 throws PortalException {
244
245
246
247 User user = userPersistence.findByPrimaryKey(userId);
248 long layoutId = getNextLayoutId(groupId, privateLayout);
249 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
250 groupId, privateLayout, parentLayoutId);
251 String name = nameMap.get(LocaleUtil.getSiteDefault());
252 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
253 groupId, privateLayout, layoutId, name, friendlyURLMap);
254
255 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
256
257 int priority = layoutLocalServiceHelper.getNextPriority(
258 groupId, privateLayout, parentLayoutId, null, -1);
259
260 layoutLocalServiceHelper.validate(
261 groupId, privateLayout, layoutId, parentLayoutId, name, type,
262 hidden, friendlyURLMap, serviceContext);
263
264 Date now = new Date();
265
266 long plid = counterLocalService.increment();
267
268 Layout layout = layoutPersistence.create(plid);
269
270 layout.setUuid(serviceContext.getUuid());
271 layout.setGroupId(groupId);
272 layout.setCompanyId(user.getCompanyId());
273 layout.setUserId(user.getUserId());
274 layout.setUserName(user.getFullName());
275 layout.setCreateDate(serviceContext.getCreateDate(now));
276 layout.setModifiedDate(serviceContext.getModifiedDate(now));
277 layout.setPrivateLayout(privateLayout);
278 layout.setLayoutId(layoutId);
279 layout.setParentLayoutId(parentLayoutId);
280 layout.setNameMap(nameMap);
281 layout.setTitleMap(titleMap);
282 layout.setDescriptionMap(descriptionMap);
283 layout.setKeywordsMap(keywordsMap);
284 layout.setRobotsMap(robotsMap);
285 layout.setType(type);
286 layout.setHidden(hidden);
287 layout.setFriendlyURL(friendlyURL);
288 layout.setPriority(priority);
289
290 boolean layoutUpdateable = ParamUtil.getBoolean(
291 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
292
293 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
294
295 typeSettingsProperties.fastLoad(typeSettings);
296
297 if (!layoutUpdateable) {
298 typeSettingsProperties.put(
299 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
300 }
301
302 if (privateLayout) {
303 typeSettingsProperties.put(
304 "privateLayout", String.valueOf(privateLayout));
305 }
306
307 validateTypeSettingsProperties(typeSettingsProperties);
308
309 layout.setTypeSettingsProperties(typeSettingsProperties);
310
311 String layoutPrototypeUuid = ParamUtil.getString(
312 serviceContext, "layoutPrototypeUuid");
313 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
314 serviceContext, "layoutPrototypeLinkEnabled",
315 PropsValues.LAYOUT_PROTOTYPE_LINK_ENABLED_DEFAULT);
316
317 if (Validator.isNotNull(layoutPrototypeUuid)) {
318 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
319 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
320 }
321
322 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
323 LayoutTypePortlet layoutTypePortlet =
324 (LayoutTypePortlet)layout.getLayoutType();
325
326 if (Validator.isNull(layoutTypePortlet.getLayoutTemplateId())) {
327 layoutTypePortlet.setLayoutTemplateId(
328 0, PropsValues.LAYOUT_DEFAULT_TEMPLATE_ID, false);
329 }
330 }
331
332 layout.setExpandoBridgeAttributes(serviceContext);
333
334 layoutPersistence.update(layout);
335
336
337
338 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
339 user.getUserId(), user.getCompanyId(), groupId, plid, privateLayout,
340 friendlyURLMap, serviceContext);
341
342
343
344 if (Validator.isNotNull(layoutPrototypeUuid) &&
345 !layoutPrototypeLinkEnabled) {
346
347 LayoutPrototype layoutPrototype =
348 layoutPrototypeLocalService.
349 getLayoutPrototypeByUuidAndCompanyId(
350 layoutPrototypeUuid, layout.getCompanyId());
351
352 try {
353 SitesUtil.applyLayoutPrototype(
354 layoutPrototype, layout, layoutPrototypeLinkEnabled);
355 }
356 catch (PortalException pe) {
357 throw pe;
358 }
359 catch (SystemException se) {
360 throw se;
361 }
362 catch (Exception e) {
363 throw new SystemException(e);
364 }
365 }
366
367
368
369 boolean addGroupPermissions = true;
370
371 Group group = groupLocalService.getGroup(groupId);
372
373 if (privateLayout && group.isUser()) {
374 addGroupPermissions = false;
375 }
376
377 boolean addGuestPermissions = false;
378
379 if (!privateLayout || type.equals(LayoutConstants.TYPE_CONTROL_PANEL) ||
380 group.isLayoutSetPrototype()) {
381
382 addGuestPermissions = true;
383 }
384
385 resourceLocalService.addResources(
386 user.getCompanyId(), groupId, user.getUserId(),
387 Layout.class.getName(), layout.getPlid(), false,
388 addGroupPermissions, addGuestPermissions);
389
390
391
392 groupLocalService.updateSite(groupId, true);
393
394
395
396 layoutSetLocalService.updatePageCount(groupId, privateLayout);
397
398 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
399 groupId, privateLayout);
400
401 layout.setLayoutSet(layoutSet);
402
403
404
405 updateAsset(
406 userId, layout, serviceContext.getAssetCategoryIds(),
407 serviceContext.getAssetTagNames());
408
409 return layout;
410 }
411
412
458 @Override
459 public Layout addLayout(
460 long userId, long groupId, boolean privateLayout,
461 long parentLayoutId, String name, String title, String description,
462 String type, boolean hidden, String friendlyURL,
463 ServiceContext serviceContext)
464 throws PortalException {
465
466 Locale locale = LocaleUtil.getSiteDefault();
467
468 Map<Locale, String> nameMap = new HashMap<>();
469
470 nameMap.put(locale, name);
471
472 Map<Locale, String> titleMap = new HashMap<>();
473
474 titleMap.put(locale, title);
475
476 Map<Locale, String> descriptionMap = new HashMap<>();
477
478 descriptionMap.put(locale, description);
479
480 Map<Locale, String> friendlyURLMap = new HashMap<>();
481
482 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
483
484 return addLayout(
485 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
486 descriptionMap, new HashMap<Locale, String>(),
487 new HashMap<Locale, String>(), type, StringPool.BLANK, hidden,
488 friendlyURLMap, serviceContext);
489 }
490
491
499 @Override
500 @SystemEvent(
501 action = SystemEventConstants.ACTION_SKIP,
502 type = SystemEventConstants.TYPE_DELETE
503 )
504 public void deleteLayout(
505 Layout layout, boolean updateLayoutSet,
506 ServiceContext serviceContext)
507 throws PortalException {
508
509
510
511 if (layout.getParentLayoutId() ==
512 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
513
514 List<Layout> rootLayouts = layoutPersistence.findByG_P_P(
515 layout.getGroupId(), layout.isPrivateLayout(),
516 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, 0, 2);
517
518 if (rootLayouts.size() > 1) {
519 Layout firstLayout = rootLayouts.get(0);
520
521 if (firstLayout.getLayoutId() == layout.getLayoutId()) {
522 Layout secondLayout = rootLayouts.get(1);
523
524 layoutLocalServiceHelper.validateFirstLayout(secondLayout);
525 }
526 }
527 }
528
529
530
531 List<Layout> childLayouts = layoutPersistence.findByG_P_P(
532 layout.getGroupId(), layout.isPrivateLayout(),
533 layout.getLayoutId());
534
535 for (Layout childLayout : childLayouts) {
536 layoutLocalService.deleteLayout(
537 childLayout, updateLayoutSet, serviceContext);
538 }
539
540
541
542 layoutFriendlyURLLocalService.deleteLayoutFriendlyURLs(
543 layout.getPlid());
544
545
546
547 portletPreferencesLocalService.deletePortletPreferencesByPlid(
548 layout.getPlid());
549
550
551
552 subscriptionLocalService.deleteSubscriptions(
553 layout.getCompanyId(), Layout.class.getName(), layout.getPlid());
554
555
556
557 assetEntryLocalService.deleteEntry(
558 Layout.class.getName(), layout.getPlid());
559
560
561
562 ratingsStatsLocalService.deleteStats(
563 Layout.class.getName(), layout.getPlid());
564
565
566
567 expandoRowLocalService.deleteRows(layout.getPlid());
568
569
570
571 imageLocalService.deleteImage(layout.getIconImageId());
572
573
574
575 Group scopeGroup = layout.getScopeGroup();
576
577 if (scopeGroup != null) {
578 groupLocalService.deleteGroup(scopeGroup.getGroupId());
579 }
580
581
582
583 String primKey =
584 layout.getPlid() + PortletConstants.LAYOUT_SEPARATOR + "%";
585
586 List<ResourcePermission> resourcePermissions =
587 resourcePermissionPersistence.findByC_LikeP(
588 layout.getCompanyId(), primKey);
589
590 for (ResourcePermission resourcePermission : resourcePermissions) {
591 resourcePermissionLocalService.deleteResourcePermission(
592 resourcePermission);
593 }
594
595 resourceLocalService.deleteResource(
596 layout.getCompanyId(), Layout.class.getName(),
597 ResourceConstants.SCOPE_INDIVIDUAL, layout.getPlid());
598
599
600
601 layoutPersistence.remove(layout);
602
603
604
605 if (updateLayoutSet) {
606 layoutSetLocalService.updatePageCount(
607 layout.getGroupId(), layout.isPrivateLayout());
608 }
609
610
611
612 SystemEventHierarchyEntry systemEventHierarchyEntry =
613 SystemEventHierarchyEntryThreadLocal.peek();
614
615 if ((systemEventHierarchyEntry != null) &&
616 systemEventHierarchyEntry.hasTypedModel(
617 Layout.class.getName(), layout.getPlid())) {
618
619 systemEventHierarchyEntry.setExtraDataValue(
620 "privateLayout", StringUtil.valueOf(layout.isPrivateLayout()));
621 }
622 }
623
624
633 @Override
634 public void deleteLayout(
635 long groupId, boolean privateLayout, long layoutId,
636 ServiceContext serviceContext)
637 throws PortalException {
638
639 Layout layout = layoutPersistence.findByG_P_L(
640 groupId, privateLayout, layoutId);
641
642 layoutLocalService.deleteLayout(layout, true, serviceContext);
643 }
644
645
652 @Override
653 public void deleteLayout(long plid, ServiceContext serviceContext)
654 throws PortalException {
655
656 Layout layout = layoutPersistence.findByPrimaryKey(plid);
657
658 layoutLocalService.deleteLayout(layout, true, serviceContext);
659 }
660
661
672 @Override
673 public void deleteLayouts(
674 long groupId, boolean privateLayout, ServiceContext serviceContext)
675 throws PortalException {
676
677
678
679 List<Layout> layouts = layoutPersistence.findByG_P_P(
680 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
681 QueryUtil.ALL_POS, QueryUtil.ALL_POS,
682 new LayoutPriorityComparator(false));
683
684 for (Layout layout : layouts) {
685 try {
686 layoutLocalService.deleteLayout(layout, false, serviceContext);
687 }
688 catch (NoSuchLayoutException nsle) {
689 }
690 }
691
692
693
694 if (GetterUtil.getBoolean(
695 serviceContext.getAttribute("updatePageCount"), true)) {
696
697 layoutSetLocalService.updatePageCount(groupId, privateLayout);
698 }
699
700
701
702 counterLocalService.reset(getCounterName(groupId, privateLayout));
703 }
704
705
721 @Deprecated
722 @Override
723 public byte[] exportLayouts(
724 long groupId, boolean privateLayout, long[] layoutIds,
725 Map<String, String[]> parameterMap, Date startDate, Date endDate)
726 throws PortalException {
727
728 throw new UnsupportedOperationException();
729 }
730
731
746 @Deprecated
747 @Override
748 public byte[] exportLayouts(
749 long groupId, boolean privateLayout,
750 Map<String, String[]> parameterMap, Date startDate, Date endDate)
751 throws PortalException {
752
753 throw new UnsupportedOperationException();
754 }
755
756
762 @Deprecated
763 @Override
764 public File exportLayoutsAsFile(
765 ExportImportConfiguration exportImportConfiguration)
766 throws PortalException {
767
768 throw new UnsupportedOperationException();
769 }
770
771
788 @Deprecated
789 @Override
790 public File exportLayoutsAsFile(
791 long groupId, boolean privateLayout, long[] layoutIds,
792 Map<String, String[]> parameterMap, Date startDate, Date endDate)
793 throws PortalException {
794
795 throw new UnsupportedOperationException();
796 }
797
798
804 @Deprecated
805 @Override
806 public long exportLayoutsAsFileInBackground(
807 long userId, ExportImportConfiguration exportImportConfiguration)
808 throws PortalException {
809
810 throw new UnsupportedOperationException();
811 }
812
813
819 @Deprecated
820 @Override
821 public long exportLayoutsAsFileInBackground(
822 long userId, long exportImportConfigurationId)
823 throws PortalException {
824
825 throw new UnsupportedOperationException();
826 }
827
828
832 @Deprecated
833 @Override
834 public long exportLayoutsAsFileInBackground(
835 long userId, String taskName, long groupId, boolean privateLayout,
836 long[] layoutIds, Map<String, String[]> parameterMap,
837 Date startDate, Date endDate)
838 throws PortalException {
839
840 throw new UnsupportedOperationException();
841 }
842
843
847 @Deprecated
848 @Override
849 public long exportLayoutsAsFileInBackground(
850 long userId, String taskName, long groupId, boolean privateLayout,
851 long[] layoutIds, Map<String, String[]> parameterMap,
852 Date startDate, Date endDate, String fileName)
853 throws PortalException {
854
855 throw new UnsupportedOperationException();
856 }
857
858
875 @Deprecated
876 @Override
877 public byte[] exportPortletInfo(
878 long plid, long groupId, String portletId,
879 Map<String, String[]> parameterMap, Date startDate, Date endDate)
880 throws PortalException {
881
882 throw new UnsupportedOperationException();
883 }
884
885
889 @Deprecated
890 @Override
891 public byte[] exportPortletInfo(
892 long companyId, String portletId,
893 Map<String, String[]> parameterMap, Date startDate, Date endDate)
894 throws PortalException {
895
896 throw new UnsupportedOperationException();
897 }
898
899
905 @Deprecated
906 @Override
907 public File exportPortletInfoAsFile(
908 ExportImportConfiguration exportImportConfiguration)
909 throws PortalException {
910
911 throw new UnsupportedOperationException();
912 }
913
914
931 @Deprecated
932 @Override
933 public File exportPortletInfoAsFile(
934 long plid, long groupId, String portletId,
935 Map<String, String[]> parameterMap, Date startDate, Date endDate)
936 throws PortalException {
937
938 throw new UnsupportedOperationException();
939 }
940
941
945 @Deprecated
946 @Override
947 public File exportPortletInfoAsFile(
948 long companyId, String portletId,
949 Map<String, String[]> parameterMap, Date startDate, Date endDate)
950 throws PortalException {
951
952 throw new UnsupportedOperationException();
953 }
954
955
961 @Deprecated
962 @Override
963 public long exportPortletInfoAsFileInBackground(
964 long userId, ExportImportConfiguration exportImportConfiguration)
965 throws PortalException {
966
967 throw new UnsupportedOperationException();
968 }
969
970
976 @Deprecated
977 @Override
978 public long exportPortletInfoAsFileInBackground(
979 long userId, long exportImportConfigurationId)
980 throws PortalException {
981
982 throw new UnsupportedOperationException();
983 }
984
985
989 @Deprecated
990 @Override
991 public long exportPortletInfoAsFileInBackground(
992 long userId, String taskName, long plid, long groupId,
993 String portletId, Map<String, String[]> parameterMap,
994 Date startDate, Date endDate, String fileName)
995 throws PortalException {
996
997 throw new UnsupportedOperationException();
998 }
999
1000
1004 @Deprecated
1005 @Override
1006 public long exportPortletInfoAsFileInBackground(
1007 long userId, String taskName, String portletId,
1008 Map<String, String[]> parameterMap, Date startDate, Date endDate,
1009 String fileName)
1010 throws PortalException {
1011
1012 throw new UnsupportedOperationException();
1013 }
1014
1015 @Override
1016 public Layout fetchFirstLayout(
1017 long groupId, boolean privateLayout, long parentLayoutId) {
1018
1019 return layoutPersistence.fetchByG_P_P_First(
1020 groupId, privateLayout, parentLayoutId,
1021 new LayoutPriorityComparator());
1022 }
1023
1024 @Override
1025 public Layout fetchLayout(
1026 long groupId, boolean privateLayout, long layoutId) {
1027
1028 return layoutPersistence.fetchByG_P_L(groupId, privateLayout, layoutId);
1029 }
1030
1031 @Override
1032 public Layout fetchLayoutByFriendlyURL(
1033 long groupId, boolean privateLayout, String friendlyURL) {
1034
1035 return layoutPersistence.fetchByG_P_F(
1036 groupId, privateLayout, friendlyURL);
1037 }
1038
1039
1046 @Override
1047 public long getDefaultPlid(long groupId) {
1048 if (groupId > 0) {
1049 List<Layout> layouts = layoutPersistence.findByGroupId(
1050 groupId, 0, 1);
1051
1052 if (!layouts.isEmpty()) {
1053 Layout layout = layouts.get(0);
1054
1055 return layout.getPlid();
1056 }
1057 }
1058
1059 return LayoutConstants.DEFAULT_PLID;
1060 }
1061
1062
1070 @Override
1071 public long getDefaultPlid(long groupId, boolean privateLayout) {
1072 if (groupId > 0) {
1073 List<Layout> layouts = layoutPersistence.findByG_P(
1074 groupId, privateLayout, 0, 1);
1075
1076 if (!layouts.isEmpty()) {
1077 Layout layout = layouts.get(0);
1078
1079 return layout.getPlid();
1080 }
1081 }
1082
1083 return LayoutConstants.DEFAULT_PLID;
1084 }
1085
1086
1096 @Override
1097 public long getDefaultPlid(
1098 long groupId, boolean privateLayout, String portletId)
1099 throws PortalException {
1100
1101 if (groupId > 0) {
1102 List<Layout> layouts = layoutPersistence.findByG_P(
1103 groupId, privateLayout);
1104
1105 for (Layout layout : layouts) {
1106 if (layout.isTypePortlet()) {
1107 LayoutTypePortlet layoutTypePortlet =
1108 (LayoutTypePortlet)layout.getLayoutType();
1109
1110 if (layoutTypePortlet.hasPortletId(portletId)) {
1111 return layout.getPlid();
1112 }
1113 }
1114 }
1115 }
1116
1117 return LayoutConstants.DEFAULT_PLID;
1118 }
1119
1120
1128 @Override
1129 public Layout getFriendlyURLLayout(
1130 long groupId, boolean privateLayout, String friendlyURL)
1131 throws PortalException {
1132
1133 if (Validator.isNull(friendlyURL)) {
1134 StringBundler sb = new StringBundler(5);
1135
1136 sb.append("{groupId=");
1137 sb.append(groupId);
1138 sb.append(", privateLayout=");
1139 sb.append(privateLayout);
1140 sb.append("}");
1141
1142 throw new NoSuchLayoutException(sb.toString());
1143 }
1144
1145 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(friendlyURL);
1146
1147 Layout layout = null;
1148
1149 List<LayoutFriendlyURL> layoutFriendlyURLs =
1150 layoutFriendlyURLPersistence.findByG_P_F(
1151 groupId, privateLayout, friendlyURL, 0, 1);
1152
1153 if (!layoutFriendlyURLs.isEmpty()) {
1154 LayoutFriendlyURL layoutFriendlyURL = layoutFriendlyURLs.get(0);
1155
1156 layout = layoutPersistence.findByPrimaryKey(
1157 layoutFriendlyURL.getPlid());
1158 }
1159
1160 if ((layout == null) && friendlyURL.startsWith(StringPool.SLASH) &&
1161 Validator.isNumber(friendlyURL.substring(1))) {
1162
1163 long layoutId = GetterUtil.getLong(friendlyURL.substring(1));
1164
1165 layout = layoutPersistence.fetchByG_P_L(
1166 groupId, privateLayout, layoutId);
1167 }
1168
1169 if (layout == null) {
1170 StringBundler sb = new StringBundler(7);
1171
1172 sb.append("{groupId=");
1173 sb.append(groupId);
1174 sb.append(", privateLayout=");
1175 sb.append(privateLayout);
1176 sb.append(", friendlyURL=");
1177 sb.append(friendlyURL);
1178 sb.append("}");
1179
1180 throw new NoSuchLayoutException(sb.toString());
1181 }
1182
1183 return layout;
1184 }
1185
1186
1195 @Override
1196 public Layout getLayout(long groupId, boolean privateLayout, long layoutId)
1197 throws PortalException {
1198
1199 return layoutPersistence.findByG_P_L(groupId, privateLayout, layoutId);
1200 }
1201
1202
1209 @Override
1210 public Layout getLayoutByIconImageId(long iconImageId)
1211 throws PortalException {
1212
1213 return layoutPersistence.findByIconImageId(iconImageId);
1214 }
1215
1216
1224 @Override
1225 public List<Layout> getLayouts(long groupId, boolean privateLayout) {
1226 return layoutPersistence.findByG_P(groupId, privateLayout);
1227 }
1228
1229
1239 @Override
1240 public List<Layout> getLayouts(
1241 long groupId, boolean privateLayout, long parentLayoutId) {
1242
1243 return layoutPersistence.findByG_P_P(
1244 groupId, privateLayout, parentLayoutId);
1245 }
1246
1247
1269 @Override
1270 public List<Layout> getLayouts(
1271 long groupId, boolean privateLayout, long parentLayoutId,
1272 boolean incomplete, int start, int end) {
1273
1274 return layoutPersistence.findByG_P_P(
1275 groupId, privateLayout, parentLayoutId, start, end);
1276 }
1277
1278
1287 @Override
1288 public List<Layout> getLayouts(
1289 long groupId, boolean privateLayout, long[] layoutIds)
1290 throws PortalException {
1291
1292 List<Layout> layouts = new ArrayList<>();
1293
1294 for (long layoutId : layoutIds) {
1295 Layout layout = getLayout(groupId, privateLayout, layoutId);
1296
1297 layouts.add(layout);
1298 }
1299
1300 return layouts;
1301 }
1302
1303
1313 @Override
1314 public List<Layout> getLayouts(
1315 long groupId, boolean privateLayout, String type) {
1316
1317 return layoutPersistence.findByG_P_T(groupId, privateLayout, type);
1318 }
1319
1320
1330 @Override
1331 public LayoutReference[] getLayouts(
1332 long companyId, String portletId, String preferencesKey,
1333 String preferencesValue) {
1334
1335 List<LayoutReference> layoutReferences = layoutFinder.findByC_P_P(
1336 companyId, portletId, preferencesKey, preferencesValue);
1337
1338 return layoutReferences.toArray(
1339 new LayoutReference[layoutReferences.size()]);
1340 }
1341
1342 @Override
1343 public List<Layout> getLayoutsByLayoutPrototypeUuid(
1344 String layoutPrototypeUuid) {
1345
1346 return layoutPersistence.findByLayoutPrototypeUuid(layoutPrototypeUuid);
1347 }
1348
1349 @Override
1350 public int getLayoutsByLayoutPrototypeUuidCount(
1351 String layoutPrototypeUuid) {
1352
1353 return layoutPersistence.countByLayoutPrototypeUuid(
1354 layoutPrototypeUuid);
1355 }
1356
1357 @Override
1358 public int getLayoutsCount(Group group, boolean privateLayout)
1359 throws PortalException {
1360
1361 return getLayoutsCount(group, privateLayout, true);
1362 }
1363
1364 @Override
1365 public int getLayoutsCount(
1366 Group group, boolean privateLayout, boolean includeUserGroups)
1367 throws PortalException {
1368
1369 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1370 group.getGroupId(), privateLayout);
1371
1372 int count = layoutSet.getPageCount();
1373
1374 if (!group.isUser() || !includeUserGroups) {
1375 return count;
1376 }
1377
1378 long[] userGroupIds = userPersistence.getUserGroupPrimaryKeys(
1379 group.getClassPK());
1380
1381 if (userGroupIds.length != 0) {
1382 long userGroupClassNameId = classNameLocalService.getClassNameId(
1383 UserGroup.class);
1384
1385 for (long userGroupId : userGroupIds) {
1386 Group userGroupGroup = groupPersistence.findByC_C_C(
1387 group.getCompanyId(), userGroupClassNameId, userGroupId);
1388
1389 layoutSet = layoutSetPersistence.findByG_P(
1390 userGroupGroup.getGroupId(), privateLayout);
1391
1392 count += layoutSet.getPageCount();
1393 }
1394 }
1395
1396 return count;
1397 }
1398
1399 @Override
1400 public int getLayoutsCount(
1401 Group group, boolean privateLayout, long parentLayoutId) {
1402
1403 return layoutPersistence.countByG_P_P(
1404 group.getGroupId(), privateLayout, parentLayoutId);
1405 }
1406
1407 @Override
1408 public int getLayoutsCount(User user, boolean privateLayout)
1409 throws PortalException {
1410
1411 return getLayoutsCount(user, privateLayout, true);
1412 }
1413
1414 @Override
1415 public int getLayoutsCount(
1416 User user, boolean privateLayout, boolean includeUserGroups)
1417 throws PortalException {
1418
1419 long classNameId = classNameLocalService.getClassNameId(User.class);
1420
1421 Group group = groupPersistence.findByC_C_C(
1422 user.getCompanyId(), classNameId, user.getUserId());
1423
1424 return getLayoutsCount(group, privateLayout, includeUserGroups);
1425 }
1426
1427
1434 @Override
1435 public long getNextLayoutId(long groupId, boolean privateLayout) {
1436 long nextLayoutId = counterLocalService.increment(
1437 getCounterName(groupId, privateLayout));
1438
1439 if (nextLayoutId == 1) {
1440 List<Layout> layouts = layoutPersistence.findByG_P(
1441 groupId, privateLayout, 0, 1, new LayoutComparator());
1442
1443 if (!layouts.isEmpty()) {
1444 Layout layout = layouts.get(0);
1445
1446 nextLayoutId = layout.getLayoutId() + 1;
1447
1448 counterLocalService.reset(
1449 getCounterName(groupId, privateLayout), nextLayoutId);
1450 }
1451 }
1452
1453 return nextLayoutId;
1454 }
1455
1456
1462 @Override
1463 public List<Layout> getNoPermissionLayouts(long roleId) {
1464 return layoutFinder.findByNoPermissions(roleId);
1465 }
1466
1467
1472 @Override
1473 public List<Layout> getNullFriendlyURLLayouts() {
1474 return layoutFinder.findByNullFriendlyURL();
1475 }
1476
1477 @Override
1478 public Layout getParentLayout(Layout layout) throws PortalException {
1479 Layout parentLayout = null;
1480
1481 if (layout instanceof VirtualLayout) {
1482 VirtualLayout virtualLayout = (VirtualLayout)layout;
1483
1484 Layout sourceLayout = virtualLayout.getSourceLayout();
1485
1486 parentLayout = getLayout(
1487 sourceLayout.getGroupId(), sourceLayout.isPrivateLayout(),
1488 sourceLayout.getParentLayoutId());
1489
1490 parentLayout = new VirtualLayout(parentLayout, layout.getGroup());
1491 }
1492 else {
1493 parentLayout = getLayout(
1494 layout.getGroupId(), layout.isPrivateLayout(),
1495 layout.getParentLayoutId());
1496 }
1497
1498 return parentLayout;
1499 }
1500
1501 @Override
1502 public List<Layout> getScopeGroupLayouts(long parentGroupId)
1503 throws PortalException {
1504
1505 Group parentGroup = groupPersistence.findByPrimaryKey(parentGroupId);
1506
1507 List<Group> groups = groupLocalService.getGroups(
1508 parentGroup.getCompanyId(), Layout.class.getName(), parentGroupId);
1509
1510 List<Layout> layouts = new ArrayList<>(groups.size());
1511
1512 for (Group group : groups) {
1513 layouts.add(layoutPersistence.findByPrimaryKey(group.getClassPK()));
1514 }
1515
1516 return layouts;
1517 }
1518
1519
1525 @Override
1526 public List<Layout> getScopeGroupLayouts(
1527 long parentGroupId, boolean privateLayout)
1528 throws PortalException {
1529
1530 Group parentGroup = groupPersistence.findByPrimaryKey(parentGroupId);
1531
1532 List<Group> groups = groupLocalService.getGroups(
1533 parentGroup.getCompanyId(), Layout.class.getName(), parentGroupId);
1534
1535 List<Layout> layouts = new ArrayList<>(groups.size());
1536
1537 for (Group group : groups) {
1538 Layout layout = layoutPersistence.findByPrimaryKey(
1539 group.getClassPK());
1540
1541 if (layout.getPrivateLayout() == privateLayout) {
1542 layouts.add(layout);
1543 }
1544 }
1545
1546 return layouts;
1547 }
1548
1549 @Override
1550 public boolean hasLayouts(Group group) throws PortalException {
1551 List<LayoutSet> groupLayoutSets = layoutSetPersistence.findByGroupId(
1552 group.getGroupId());
1553
1554 for (LayoutSet layoutSet : groupLayoutSets) {
1555 if (layoutSet.getPageCount() > 0) {
1556 return true;
1557 }
1558 }
1559
1560 if (!group.isUser()) {
1561 return false;
1562 }
1563
1564 long[] userGroupIds = userPersistence.getUserGroupPrimaryKeys(
1565 group.getClassPK());
1566
1567 if (userGroupIds.length != 0) {
1568 long userGroupClassNameId = classNameLocalService.getClassNameId(
1569 UserGroup.class);
1570
1571 for (long userGroupId : userGroupIds) {
1572 Group userGroupGroup = groupPersistence.findByC_C_C(
1573 group.getCompanyId(), userGroupClassNameId, userGroupId);
1574
1575 List<LayoutSet> userGroupGroupLayoutSets =
1576 layoutSetPersistence.findByGroupId(
1577 userGroupGroup.getGroupId());
1578
1579 for (LayoutSet layoutSet : userGroupGroupLayoutSets) {
1580 if (layoutSet.getPageCount() > 0) {
1581 return true;
1582 }
1583 }
1584 }
1585 }
1586
1587 return false;
1588 }
1589
1590 @Override
1591 public boolean hasLayouts(Group group, boolean privateLayout)
1592 throws PortalException {
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 {
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 long[] userGroupIds = userPersistence.getUserGroupPrimaryKeys(
1614 group.getClassPK());
1615
1616 if (userGroupIds.length != 0) {
1617 long userGroupClassNameId = classNameLocalService.getClassNameId(
1618 UserGroup.class);
1619
1620 for (long userGroupId : userGroupIds) {
1621 Group userGroupGroup = groupPersistence.findByC_C_C(
1622 group.getCompanyId(), userGroupClassNameId, userGroupId);
1623
1624 layoutSet = layoutSetPersistence.findByG_P(
1625 userGroupGroup.getGroupId(), privateLayout);
1626
1627 if (layoutSet.getPageCount() > 0) {
1628 return true;
1629 }
1630 }
1631 }
1632
1633 return false;
1634 }
1635
1636
1646 @Override
1647 public boolean hasLayouts(
1648 long groupId, boolean privateLayout, long parentLayoutId) {
1649
1650 return layoutPersistence.countByG_P_P(
1651 groupId, privateLayout, parentLayoutId) > 0;
1652 }
1653
1654 @Override
1655 public boolean hasLayouts(User user, boolean privateLayout)
1656 throws PortalException {
1657
1658 return hasLayouts(user, privateLayout, true);
1659 }
1660
1661 @Override
1662 public boolean hasLayouts(
1663 User user, boolean privateLayout, boolean includeUserGroups)
1664 throws PortalException {
1665
1666 long classNameId = classNameLocalService.getClassNameId(User.class);
1667
1668 Group group = groupPersistence.findByC_C_C(
1669 user.getCompanyId(), classNameId, user.getUserId());
1670
1671 return hasLayouts(group, privateLayout, includeUserGroups);
1672 }
1673
1674 @Override
1675 public boolean hasLayoutSetPrototypeLayout(
1676 long layoutSetPrototypeId, String layoutUuid)
1677 throws PortalException {
1678
1679 LayoutSetPrototype layoutSetPrototype =
1680 layoutSetPrototypeLocalService.getLayoutSetPrototype(
1681 layoutSetPrototypeId);
1682
1683 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1684 layoutSetPrototype, layoutUuid);
1685 }
1686
1687 @Override
1688 public boolean hasLayoutSetPrototypeLayout(
1689 String layoutSetPrototypeUuid, long companyId, String layoutUuid)
1690 throws PortalException {
1691
1692 LayoutSetPrototype layoutSetPrototype =
1693 layoutSetPrototypeLocalService.
1694 getLayoutSetPrototypeByUuidAndCompanyId(
1695 layoutSetPrototypeUuid, companyId);
1696
1697 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1698 layoutSetPrototype, layoutUuid);
1699 }
1700
1701
1707 @Deprecated
1708 @Override
1709 public void importLayouts(
1710 ExportImportConfiguration exportImportConfiguration, File file)
1711 throws PortalException {
1712
1713 throw new UnsupportedOperationException();
1714 }
1715
1716
1722 @Deprecated
1723 @Override
1724 public void importLayouts(
1725 ExportImportConfiguration exportImportConfiguration, InputStream is)
1726 throws PortalException {
1727
1728 throw new UnsupportedOperationException();
1729 }
1730
1731
1746 @Deprecated
1747 @Override
1748 public void importLayouts(
1749 long userId, long groupId, boolean privateLayout,
1750 Map<String, String[]> parameterMap, byte[] bytes)
1751 throws PortalException {
1752
1753 throw new UnsupportedOperationException();
1754 }
1755
1756
1771 @Deprecated
1772 @Override
1773 public void importLayouts(
1774 long userId, long groupId, boolean privateLayout,
1775 Map<String, String[]> parameterMap, File file)
1776 throws PortalException {
1777
1778 throw new UnsupportedOperationException();
1779 }
1780
1781
1796 @Deprecated
1797 @Override
1798 public void importLayouts(
1799 long userId, long groupId, boolean privateLayout,
1800 Map<String, String[]> parameterMap, InputStream is)
1801 throws PortalException {
1802
1803 throw new UnsupportedOperationException();
1804 }
1805
1806
1812 @Deprecated
1813 @Override
1814 public void importLayoutsDataDeletions(
1815 ExportImportConfiguration exportImportConfiguration, File file)
1816 throws PortalException {
1817
1818 throw new UnsupportedOperationException();
1819 }
1820
1821
1827 @Deprecated
1828 @Override
1829 public long importLayoutsInBackground(
1830 long userId, ExportImportConfiguration exportImportConfiguration,
1831 File file)
1832 throws PortalException {
1833
1834 throw new UnsupportedOperationException();
1835 }
1836
1837
1843 @Deprecated
1844 @Override
1845 public long importLayoutsInBackground(
1846 long userId, long exportImportConfigurationId, File file)
1847 throws PortalException {
1848
1849 throw new UnsupportedOperationException();
1850 }
1851
1852
1856 @Deprecated
1857 @Override
1858 public long importLayoutsInBackground(
1859 long userId, String taskName, long groupId, boolean privateLayout,
1860 Map<String, String[]> parameterMap, File file)
1861 throws PortalException {
1862
1863 throw new UnsupportedOperationException();
1864 }
1865
1866
1870 @Deprecated
1871 @Override
1872 public long importLayoutsInBackground(
1873 long userId, String taskName, long groupId, boolean privateLayout,
1874 Map<String, String[]> parameterMap, InputStream is)
1875 throws PortalException {
1876
1877 throw new UnsupportedOperationException();
1878 }
1879
1880
1886 @Deprecated
1887 @Override
1888 public void importPortletDataDeletions(
1889 ExportImportConfiguration exportImportConfiguration, File file)
1890 throws PortalException {
1891
1892 throw new UnsupportedOperationException();
1893 }
1894
1895
1901 @Deprecated
1902 @Override
1903 public void importPortletInfo(
1904 ExportImportConfiguration exportImportConfiguration, File file)
1905 throws PortalException {
1906
1907 throw new UnsupportedOperationException();
1908 }
1909
1910
1916 @Deprecated
1917 @Override
1918 public void importPortletInfo(
1919 ExportImportConfiguration exportImportConfiguration, InputStream is)
1920 throws PortalException {
1921
1922 throw new UnsupportedOperationException();
1923 }
1924
1925
1941 @Deprecated
1942 @Override
1943 public void importPortletInfo(
1944 long userId, long plid, long groupId, String portletId,
1945 Map<String, String[]> parameterMap, File file)
1946 throws PortalException {
1947
1948 throw new UnsupportedOperationException();
1949 }
1950
1951
1967 @Deprecated
1968 @Override
1969 public void importPortletInfo(
1970 long userId, long plid, long groupId, String portletId,
1971 Map<String, String[]> parameterMap, InputStream is)
1972 throws PortalException {
1973
1974 throw new UnsupportedOperationException();
1975 }
1976
1977
1981 @Deprecated
1982 @Override
1983 public void importPortletInfo(
1984 long userId, String portletId, Map<String, String[]> parameterMap,
1985 File file)
1986 throws PortalException {
1987
1988 throw new UnsupportedOperationException();
1989 }
1990
1991
1995 @Deprecated
1996 @Override
1997 public void importPortletInfo(
1998 long userId, String portletId, Map<String, String[]> parameterMap,
1999 InputStream is)
2000 throws PortalException {
2001
2002 throw new UnsupportedOperationException();
2003 }
2004
2005
2011 @Deprecated
2012 @Override
2013 public long importPortletInfoInBackground(
2014 long userId, ExportImportConfiguration exportImportConfiguration,
2015 File file)
2016 throws PortalException {
2017
2018 throw new UnsupportedOperationException();
2019 }
2020
2021
2027 @Deprecated
2028 @Override
2029 public long importPortletInfoInBackground(
2030 long userId, long exportImportConfigurationId, File file)
2031 throws PortalException {
2032
2033 throw new UnsupportedOperationException();
2034 }
2035
2036
2040 @Deprecated
2041 @Override
2042 public long importPortletInfoInBackground(
2043 long userId, String taskName, long plid, long groupId,
2044 String portletId, Map<String, String[]> parameterMap, File file)
2045 throws PortalException {
2046
2047 throw new UnsupportedOperationException();
2048 }
2049
2050
2054 @Deprecated
2055 @Override
2056 public long importPortletInfoInBackground(
2057 long userId, String taskName, long plid, long groupId,
2058 String portletId, Map<String, String[]> parameterMap,
2059 InputStream is)
2060 throws PortalException {
2061
2062 throw new UnsupportedOperationException();
2063 }
2064
2065
2069 @Deprecated
2070 @Override
2071 public long importPortletInfoInBackground(
2072 long userId, String taskName, String portletId,
2073 Map<String, String[]> parameterMap, File file)
2074 throws PortalException {
2075
2076 throw new UnsupportedOperationException();
2077 }
2078
2079
2083 @Deprecated
2084 @Override
2085 public long importPortletInfoInBackground(
2086 long userId, String taskName, String portletId,
2087 Map<String, String[]> parameterMap, InputStream is)
2088 throws PortalException {
2089
2090 throw new UnsupportedOperationException();
2091 }
2092
2093
2103 @Override
2104 public void setLayouts(
2105 long groupId, boolean privateLayout, long parentLayoutId,
2106 long[] layoutIds, ServiceContext serviceContext)
2107 throws PortalException {
2108
2109 if (layoutIds == null) {
2110 return;
2111 }
2112
2113 if (parentLayoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2114 if (layoutIds.length < 1) {
2115 throw new RequiredLayoutException(
2116 RequiredLayoutException.AT_LEAST_ONE);
2117 }
2118
2119 Layout layout = layoutPersistence.findByG_P_L(
2120 groupId, privateLayout, layoutIds[0]);
2121
2122 LayoutType layoutType = layout.getLayoutType();
2123
2124 if (!layoutType.isFirstPageable()) {
2125 throw new RequiredLayoutException(
2126 RequiredLayoutException.FIRST_LAYOUT_TYPE);
2127 }
2128 }
2129
2130 Set<Long> layoutIdsSet = new LinkedHashSet<>();
2131
2132 for (long layoutId : layoutIds) {
2133 layoutIdsSet.add(layoutId);
2134 }
2135
2136 Set<Long> newLayoutIdsSet = new HashSet<>();
2137
2138 List<Layout> layouts = layoutPersistence.findByG_P_P(
2139 groupId, privateLayout, parentLayoutId);
2140
2141 for (Layout layout : layouts) {
2142 if (!layoutIdsSet.contains(layout.getLayoutId())) {
2143 deleteLayout(layout, true, serviceContext);
2144 }
2145 else {
2146 newLayoutIdsSet.add(layout.getLayoutId());
2147 }
2148 }
2149
2150 int priority = 0;
2151
2152 for (long layoutId : layoutIdsSet) {
2153 Layout layout = layoutPersistence.findByG_P_L(
2154 groupId, privateLayout, layoutId);
2155
2156 layout.setPriority(priority++);
2157
2158 layoutPersistence.update(layout);
2159 }
2160
2161 layoutSetLocalService.updatePageCount(groupId, privateLayout);
2162 }
2163
2164 @Override
2165 public void updateAsset(
2166 long userId, Layout layout, long[] assetCategoryIds,
2167 String[] assetTagNames)
2168 throws PortalException {
2169
2170 assetEntryLocalService.updateEntry(
2171 userId, layout.getGroupId(), layout.getCreateDate(),
2172 layout.getModifiedDate(), Layout.class.getName(), layout.getPlid(),
2173 layout.getUuid(), 0, assetCategoryIds, assetTagNames, false, null,
2174 null, null, ContentTypes.TEXT_HTML,
2175 layout.getName(LocaleUtil.getDefault()), null, null, null, null, 0,
2176 0, null);
2177 }
2178
2179
2188 @Override
2189 public Layout updateFriendlyURL(
2190 long userId, long plid, String friendlyURL, String languageId)
2191 throws PortalException {
2192
2193 Date now = new Date();
2194
2195 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2196
2197 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
2198 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2199 StringPool.BLANK, friendlyURL);
2200
2201 layoutLocalServiceHelper.validateFriendlyURL(
2202 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2203 friendlyURL);
2204
2205 layoutFriendlyURLLocalService.updateLayoutFriendlyURL(
2206 userId, layout.getCompanyId(), layout.getGroupId(),
2207 layout.getPlid(), layout.isPrivateLayout(), friendlyURL, languageId,
2208 new ServiceContext());
2209
2210 layout.setModifiedDate(now);
2211
2212 String defaultLanguageId = LocaleUtil.toLanguageId(
2213 LocaleUtil.getSiteDefault());
2214
2215 if (languageId.equals(defaultLanguageId)) {
2216 layout.setFriendlyURL(friendlyURL);
2217 }
2218
2219 layoutPersistence.update(layout);
2220
2221 return layout;
2222 }
2223
2224
2234 @Deprecated
2235 @Override
2236 public Layout updateFriendlyURL(
2237 long plid, String friendlyURL, String languageId)
2238 throws PortalException {
2239
2240 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2241
2242 return updateFriendlyURL(
2243 layout.getUserId(), plid, friendlyURL, languageId);
2244 }
2245
2246 @Override
2247 public Layout updateIconImage(long plid, byte[] bytes)
2248 throws PortalException {
2249
2250 Layout layout = layoutPersistence.fetchByPrimaryKey(plid);
2251
2252 if (layout == null) {
2253 return null;
2254 }
2255
2256 PortalUtil.updateImageId(layout, true, bytes, "iconImageId", 0, 0, 0);
2257
2258 layoutPersistence.update(layout);
2259
2260 return layout;
2261 }
2262
2263
2300 @Override
2301 public Layout updateLayout(
2302 long groupId, boolean privateLayout, long layoutId,
2303 long parentLayoutId, Map<Locale, String> nameMap,
2304 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2305 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2306 String type, boolean hidden, Map<Locale, String> friendlyURLMap,
2307 boolean iconImage, byte[] iconBytes, ServiceContext serviceContext)
2308 throws PortalException {
2309
2310
2311
2312 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2313 groupId, privateLayout, parentLayoutId);
2314 String name = nameMap.get(LocaleUtil.getSiteDefault());
2315 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
2316 groupId, privateLayout, layoutId, name, friendlyURLMap);
2317
2318 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
2319
2320 layoutLocalServiceHelper.validate(
2321 groupId, privateLayout, layoutId, parentLayoutId, name, type,
2322 hidden, friendlyURLMap, serviceContext);
2323
2324 layoutLocalServiceHelper.validateParentLayoutId(
2325 groupId, privateLayout, layoutId, parentLayoutId);
2326
2327 Date now = new Date();
2328
2329 Layout layout = layoutPersistence.findByG_P_L(
2330 groupId, privateLayout, layoutId);
2331
2332 if (parentLayoutId != layout.getParentLayoutId()) {
2333 int priority = layoutLocalServiceHelper.getNextPriority(
2334 groupId, privateLayout, parentLayoutId,
2335 layout.getSourcePrototypeLayoutUuid(), -1);
2336
2337 layout.setPriority(priority);
2338 }
2339
2340 layout.setModifiedDate(serviceContext.getModifiedDate(now));
2341 layout.setParentLayoutId(parentLayoutId);
2342 layout.setNameMap(nameMap);
2343 layout.setTitleMap(titleMap);
2344 layout.setDescriptionMap(descriptionMap);
2345 layout.setKeywordsMap(keywordsMap);
2346 layout.setRobotsMap(robotsMap);
2347 layout.setType(type);
2348 layout.setHidden(hidden);
2349 layout.setFriendlyURL(friendlyURL);
2350
2351 PortalUtil.updateImageId(
2352 layout, iconImage, iconBytes, "iconImageId", 0, 0, 0);
2353
2354 boolean layoutUpdateable = ParamUtil.getBoolean(
2355 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
2356
2357 UnicodeProperties typeSettingsProperties =
2358 layout.getTypeSettingsProperties();
2359
2360 typeSettingsProperties.put(
2361 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
2362
2363 if (privateLayout) {
2364 typeSettingsProperties.put(
2365 "privateLayout", String.valueOf(privateLayout));
2366 }
2367
2368 layout.setTypeSettingsProperties(typeSettingsProperties);
2369
2370 String layoutPrototypeUuid = ParamUtil.getString(
2371 serviceContext, "layoutPrototypeUuid");
2372 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
2373 serviceContext, "layoutPrototypeLinkEnabled");
2374
2375 if (Validator.isNotNull(layoutPrototypeUuid)) {
2376 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
2377 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
2378 }
2379
2380 layout.setExpandoBridgeAttributes(serviceContext);
2381
2382 layoutPersistence.update(layout);
2383
2384
2385
2386 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
2387 serviceContext.getUserId(), layout.getCompanyId(),
2388 layout.getGroupId(), layout.getPlid(), layout.isPrivateLayout(),
2389 friendlyURLMap, serviceContext);
2390
2391
2392
2393 updateAsset(
2394 serviceContext.getUserId(), layout,
2395 serviceContext.getAssetCategoryIds(),
2396 serviceContext.getAssetTagNames());
2397
2398 return layout;
2399 }
2400
2401
2449 @Deprecated
2450 @Override
2451 public Layout updateLayout(
2452 long groupId, boolean privateLayout, long layoutId,
2453 long parentLayoutId, Map<Locale, String> nameMap,
2454 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2455 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2456 String type, boolean hidden, String friendlyURL, Boolean iconImage,
2457 byte[] iconBytes, ServiceContext serviceContext)
2458 throws PortalException {
2459
2460 Map<Locale, String> friendlyURLMap = new HashMap<>();
2461
2462 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
2463
2464 return updateLayout(
2465 groupId, privateLayout, layoutId, parentLayoutId, nameMap, titleMap,
2466 descriptionMap, keywordsMap, robotsMap, type, hidden,
2467 friendlyURLMap, iconImage, iconBytes, serviceContext);
2468 }
2469
2470
2480 @Override
2481 public Layout updateLayout(
2482 long groupId, boolean privateLayout, long layoutId,
2483 String typeSettings)
2484 throws PortalException {
2485
2486 Date now = new Date();
2487
2488 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
2489
2490 typeSettingsProperties.fastLoad(typeSettings);
2491
2492 validateTypeSettingsProperties(typeSettingsProperties);
2493
2494 Layout layout = layoutPersistence.findByG_P_L(
2495 groupId, privateLayout, layoutId);
2496
2497 layout.setModifiedDate(now);
2498 layout.setTypeSettings(typeSettingsProperties.toString());
2499
2500 layoutPersistence.update(layout);
2501
2502 return layout;
2503 }
2504
2505
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
2554 @Override
2555 public Layout updateName(Layout layout, String name, String languageId)
2556 throws PortalException {
2557
2558 Date now = new Date();
2559
2560 layoutLocalServiceHelper.validateName(name, languageId);
2561
2562 layout.setModifiedDate(now);
2563 layout.setName(name, LocaleUtil.fromLanguageId(languageId));
2564
2565 layoutPersistence.update(layout);
2566
2567 Group group = layout.getGroup();
2568
2569 if (group.isLayoutPrototype()) {
2570 LayoutPrototype layoutPrototype =
2571 layoutPrototypeLocalService.getLayoutPrototype(
2572 group.getClassPK());
2573
2574 layoutPrototype.setModifiedDate(now);
2575 layoutPrototype.setName(
2576 name, LocaleUtil.fromLanguageId(languageId));
2577
2578 layoutPrototypePersistence.update(layoutPrototype);
2579 }
2580
2581 return layout;
2582 }
2583
2584
2596 @Override
2597 public Layout updateName(
2598 long groupId, boolean privateLayout, long layoutId, String name,
2599 String languageId)
2600 throws PortalException {
2601
2602 Layout layout = layoutPersistence.findByG_P_L(
2603 groupId, privateLayout, layoutId);
2604
2605 return updateName(layout, name, languageId);
2606 }
2607
2608
2617 @Override
2618 public Layout updateName(long plid, String name, String languageId)
2619 throws PortalException {
2620
2621 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2622
2623 return updateName(layout, name, languageId);
2624 }
2625
2626
2637 @Override
2638 public Layout updateParentLayoutId(
2639 long groupId, boolean privateLayout, long layoutId,
2640 long parentLayoutId)
2641 throws PortalException {
2642
2643 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2644 groupId, privateLayout, parentLayoutId);
2645
2646 layoutLocalServiceHelper.validateParentLayoutId(
2647 groupId, privateLayout, layoutId, parentLayoutId);
2648
2649 Date now = new Date();
2650
2651 Layout layout = layoutPersistence.findByG_P_L(
2652 groupId, privateLayout, layoutId);
2653
2654 if (parentLayoutId != layout.getParentLayoutId()) {
2655 int priority = layoutLocalServiceHelper.getNextPriority(
2656 groupId, privateLayout, parentLayoutId,
2657 layout.getSourcePrototypeLayoutUuid(), -1);
2658
2659 layout.setPriority(priority);
2660 }
2661
2662 layout.setModifiedDate(now);
2663 layout.setParentLayoutId(parentLayoutId);
2664
2665 layoutPersistence.update(layout);
2666
2667 return layout;
2668 }
2669
2670
2680 @Override
2681 public Layout updateParentLayoutId(long plid, long parentPlid)
2682 throws PortalException {
2683
2684 Date now = new Date();
2685
2686 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2687
2688 long parentLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
2689
2690 if (parentPlid > 0) {
2691 Layout parentLayout = layoutPersistence.fetchByPrimaryKey(
2692 parentPlid);
2693
2694 if (parentLayout != null) {
2695 parentLayoutId = parentLayout.getLayoutId();
2696 }
2697 }
2698
2699 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2700 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId);
2701
2702 layoutLocalServiceHelper.validateParentLayoutId(
2703 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2704 parentLayoutId);
2705
2706 if (parentLayoutId != layout.getParentLayoutId()) {
2707 int priority = layoutLocalServiceHelper.getNextPriority(
2708 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId,
2709 layout.getSourcePrototypeLayoutUuid(), -1);
2710
2711 layout.setPriority(priority);
2712 }
2713
2714 layout.setModifiedDate(now);
2715 layout.setParentLayoutId(parentLayoutId);
2716
2717 layoutPersistence.update(layout);
2718
2719 return layout;
2720 }
2721
2722
2730 @Override
2731 public Layout updateParentLayoutIdAndPriority(
2732 long plid, long parentPlid, int priority)
2733 throws PortalException {
2734
2735 Layout layout = updateParentLayoutId(plid, parentPlid);
2736
2737 return updatePriority(layout, priority);
2738 }
2739
2740
2747 @Override
2748 public void updatePriorities(long groupId, boolean privateLayout)
2749 throws PortalException {
2750
2751 List<Layout> layouts = layoutPersistence.findByG_P(
2752 groupId, privateLayout);
2753
2754 for (Layout layout : layouts) {
2755 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2756 layout.getGroupId(), layout.isPrivateLayout(),
2757 layout.getParentLayoutId(),
2758 layout.getSourcePrototypeLayoutUuid(), layout.getPriority());
2759
2760 layout.setPriority(nextPriority);
2761
2762 layoutPersistence.update(layout);
2763 }
2764 }
2765
2766
2773 @Override
2774 public Layout updatePriority(Layout layout, int priority)
2775 throws PortalException {
2776
2777 if (layout.getPriority() == priority) {
2778 return layout;
2779 }
2780
2781 int oldPriority = layout.getPriority();
2782
2783 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2784 layout.getGroupId(), layout.isPrivateLayout(),
2785 layout.getParentLayoutId(), layout.getSourcePrototypeLayoutUuid(),
2786 priority);
2787
2788 if (oldPriority == nextPriority) {
2789 return layout;
2790 }
2791
2792 layout.setModifiedDate(new Date());
2793 layout.setPriority(nextPriority);
2794
2795 layoutPersistence.update(layout);
2796
2797 List<Layout> layouts = layoutPersistence.findByG_P_P(
2798 layout.getGroupId(), layout.isPrivateLayout(),
2799 layout.getParentLayoutId());
2800
2801 boolean lessThan = false;
2802
2803 if (oldPriority < nextPriority) {
2804 lessThan = true;
2805 }
2806
2807 layouts = ListUtil.sort(
2808 layouts, new LayoutPriorityComparator(layout, lessThan));
2809
2810 if (layout.getParentLayoutId() ==
2811 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2812
2813 Layout firstLayout = layouts.get(0);
2814
2815 layoutLocalServiceHelper.validateFirstLayout(firstLayout);
2816 }
2817
2818 int newPriority = LayoutConstants.FIRST_PRIORITY;
2819
2820 for (Layout curLayout : layouts) {
2821 int curNextPriority = layoutLocalServiceHelper.getNextPriority(
2822 layout.getGroupId(), layout.isPrivateLayout(),
2823 layout.getParentLayoutId(),
2824 curLayout.getSourcePrototypeLayoutUuid(), newPriority++);
2825
2826 if (curLayout.getPriority() == curNextPriority) {
2827 continue;
2828 }
2829
2830 curLayout.setModifiedDate(layout.getModifiedDate());
2831 curLayout.setPriority(curNextPriority);
2832
2833 layoutPersistence.update(curLayout);
2834
2835 if (curLayout.equals(layout)) {
2836 layout = curLayout;
2837 }
2838 }
2839
2840 return layout;
2841 }
2842
2843
2853 @Override
2854 public Layout updatePriority(
2855 long groupId, boolean privateLayout, long layoutId, int priority)
2856 throws PortalException {
2857
2858 Layout layout = layoutPersistence.findByG_P_L(
2859 groupId, privateLayout, layoutId);
2860
2861 return updatePriority(layout, priority);
2862 }
2863
2864
2876 @Override
2877 public Layout updatePriority(
2878 long groupId, boolean privateLayout, long layoutId,
2879 long nextLayoutId, long previousLayoutId)
2880 throws PortalException {
2881
2882 Layout layout = getLayout(groupId, privateLayout, layoutId);
2883
2884 int priority = layout.getPriority();
2885
2886 Layout nextLayout = null;
2887
2888 if (nextLayoutId > 0) {
2889 nextLayout = getLayout(groupId, privateLayout, nextLayoutId);
2890 }
2891
2892 Layout previousLayout = null;
2893
2894 if (previousLayoutId > 0) {
2895 previousLayout = getLayout(
2896 groupId, privateLayout, previousLayoutId);
2897 }
2898
2899 if ((nextLayout != null) && (priority > nextLayout.getPriority())) {
2900 priority = nextLayout.getPriority();
2901 }
2902 else if ((previousLayout != null) &&
2903 (priority < previousLayout.getPriority())) {
2904
2905 priority = previousLayout.getPriority();
2906 }
2907
2908 return updatePriority(layout, priority);
2909 }
2910
2911
2918 @Override
2919 public Layout updatePriority(long plid, int priority)
2920 throws PortalException {
2921
2922 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2923
2924 return updatePriority(layout, priority);
2925 }
2926
2927
2930 @Deprecated
2931 @Override
2932 @SuppressWarnings("unused")
2933 public void updateScopedPortletNames(
2934 long groupId, boolean privateLayout, long layoutId,
2935 Map<Locale, String> nameMap, List<Locale> nameMapModifiedLocales)
2936 throws PortalException {
2937 }
2938
2939
2952 @Deprecated
2953 @Override
2954 public void updateScopedPortletNames(
2955 long groupId, boolean privateLayout, long layoutId, String name,
2956 String languageId)
2957 throws PortalException {
2958 }
2959
2960
2966 @Deprecated
2967 @Override
2968 public MissingReferences validateImportLayoutsFile(
2969 ExportImportConfiguration exportImportConfiguration, File file)
2970 throws PortalException {
2971
2972 throw new UnsupportedOperationException();
2973 }
2974
2975
2981 @Deprecated
2982 @Override
2983 public MissingReferences validateImportLayoutsFile(
2984 ExportImportConfiguration exportImportConfiguration,
2985 InputStream inputStream)
2986 throws PortalException {
2987
2988 throw new UnsupportedOperationException();
2989 }
2990
2991
2995 @Deprecated
2996 @Override
2997 public MissingReferences validateImportLayoutsFile(
2998 long userId, long groupId, boolean privateLayout,
2999 Map<String, String[]> parameterMap, File file)
3000 throws PortalException {
3001
3002 throw new UnsupportedOperationException();
3003 }
3004
3005
3009 @Deprecated
3010 @Override
3011 public MissingReferences validateImportLayoutsFile(
3012 long userId, long groupId, boolean privateLayout,
3013 Map<String, String[]> parameterMap, InputStream inputStream)
3014 throws PortalException {
3015
3016 throw new UnsupportedOperationException();
3017 }
3018
3019
3025 @Deprecated
3026 @Override
3027 public MissingReferences validateImportPortletInfo(
3028 ExportImportConfiguration exportImportConfiguration, File file)
3029 throws PortalException {
3030
3031 throw new UnsupportedOperationException();
3032 }
3033
3034
3040 @Deprecated
3041 @Override
3042 public MissingReferences validateImportPortletInfo(
3043 ExportImportConfiguration exportImportConfiguration,
3044 InputStream inputStream)
3045 throws PortalException {
3046
3047 throw new UnsupportedOperationException();
3048 }
3049
3050
3054 @Deprecated
3055 @Override
3056 public MissingReferences validateImportPortletInfo(
3057 long userId, long plid, long groupId, String portletId,
3058 Map<String, String[]> parameterMap, File file)
3059 throws PortalException {
3060
3061 throw new UnsupportedOperationException();
3062 }
3063
3064
3068 @Deprecated
3069 @Override
3070 public MissingReferences validateImportPortletInfo(
3071 long userId, long plid, long groupId, String portletId,
3072 Map<String, String[]> parameterMap, InputStream inputStream)
3073 throws PortalException {
3074
3075 throw new UnsupportedOperationException();
3076 }
3077
3078 protected void validateTypeSettingsProperties(
3079 UnicodeProperties typeSettingsProperties)
3080 throws PortalException {
3081
3082 String sitemapChangeFrequency = typeSettingsProperties.getProperty(
3083 "sitemap-changefreq");
3084
3085 if (Validator.isNotNull(sitemapChangeFrequency) &&
3086 !sitemapChangeFrequency.equals("always") &&
3087 !sitemapChangeFrequency.equals("hourly") &&
3088 !sitemapChangeFrequency.equals("daily") &&
3089 !sitemapChangeFrequency.equals("weekly") &&
3090 !sitemapChangeFrequency.equals("monthly") &&
3091 !sitemapChangeFrequency.equals("yearly") &&
3092 !sitemapChangeFrequency.equals("never")) {
3093
3094 throw new SitemapChangeFrequencyException();
3095 }
3096
3097 String sitemapInclude = typeSettingsProperties.getProperty(
3098 "sitemap-include");
3099
3100 if (Validator.isNotNull(sitemapInclude) &&
3101 !sitemapInclude.equals("0") && !sitemapInclude.equals("1")) {
3102
3103 throw new SitemapIncludeException();
3104 }
3105
3106 String sitemapPriority = typeSettingsProperties.getProperty(
3107 "sitemap-priority");
3108
3109 if (Validator.isNotNull(sitemapPriority)) {
3110 try {
3111 double priority = Double.parseDouble(sitemapPriority);
3112
3113 if ((priority < 0) || (priority > 1)) {
3114 throw new SitemapPagePriorityException();
3115 }
3116 }
3117 catch (NumberFormatException nfe) {
3118 throw new SitemapPagePriorityException();
3119 }
3120 }
3121 }
3122
3123 @BeanReference(type = LayoutLocalServiceHelper.class)
3124 protected LayoutLocalServiceHelper layoutLocalServiceHelper;
3125
3126 }