001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.LocaleException;
018 import com.liferay.portal.NoSuchLayoutException;
019 import com.liferay.portal.RequiredLayoutException;
020 import com.liferay.portal.SitemapChangeFrequencyException;
021 import com.liferay.portal.SitemapIncludeException;
022 import com.liferay.portal.SitemapPagePriorityException;
023 import com.liferay.portal.kernel.bean.BeanReference;
024 import com.liferay.portal.kernel.dao.orm.QueryUtil;
025 import com.liferay.portal.kernel.exception.PortalException;
026 import com.liferay.portal.kernel.exception.SystemException;
027 import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
028 import com.liferay.portal.kernel.lar.PortletDataException;
029 import com.liferay.portal.kernel.util.FileUtil;
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.UnicodeProperties;
037 import com.liferay.portal.kernel.util.Validator;
038 import com.liferay.portal.kernel.workflow.WorkflowConstants;
039 import com.liferay.portal.lar.LayoutExporter;
040 import com.liferay.portal.lar.LayoutImporter;
041 import com.liferay.portal.lar.PortletExporter;
042 import com.liferay.portal.lar.PortletImporter;
043 import com.liferay.portal.model.Group;
044 import com.liferay.portal.model.Layout;
045 import com.liferay.portal.model.LayoutConstants;
046 import com.liferay.portal.model.LayoutPrototype;
047 import com.liferay.portal.model.LayoutReference;
048 import com.liferay.portal.model.LayoutSet;
049 import com.liferay.portal.model.LayoutSetPrototype;
050 import com.liferay.portal.model.LayoutTypePortlet;
051 import com.liferay.portal.model.PortletConstants;
052 import com.liferay.portal.model.Resource;
053 import com.liferay.portal.model.ResourceConstants;
054 import com.liferay.portal.model.ResourcePermission;
055 import com.liferay.portal.model.User;
056 import com.liferay.portal.model.UserGroup;
057 import com.liferay.portal.service.ServiceContext;
058 import com.liferay.portal.service.base.LayoutLocalServiceBaseImpl;
059 import com.liferay.portal.util.PortalUtil;
060 import com.liferay.portal.util.PortletKeys;
061 import com.liferay.portal.util.PropsValues;
062 import com.liferay.portal.util.comparator.LayoutComparator;
063 import com.liferay.portal.util.comparator.LayoutPriorityComparator;
064 import com.liferay.portlet.dynamicdatalists.RecordSetDuplicateRecordSetKeyException;
065 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateStructureKeyException;
066 import com.liferay.portlet.expando.model.ExpandoBridge;
067 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
068 import com.liferay.portlet.sites.util.SitesUtil;
069
070 import java.io.File;
071 import java.io.IOException;
072 import java.io.InputStream;
073
074 import java.util.ArrayList;
075 import java.util.Date;
076 import java.util.HashMap;
077 import java.util.HashSet;
078 import java.util.LinkedHashSet;
079 import java.util.List;
080 import java.util.Locale;
081 import java.util.Map;
082 import java.util.Set;
083
084
096 public class LayoutLocalServiceImpl extends LayoutLocalServiceBaseImpl {
097
098
105 public static String getCounterName(long groupId, boolean privateLayout) {
106 StringBundler sb = new StringBundler();
107
108 sb.append(Layout.class.getName());
109 sb.append(StringPool.POUND);
110 sb.append(groupId);
111 sb.append(StringPool.POUND);
112 sb.append(privateLayout);
113
114 return sb.toString();
115 }
116
117
171 @Override
172 public Layout addLayout(
173 long userId, long groupId, boolean privateLayout,
174 long parentLayoutId, Map<Locale, String> nameMap,
175 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
176 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
177 String type, boolean hidden, String friendlyURL,
178 ServiceContext serviceContext)
179 throws PortalException, SystemException {
180
181
182
183 User user = userPersistence.findByPrimaryKey(userId);
184 long layoutId = getNextLayoutId(groupId, privateLayout);
185 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
186 groupId, privateLayout, parentLayoutId);
187 String name = nameMap.get(LocaleUtil.getDefault());
188 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
189 groupId, privateLayout, layoutId, name, friendlyURL);
190 int priority = layoutLocalServiceHelper.getNextPriority(
191 groupId, privateLayout, parentLayoutId, null, -1);
192
193 layoutLocalServiceHelper.validate(
194 groupId, privateLayout, layoutId, parentLayoutId, name, type,
195 hidden, friendlyURL);
196
197 Date now = new Date();
198
199 long plid = counterLocalService.increment();
200
201 Layout layout = layoutPersistence.create(plid);
202
203 layout.setUuid(serviceContext.getUuid());
204 layout.setGroupId(groupId);
205 layout.setCompanyId(user.getCompanyId());
206 layout.setCreateDate(serviceContext.getCreateDate(now));
207 layout.setModifiedDate(serviceContext.getModifiedDate(now));
208 layout.setPrivateLayout(privateLayout);
209 layout.setLayoutId(layoutId);
210 layout.setParentLayoutId(parentLayoutId);
211 layout.setNameMap(nameMap);
212 layout.setTitleMap(titleMap);
213 layout.setDescriptionMap(descriptionMap);
214 layout.setKeywordsMap(keywordsMap);
215 layout.setRobotsMap(robotsMap);
216 layout.setType(type);
217 layout.setHidden(hidden);
218 layout.setFriendlyURL(friendlyURL);
219 layout.setPriority(priority);
220
221 boolean layoutUpdateable = ParamUtil.getBoolean(
222 serviceContext, SitesUtil.LAYOUT_UPDATEABLE, true);
223
224 if (!layoutUpdateable) {
225 UnicodeProperties typeSettingsProperties =
226 layout.getTypeSettingsProperties();
227
228 typeSettingsProperties.put(
229 SitesUtil.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
230
231 layout.setTypeSettingsProperties(typeSettingsProperties);
232 }
233
234 String layoutPrototypeUuid = ParamUtil.getString(
235 serviceContext, "layoutPrototypeUuid");
236 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
237 serviceContext, "layoutPrototypeLinkEnabled",
238 PropsValues.LAYOUT_PROTOTYPE_LINK_ENABLED_DEFAULT);
239
240 if (Validator.isNotNull(layoutPrototypeUuid)) {
241 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
242 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
243 }
244
245 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
246 LayoutTypePortlet layoutTypePortlet =
247 (LayoutTypePortlet)layout.getLayoutType();
248
249 layoutTypePortlet.setLayoutTemplateId(
250 0, PropsValues.LAYOUT_DEFAULT_TEMPLATE_ID, false);
251 }
252
253 layoutPersistence.update(layout, false);
254
255 if (Validator.isNotNull(layoutPrototypeUuid) &&
256 !layoutPrototypeLinkEnabled) {
257
258 LayoutPrototype layoutPrototype =
259 layoutPrototypeLocalService.getLayoutPrototypeByUuid(
260 layoutPrototypeUuid);
261
262 try {
263 SitesUtil.applyLayoutPrototype(
264 layoutPrototype, layout, layoutPrototypeLinkEnabled);
265 }
266 catch (PortalException pe) {
267 throw pe;
268 }
269 catch (SystemException se) {
270 throw se;
271 }
272 catch (Exception e) {
273 throw new SystemException(e);
274 }
275 }
276
277
278
279 boolean addGroupPermissions = true;
280
281 Group group = groupLocalService.getGroup(groupId);
282
283 if (privateLayout && group.isUser()) {
284 addGroupPermissions = false;
285 }
286
287 boolean addGuestPermissions = false;
288
289 if (!privateLayout ||
290 type.equals(LayoutConstants.TYPE_CONTROL_PANEL) ||
291 group.isLayoutSetPrototype()) {
292
293 addGuestPermissions = true;
294 }
295
296 resourceLocalService.addResources(
297 user.getCompanyId(), groupId, user.getUserId(),
298 Layout.class.getName(), layout.getPlid(), false,
299 addGroupPermissions, addGuestPermissions);
300
301
302
303 groupLocalService.updateSite(groupId, true);
304
305
306
307 layoutSetLocalService.updatePageCount(groupId, privateLayout);
308
309 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
310 groupId, privateLayout);
311
312 layout.setLayoutSet(layoutSet);
313
314
315
316 ExpandoBridge expandoBridge = layout.getExpandoBridge();
317
318 expandoBridge.setAttributes(serviceContext);
319
320
321
322 if (PropsValues.LAYOUT_COMMENTS_ENABLED) {
323 mbMessageLocalService.addDiscussionMessage(
324 userId, user.getFullName(), groupId, Layout.class.getName(),
325 plid, WorkflowConstants.ACTION_PUBLISH);
326 }
327
328 return layout;
329 }
330
331
386 @Override
387 public Layout addLayout(
388 long userId, long groupId, boolean privateLayout,
389 long parentLayoutId, String name, String title, String description,
390 String type, boolean hidden, String friendlyURL,
391 ServiceContext serviceContext)
392 throws PortalException, SystemException {
393
394 Locale locale = LocaleUtil.getDefault();
395
396 Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
397
398 descriptionMap.put(locale, description);
399
400 Map<Locale, String> nameMap = new HashMap<Locale, String>();
401
402 nameMap.put(locale, name);
403
404 Map<Locale, String> titleMap = new HashMap<Locale, String>();
405
406 titleMap.put(locale, title);
407
408 return addLayout(
409 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
410 descriptionMap, new HashMap<Locale, String>(),
411 new HashMap<Locale, String>(), type, hidden, friendlyURL,
412 serviceContext);
413 }
414
415
425 @Override
426 public void deleteLayout(
427 Layout layout, boolean updateLayoutSet,
428 ServiceContext serviceContext)
429 throws PortalException, SystemException {
430
431
432
433 if (layout.getParentLayoutId() ==
434 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
435
436 List<Layout> rootLayouts = layoutPersistence.findByG_P_P(
437 layout.getGroupId(), layout.isPrivateLayout(),
438 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, 0, 2);
439
440 if (rootLayouts.size() > 1) {
441 Layout firstLayout = rootLayouts.get(0);
442
443 if (firstLayout.getLayoutId() == layout.getLayoutId()) {
444 Layout secondLayout = rootLayouts.get(1);
445
446 layoutLocalServiceHelper.validateFirstLayout(
447 secondLayout.getType());
448 }
449 }
450 }
451
452
453
454 List<Layout> childLayouts = layoutPersistence.findByG_P_P(
455 layout.getGroupId(), layout.isPrivateLayout(),
456 layout.getLayoutId());
457
458 for (Layout childLayout : childLayouts) {
459 deleteLayout(childLayout, updateLayoutSet, serviceContext);
460 }
461
462
463
464 portletPreferencesLocalService.deletePortletPreferences(
465 PortletKeys.PREFS_OWNER_ID_DEFAULT,
466 PortletKeys.PREFS_OWNER_TYPE_LAYOUT, layout.getPlid());
467
468
469
470 subscriptionLocalService.deleteSubscriptions(
471 layout.getCompanyId(), Layout.class.getName(), layout.getPlid());
472
473
474
475 ratingsStatsLocalService.deleteStats(
476 Layout.class.getName(), layout.getPlid());
477
478
479
480 long layoutClassNameId = classNameLocalService.getClassNameId(
481 Layout.class);
482
483 List<MDRRuleGroupInstance> mdrRuleGroupInstances =
484 mdrRuleGroupInstancePersistence.findByC_C(
485 layoutClassNameId, layout.getPlid());
486
487 for (MDRRuleGroupInstance mdrRuleGroupInstance :
488 mdrRuleGroupInstances) {
489
490 mdrRuleGroupInstanceLocalService.deleteMDRRuleGroupInstance(
491 mdrRuleGroupInstance);
492 }
493
494
495
496 mbMessageLocalService.deleteDiscussionMessages(
497 Layout.class.getName(), layout.getPlid());
498
499
500
501 journalArticleLocalService.deleteLayoutArticleReferences(
502 layout.getGroupId(), layout.getUuid());
503
504
505
506 journalContentSearchLocalService.deleteLayoutContentSearches(
507 layout.getGroupId(), layout.isPrivateLayout(),
508 layout.getLayoutId());
509
510
511
512 expandoValueLocalService.deleteValues(
513 Layout.class.getName(), layout.getPlid());
514
515
516
517 imageLocalService.deleteImage(layout.getIconImageId());
518
519
520
521 Group scopeGroup = layout.getScopeGroup();
522
523 if (scopeGroup != null) {
524 groupLocalService.deleteGroup(scopeGroup.getGroupId());
525 }
526
527
528
529 String primKey =
530 layout.getPlid() + PortletConstants.LAYOUT_SEPARATOR + "%";
531
532 if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6) {
533 List<ResourcePermission> resourcePermissions =
534 resourcePermissionPersistence.findByC_P(
535 layout.getCompanyId(), primKey);
536
537 for (ResourcePermission resourcePermission : resourcePermissions) {
538 resourcePermissionLocalService.deleteResourcePermission(
539 resourcePermission);
540 }
541 }
542 else {
543 List<Resource> resources = resourceFinder.findByC_P(
544 layout.getCompanyId(), primKey);
545
546 for (Resource resource : resources) {
547 resourceLocalService.deleteResource(resource);
548 }
549 }
550
551 resourceLocalService.deleteResource(
552 layout.getCompanyId(), Layout.class.getName(),
553 ResourceConstants.SCOPE_INDIVIDUAL, layout.getPlid());
554
555
556
557 layoutPersistence.remove(layout);
558
559
560
561 if (updateLayoutSet) {
562 layoutSetLocalService.updatePageCount(
563 layout.getGroupId(), layout.isPrivateLayout());
564 }
565 }
566
567
579 @Override
580 public void deleteLayout(
581 long groupId, boolean privateLayout, long layoutId,
582 ServiceContext serviceContext)
583 throws PortalException, SystemException {
584
585 Layout layout = layoutPersistence.findByG_P_L(
586 groupId, privateLayout, layoutId);
587
588 deleteLayout(layout, true, serviceContext);
589 }
590
591
601 @Override
602 public void deleteLayout(long plid, ServiceContext serviceContext)
603 throws PortalException, SystemException {
604
605 Layout layout = layoutPersistence.findByPrimaryKey(plid);
606
607 deleteLayout(layout, true, serviceContext);
608 }
609
610
622 @Override
623 public void deleteLayouts(
624 long groupId, boolean privateLayout, ServiceContext serviceContext)
625 throws PortalException, SystemException {
626
627
628
629 List<Layout> layouts = layoutPersistence.findByG_P_P(
630 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
631 QueryUtil.ALL_POS, QueryUtil.ALL_POS,
632 new LayoutPriorityComparator(false));
633
634 for (Layout layout : layouts) {
635 try {
636 deleteLayout(layout, false, serviceContext);
637 }
638 catch (NoSuchLayoutException nsle) {
639 }
640 }
641
642
643
644 if (GetterUtil.getBoolean(
645 serviceContext.getAttribute("updatePageCount"), true)) {
646
647 layoutSetLocalService.updatePageCount(groupId, privateLayout);
648 }
649
650
651
652 counterLocalService.reset(getCounterName(groupId, privateLayout));
653 }
654
655
672 @Override
673 public byte[] exportLayouts(
674 long groupId, boolean privateLayout, long[] layoutIds,
675 Map<String, String[]> parameterMap, Date startDate, Date endDate)
676 throws PortalException, SystemException {
677
678 File file = exportLayoutsAsFile(
679 groupId, privateLayout, layoutIds, parameterMap, startDate,
680 endDate);
681
682 try {
683 return FileUtil.getBytes(file);
684 }
685 catch (IOException ioe) {
686 throw new SystemException(ioe);
687 }
688 finally {
689 file.delete();
690 }
691 }
692
693
709 @Override
710 public byte[] exportLayouts(
711 long groupId, boolean privateLayout,
712 Map<String, String[]> parameterMap, Date startDate, Date endDate)
713 throws PortalException, SystemException {
714
715 return exportLayouts(
716 groupId, privateLayout, null, parameterMap, startDate, endDate);
717 }
718
719
737 @Override
738 public File exportLayoutsAsFile(
739 long groupId, boolean privateLayout, long[] layoutIds,
740 Map<String, String[]> parameterMap, Date startDate, Date endDate)
741 throws PortalException, SystemException {
742
743 try {
744 LayoutExporter layoutExporter = new LayoutExporter();
745
746 return layoutExporter.exportLayoutsAsFile(
747 groupId, privateLayout, layoutIds, parameterMap, startDate,
748 endDate);
749 }
750 catch (PortalException pe) {
751 throw pe;
752 }
753 catch (SystemException se) {
754 throw se;
755 }
756 catch (Exception e) {
757 throw new SystemException(e);
758 }
759 }
760
761
779 @Override
780 public byte[] exportPortletInfo(
781 long plid, long groupId, String portletId,
782 Map<String, String[]> parameterMap, Date startDate, Date endDate)
783 throws PortalException, SystemException {
784
785 File file = exportPortletInfoAsFile(
786 plid, groupId, portletId, parameterMap, startDate, endDate);
787
788 try {
789 return FileUtil.getBytes(file);
790 }
791 catch (IOException ioe) {
792 throw new SystemException(ioe);
793 }
794 finally {
795 file.delete();
796 }
797 }
798
799
817 @Override
818 public File exportPortletInfoAsFile(
819 long plid, long groupId, String portletId,
820 Map<String, String[]> parameterMap, Date startDate, Date endDate)
821 throws PortalException, SystemException {
822
823 try {
824 PortletExporter portletExporter = new PortletExporter();
825
826 return portletExporter.exportPortletInfoAsFile(
827 plid, groupId, portletId, parameterMap, startDate, endDate);
828 }
829 catch (PortalException pe) {
830 throw pe;
831 }
832 catch (SystemException se) {
833 throw se;
834 }
835 catch (Exception e) {
836 throw new SystemException(e);
837 }
838 }
839
840 @Override
841 public Layout fetchFirstLayout(
842 long groupId, boolean privateLayout, long parentLayoutId)
843 throws SystemException {
844
845 return layoutPersistence.fetchByG_P_P_First(
846 groupId, privateLayout, parentLayoutId,
847 new LayoutPriorityComparator());
848 }
849
850
858 @Override
859 public Layout fetchLayoutByUuidAndGroupId(
860 String uuid, long groupId, boolean privateLayout)
861 throws SystemException {
862
863 return layoutPersistence.fetchByUUID_G_P(uuid, groupId, privateLayout);
864 }
865
866
874 @Override
875 public long getDefaultPlid(long groupId) throws SystemException {
876 if (groupId > 0) {
877 List<Layout> layouts = layoutPersistence.findByGroupId(
878 groupId, 0, 1);
879
880 if (layouts.size() > 0) {
881 Layout layout = layouts.get(0);
882
883 return layout.getPlid();
884 }
885 }
886
887 return LayoutConstants.DEFAULT_PLID;
888 }
889
890
899 @Override
900 public long getDefaultPlid(long groupId, boolean privateLayout)
901 throws SystemException {
902
903 if (groupId > 0) {
904 List<Layout> layouts = layoutPersistence.findByG_P(
905 groupId, privateLayout, 0, 1);
906
907 if (layouts.size() > 0) {
908 Layout layout = layouts.get(0);
909
910 return layout.getPlid();
911 }
912 }
913
914 return LayoutConstants.DEFAULT_PLID;
915 }
916
917
930 @Override
931 public long getDefaultPlid(
932 long groupId, boolean privateLayout, String portletId)
933 throws PortalException, SystemException {
934
935 if (groupId > 0) {
936 List<Layout> layouts = layoutPersistence.findByG_P(
937 groupId, privateLayout);
938
939 for (Layout layout : layouts) {
940 if (layout.isTypePortlet()) {
941 LayoutTypePortlet layoutTypePortlet =
942 (LayoutTypePortlet)layout.getLayoutType();
943
944 if (layoutTypePortlet.hasPortletId(portletId)) {
945 return layout.getPlid();
946 }
947 }
948 }
949 }
950
951 return LayoutConstants.DEFAULT_PLID;
952 }
953
954
965 @Override
966 public Layout getFriendlyURLLayout(
967 long groupId, boolean privateLayout, String friendlyURL)
968 throws PortalException, SystemException {
969
970 if (Validator.isNull(friendlyURL)) {
971 throw new NoSuchLayoutException();
972 }
973
974 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(friendlyURL);
975
976 Layout layout = layoutPersistence.fetchByG_P_F(
977 groupId, privateLayout, friendlyURL);
978
979 if ((layout == null) &&
980 friendlyURL.startsWith(StringPool.SLASH) &&
981 Validator.isNumber(friendlyURL.substring(1))) {
982
983 long layoutId = GetterUtil.getLong(friendlyURL.substring(1));
984
985 layout = layoutPersistence.fetchByG_P_L(
986 groupId, privateLayout, layoutId);
987 }
988
989 if (layout == null) {
990 throw new NoSuchLayoutException();
991 }
992
993 return layout;
994 }
995
996
1007 @Override
1008 public Layout getLayout(long groupId, boolean privateLayout, long layoutId)
1009 throws PortalException, SystemException {
1010
1011 return layoutPersistence.findByG_P_L(groupId, privateLayout, layoutId);
1012 }
1013
1014
1024 @Override
1025 public Layout getLayoutByIconImageId(long iconImageId)
1026 throws PortalException, SystemException {
1027
1028 return layoutPersistence.findByIconImageId(iconImageId);
1029 }
1030
1031
1040 @Override
1041 public List<Layout> getLayouts(long groupId, boolean privateLayout)
1042 throws SystemException {
1043
1044 return layoutPersistence.findByG_P(groupId, privateLayout);
1045 }
1046
1047
1058 @Override
1059 public List<Layout> getLayouts(
1060 long groupId, boolean privateLayout, long parentLayoutId)
1061 throws SystemException {
1062
1063 return layoutPersistence.findByG_P_P(
1064 groupId, privateLayout, parentLayoutId);
1065 }
1066
1067
1091 @Override
1092 public List<Layout> getLayouts(
1093 long groupId, boolean privateLayout, long parentLayoutId,
1094 boolean incomplete, int start, int end)
1095 throws SystemException {
1096
1097 return layoutPersistence.findByG_P_P(
1098 groupId, privateLayout, parentLayoutId, start, end);
1099 }
1100
1101
1114 @Override
1115 public List<Layout> getLayouts(
1116 long groupId, boolean privateLayout, long[] layoutIds)
1117 throws PortalException, SystemException {
1118
1119 List<Layout> layouts = new ArrayList<Layout>();
1120
1121 for (long layoutId : layoutIds) {
1122 Layout layout = getLayout(groupId, privateLayout, layoutId);
1123
1124 layouts.add(layout);
1125 }
1126
1127 return layouts;
1128 }
1129
1130
1141 @Override
1142 public List<Layout> getLayouts(
1143 long groupId, boolean privateLayout, String type)
1144 throws SystemException {
1145
1146 return layoutPersistence.findByG_P_T(groupId, privateLayout, type);
1147 }
1148
1149
1160 @Override
1161 public LayoutReference[] getLayouts(
1162 long companyId, String portletId, String preferencesKey,
1163 String preferencesValue)
1164 throws SystemException {
1165
1166 List<LayoutReference> layoutReferences = layoutFinder.findByC_P_P(
1167 companyId, portletId, preferencesKey, preferencesValue);
1168
1169 return layoutReferences.toArray(
1170 new LayoutReference[layoutReferences.size()]);
1171 }
1172
1173 @Override
1174 public int getLayoutsByLayoutPrototypeUuidCount(String layoutPrototypeUuid)
1175 throws SystemException {
1176
1177 return layoutPersistence.countByLayoutPrototypeUuid(
1178 layoutPrototypeUuid);
1179 }
1180
1181 @Override
1182 public int getLayoutsCount(Group group, boolean privateLayout)
1183 throws PortalException, SystemException {
1184
1185 return getLayoutsCount(group, privateLayout, true);
1186 }
1187
1188 @Override
1189 public int getLayoutsCount(
1190 Group group, boolean privateLayout, boolean includeUserGroups)
1191 throws PortalException, SystemException {
1192
1193 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1194 group.getGroupId(), privateLayout);
1195
1196 int count = layoutSet.getPageCount();
1197
1198 if (!group.isUser() || !includeUserGroups) {
1199 return count;
1200 }
1201
1202 List<UserGroup> userGroups = userPersistence.getUserGroups(
1203 group.getClassPK());
1204
1205 if (!userGroups.isEmpty()) {
1206 long userGroupClassNameId = classNameLocalService.getClassNameId(
1207 UserGroup.class);
1208
1209 for (UserGroup userGroup : userGroups) {
1210 Group userGroupGroup = groupPersistence.findByC_C_C(
1211 group.getCompanyId(), userGroupClassNameId,
1212 userGroup.getUserGroupId());
1213
1214 layoutSet = layoutSetPersistence.findByG_P(
1215 userGroupGroup.getGroupId(), privateLayout);
1216
1217 count += layoutSet.getPageCount();
1218 }
1219 }
1220
1221 return count;
1222 }
1223
1224 @Override
1225 public int getLayoutsCount(User user, boolean privateLayout)
1226 throws PortalException, SystemException {
1227
1228 return getLayoutsCount(user, privateLayout, true);
1229 }
1230
1231 @Override
1232 public int getLayoutsCount(
1233 User user, boolean privateLayout, boolean includeUserGroups)
1234 throws PortalException, SystemException {
1235
1236 long classNameId = classNameLocalService.getClassNameId(User.class);
1237
1238 Group group = groupPersistence.findByC_C_C(
1239 user.getCompanyId(), classNameId, user.getUserId());
1240
1241 return getLayoutsCount(group, privateLayout, includeUserGroups);
1242 }
1243
1244
1252 @Override
1253 public long getNextLayoutId(long groupId, boolean privateLayout)
1254 throws SystemException {
1255
1256 long nextLayoutId = counterLocalService.increment(
1257 getCounterName(groupId, privateLayout));
1258
1259 if (nextLayoutId == 1) {
1260 List<Layout> layouts = layoutPersistence.findByG_P(
1261 groupId, privateLayout, 0, 1, new LayoutComparator());
1262
1263 if (!layouts.isEmpty()) {
1264 Layout layout = layouts.get(0);
1265
1266 nextLayoutId = layout.getLayoutId() + 1;
1267
1268 counterLocalService.reset(
1269 getCounterName(groupId, privateLayout), nextLayoutId);
1270 }
1271 }
1272
1273 return nextLayoutId;
1274 }
1275
1276
1282 @Override
1283 public List<Layout> getNullFriendlyURLLayouts() throws SystemException {
1284 return layoutFinder.findByNullFriendlyURL();
1285 }
1286
1287
1295 @Override
1296 public List<Layout> getScopeGroupLayouts(
1297 long groupId, boolean privateLayout)
1298 throws SystemException {
1299
1300 return layoutFinder.findByScopeGroup(groupId, privateLayout);
1301 }
1302
1303 @Override
1304 public boolean hasLayouts(Group group, boolean privateLayout)
1305 throws PortalException, SystemException {
1306
1307 return hasLayouts(group, privateLayout, true);
1308 }
1309
1310 @Override
1311 public boolean hasLayouts(
1312 Group group, boolean privateLayout, boolean includeUserGroups)
1313 throws PortalException, SystemException {
1314
1315 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1316 group.getGroupId(), privateLayout);
1317
1318 if (layoutSet.getPageCount() > 0) {
1319 return true;
1320 }
1321
1322 if (!group.isUser() || !includeUserGroups) {
1323 return false;
1324 }
1325
1326 List<UserGroup> userGroups = userPersistence.getUserGroups(
1327 group.getClassPK());
1328
1329 if (!userGroups.isEmpty()) {
1330 long userGroupClassNameId = classNameLocalService.getClassNameId(
1331 UserGroup.class);
1332
1333 for (UserGroup userGroup : userGroups) {
1334 Group userGroupGroup = groupPersistence.findByC_C_C(
1335 group.getCompanyId(), userGroupClassNameId,
1336 userGroup.getUserGroupId());
1337
1338 layoutSet = layoutSetPersistence.findByG_P(
1339 userGroupGroup.getGroupId(), privateLayout);
1340
1341 if (layoutSet.getPageCount() > 0) {
1342 return true;
1343 }
1344 }
1345 }
1346
1347 return false;
1348 }
1349
1350
1361 @Override
1362 public boolean hasLayouts(
1363 long groupId, boolean privateLayout, long parentLayoutId)
1364 throws SystemException {
1365
1366 return layoutPersistence.countByG_P_P(
1367 groupId, privateLayout, parentLayoutId) > 0;
1368 }
1369
1370 @Override
1371 public boolean hasLayouts(User user, boolean privateLayout)
1372 throws PortalException, SystemException {
1373
1374 return hasLayouts(user, privateLayout, true);
1375 }
1376
1377 @Override
1378 public boolean hasLayouts(
1379 User user, boolean privateLayout, boolean includeUserGroups)
1380 throws PortalException, SystemException {
1381
1382 long classNameId = classNameLocalService.getClassNameId(User.class);
1383
1384 Group group = groupPersistence.findByC_C_C(
1385 user.getCompanyId(), classNameId, user.getUserId());
1386
1387 return hasLayouts(group, privateLayout, includeUserGroups);
1388 }
1389
1390 @Override
1391 public boolean hasLayoutSetPrototypeLayout(
1392 long layoutSetPrototypeId, String layoutUuid)
1393 throws PortalException, SystemException {
1394
1395 LayoutSetPrototype layoutSetPrototype =
1396 layoutSetPrototypeLocalService.getLayoutSetPrototype(
1397 layoutSetPrototypeId);
1398
1399 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1400 layoutSetPrototype, layoutUuid);
1401 }
1402
1403 @Override
1404 public boolean hasLayoutSetPrototypeLayout(
1405 String layoutSetPrototypeUuid, String layoutUuid)
1406 throws PortalException, SystemException {
1407
1408 LayoutSetPrototype layoutSetPrototype =
1409 layoutSetPrototypeLocalService.getLayoutSetPrototypeByUuid(
1410 layoutSetPrototypeUuid);
1411
1412 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1413 layoutSetPrototype, layoutUuid);
1414 }
1415
1416
1432 @Override
1433 public void importLayouts(
1434 long userId, long groupId, boolean privateLayout,
1435 Map<String, String[]> parameterMap, byte[] bytes)
1436 throws PortalException, SystemException {
1437
1438 importLayouts(
1439 userId, groupId, privateLayout, parameterMap,
1440 new UnsyncByteArrayInputStream(bytes));
1441 }
1442
1443
1459 @Override
1460 public void importLayouts(
1461 long userId, long groupId, boolean privateLayout,
1462 Map<String, String[]> parameterMap, File file)
1463 throws PortalException, SystemException {
1464
1465 try {
1466 LayoutImporter layoutImporter = new LayoutImporter();
1467
1468 layoutImporter.importLayouts(
1469 userId, groupId, privateLayout, parameterMap, file);
1470 }
1471 catch (PortalException pe) {
1472 Throwable cause = pe.getCause();
1473
1474 if (cause instanceof LocaleException) {
1475 throw (PortalException)cause;
1476 }
1477
1478 throw pe;
1479 }
1480 catch (SystemException se) {
1481 throw se;
1482 }
1483 catch (Exception e) {
1484 throw new SystemException(e);
1485 }
1486 }
1487
1488
1504 @Override
1505 public void importLayouts(
1506 long userId, long groupId, boolean privateLayout,
1507 Map<String, String[]> parameterMap, InputStream is)
1508 throws PortalException, SystemException {
1509
1510 File file = null;
1511
1512 try {
1513 file = FileUtil.createTempFile("lar");
1514
1515 FileUtil.write(file, is);
1516
1517 importLayouts(userId, groupId, privateLayout, parameterMap, file);
1518 }
1519 catch (IOException ioe) {
1520 throw new SystemException(ioe);
1521 }
1522 finally {
1523 FileUtil.delete(file);
1524 }
1525 }
1526
1527
1544 @Override
1545 public void importPortletInfo(
1546 long userId, long plid, long groupId, String portletId,
1547 Map<String, String[]> parameterMap, File file)
1548 throws PortalException, SystemException {
1549
1550 try {
1551 PortletImporter portletImporter = new PortletImporter();
1552
1553 portletImporter.importPortletInfo(
1554 userId, plid, groupId, portletId, parameterMap, file);
1555 }
1556 catch (PortalException pe) {
1557 Throwable cause = pe.getCause();
1558
1559 while (true) {
1560 if (cause == null) {
1561 break;
1562 }
1563
1564 if ((cause instanceof LocaleException) ||
1565 (cause instanceof
1566 RecordSetDuplicateRecordSetKeyException) ||
1567 (cause instanceof
1568 StructureDuplicateStructureKeyException)) {
1569
1570 throw (PortalException)cause;
1571 }
1572
1573 if (cause instanceof PortletDataException) {
1574 cause = cause.getCause();
1575 }
1576 else {
1577 break;
1578 }
1579 }
1580
1581 throw pe;
1582 }
1583 catch (SystemException se) {
1584 throw se;
1585 }
1586 catch (Exception e) {
1587 throw new SystemException(e);
1588 }
1589 }
1590
1591
1608 @Override
1609 public void importPortletInfo(
1610 long userId, long plid, long groupId, String portletId,
1611 Map<String, String[]> parameterMap, InputStream is)
1612 throws PortalException, SystemException {
1613
1614 File file = null;
1615
1616 try {
1617 file = FileUtil.createTempFile("lar");
1618
1619 FileUtil.write(file, is);
1620
1621 importPortletInfo(
1622 userId, plid, groupId, portletId, parameterMap, file);
1623 }
1624 catch (IOException ioe) {
1625 throw new SystemException(ioe);
1626 }
1627 finally {
1628 FileUtil.delete(file);
1629 }
1630 }
1631
1632
1647 @Override
1648 public void setLayouts(
1649 long groupId, boolean privateLayout, long parentLayoutId,
1650 long[] layoutIds, ServiceContext serviceContext)
1651 throws PortalException, SystemException {
1652
1653 if (layoutIds == null) {
1654 return;
1655 }
1656
1657 if (parentLayoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
1658 if (layoutIds.length < 1) {
1659 throw new RequiredLayoutException(
1660 RequiredLayoutException.AT_LEAST_ONE);
1661 }
1662
1663 Layout layout = layoutPersistence.findByG_P_L(
1664 groupId, privateLayout, layoutIds[0]);
1665
1666 if (!PortalUtil.isLayoutFirstPageable(layout.getType())) {
1667 throw new RequiredLayoutException(
1668 RequiredLayoutException.FIRST_LAYOUT_TYPE);
1669 }
1670
1671 if (layout.isHidden()) {
1672 throw new RequiredLayoutException(
1673 RequiredLayoutException.FIRST_LAYOUT_HIDDEN);
1674 }
1675 }
1676
1677 Set<Long> layoutIdsSet = new LinkedHashSet<Long>();
1678
1679 for (long layoutId : layoutIds) {
1680 layoutIdsSet.add(layoutId);
1681 }
1682
1683 Set<Long> newLayoutIdsSet = new HashSet<Long>();
1684
1685 List<Layout> layouts = layoutPersistence.findByG_P_P(
1686 groupId, privateLayout, parentLayoutId);
1687
1688 for (Layout layout : layouts) {
1689 if (!layoutIdsSet.contains(layout.getLayoutId())) {
1690 deleteLayout(layout, true, serviceContext);
1691 }
1692 else {
1693 newLayoutIdsSet.add(layout.getLayoutId());
1694 }
1695 }
1696
1697 int priority = 0;
1698
1699 for (long layoutId : layoutIdsSet) {
1700 Layout layout = layoutPersistence.findByG_P_L(
1701 groupId, privateLayout, layoutId);
1702
1703 layout.setPriority(priority++);
1704
1705 layoutPersistence.update(layout, false);
1706 }
1707
1708 layoutSetLocalService.updatePageCount(groupId, privateLayout);
1709 }
1710
1711
1721 @Override
1722 public Layout updateFriendlyURL(long plid, String friendlyURL)
1723 throws PortalException, SystemException {
1724
1725 Date now = new Date();
1726
1727 Layout layout = layoutPersistence.findByPrimaryKey(plid);
1728
1729 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
1730 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
1731 StringPool.BLANK, friendlyURL);
1732
1733 layoutLocalServiceHelper.validateFriendlyURL(
1734 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
1735 friendlyURL);
1736
1737 layout.setModifiedDate(now);
1738 layout.setFriendlyURL(friendlyURL);
1739
1740 layoutPersistence.update(layout, false);
1741
1742 return layout;
1743 }
1744
1745
1793 @Override
1794 public Layout updateLayout(
1795 long groupId, boolean privateLayout, long layoutId,
1796 long parentLayoutId, Map<Locale, String> nameMap,
1797 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
1798 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
1799 String type, boolean hidden, String friendlyURL, Boolean iconImage,
1800 byte[] iconBytes, ServiceContext serviceContext)
1801 throws PortalException, SystemException {
1802
1803
1804
1805 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
1806 groupId, privateLayout, parentLayoutId);
1807 String name = nameMap.get(LocaleUtil.getDefault());
1808 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
1809 groupId, privateLayout, layoutId, StringPool.BLANK, friendlyURL);
1810
1811 layoutLocalServiceHelper.validate(
1812 groupId, privateLayout, layoutId, parentLayoutId, name, type,
1813 hidden, friendlyURL);
1814
1815 layoutLocalServiceHelper.validateParentLayoutId(
1816 groupId, privateLayout, layoutId, parentLayoutId);
1817
1818 Date now = new Date();
1819
1820 Layout layout = layoutPersistence.findByG_P_L(
1821 groupId, privateLayout, layoutId);
1822
1823 if (parentLayoutId != layout.getParentLayoutId()) {
1824 int priority = layoutLocalServiceHelper.getNextPriority(
1825 groupId, privateLayout, parentLayoutId,
1826 layout.getSourcePrototypeLayoutUuid(), -1);
1827
1828 layout.setPriority(priority);
1829 }
1830
1831 layout.setModifiedDate(serviceContext.getModifiedDate(now));
1832 layout.setParentLayoutId(parentLayoutId);
1833 layout.setNameMap(nameMap);
1834 layout.setTitleMap(titleMap);
1835 layout.setDescriptionMap(descriptionMap);
1836 layout.setKeywordsMap(keywordsMap);
1837 layout.setRobotsMap(robotsMap);
1838 layout.setType(type);
1839 layout.setHidden(hidden);
1840 layout.setFriendlyURL(friendlyURL);
1841
1842 if (iconImage != null) {
1843 layout.setIconImage(iconImage.booleanValue());
1844
1845 if (iconImage.booleanValue()) {
1846 long iconImageId = layout.getIconImageId();
1847
1848 if (iconImageId <= 0) {
1849 iconImageId = counterLocalService.increment();
1850
1851 layout.setIconImageId(iconImageId);
1852 }
1853 }
1854 }
1855
1856 boolean layoutUpdateable = ParamUtil.getBoolean(
1857 serviceContext, SitesUtil.LAYOUT_UPDATEABLE, true);
1858
1859 UnicodeProperties typeSettingsProperties =
1860 layout.getTypeSettingsProperties();
1861
1862 typeSettingsProperties.put(
1863 SitesUtil.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
1864
1865 layout.setTypeSettingsProperties(typeSettingsProperties);
1866
1867 String layoutPrototypeUuid = ParamUtil.getString(
1868 serviceContext, "layoutPrototypeUuid");
1869 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
1870 serviceContext, "layoutPrototypeLinkEnabled");
1871
1872 if (Validator.isNotNull(layoutPrototypeUuid)) {
1873 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
1874 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
1875 }
1876
1877 layoutPersistence.update(layout, false);
1878
1879
1880
1881 if (iconImage != null) {
1882 if (!iconImage.booleanValue()) {
1883 imageLocalService.deleteImage(layout.getIconImageId());
1884 }
1885 else if ((iconBytes != null) && (iconBytes.length > 0)) {
1886 imageLocalService.updateImage(
1887 layout.getIconImageId(), iconBytes);
1888 }
1889 }
1890
1891
1892
1893 ExpandoBridge expandoBridge = layout.getExpandoBridge();
1894
1895 expandoBridge.setAttributes(serviceContext);
1896
1897 return layout;
1898 }
1899
1900
1913 @Override
1914 public Layout updateLayout(
1915 long groupId, boolean privateLayout, long layoutId,
1916 String typeSettings)
1917 throws PortalException, SystemException {
1918
1919 Date now = new Date();
1920
1921 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
1922
1923 typeSettingsProperties.fastLoad(typeSettings);
1924
1925 validateTypeSettingsProperties(typeSettingsProperties);
1926
1927 Layout layout = layoutPersistence.findByG_P_L(
1928 groupId, privateLayout, layoutId);
1929
1930 layout.setModifiedDate(now);
1931 layout.setTypeSettings(typeSettingsProperties.toString());
1932
1933 layoutPersistence.update(layout, false);
1934
1935 return layout;
1936 }
1937
1938
1952 @Override
1953 public Layout updateLookAndFeel(
1954 long groupId, boolean privateLayout, long layoutId, String themeId,
1955 String colorSchemeId, String css, boolean wapTheme)
1956 throws PortalException, SystemException {
1957
1958 Date now = new Date();
1959
1960 Layout layout = layoutPersistence.findByG_P_L(
1961 groupId, privateLayout, layoutId);
1962
1963 layout.setModifiedDate(now);
1964
1965 if (wapTheme) {
1966 layout.setWapThemeId(themeId);
1967 layout.setWapColorSchemeId(colorSchemeId);
1968 }
1969 else {
1970 layout.setThemeId(themeId);
1971 layout.setColorSchemeId(colorSchemeId);
1972 layout.setCss(css);
1973 }
1974
1975 layoutPersistence.update(layout, false);
1976
1977 return layout;
1978 }
1979
1980
1991 @Override
1992 public Layout updateName(Layout layout, String name, String languageId)
1993 throws PortalException, SystemException {
1994
1995 Date now = new Date();
1996
1997 layoutLocalServiceHelper.validateName(name, languageId);
1998
1999 layout.setModifiedDate(now);
2000 layout.setName(name, LocaleUtil.fromLanguageId(languageId));
2001
2002 layoutPersistence.update(layout, false);
2003
2004 return layout;
2005 }
2006
2007
2022 @Override
2023 public Layout updateName(
2024 long groupId, boolean privateLayout, long layoutId, String name,
2025 String languageId)
2026 throws PortalException, SystemException {
2027
2028 Layout layout = layoutPersistence.findByG_P_L(
2029 groupId, privateLayout, layoutId);
2030
2031 return layoutLocalService.updateName(layout, name, languageId);
2032 }
2033
2034
2046 @Override
2047 public Layout updateName(long plid, String name, String languageId)
2048 throws PortalException, SystemException {
2049
2050 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2051
2052 return layoutLocalService.updateName(layout, name, languageId);
2053 }
2054
2055
2069 @Override
2070 public Layout updateParentLayoutId(
2071 long groupId, boolean privateLayout, long layoutId,
2072 long parentLayoutId)
2073 throws PortalException, SystemException {
2074
2075 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2076 groupId, privateLayout, parentLayoutId);
2077
2078 layoutLocalServiceHelper.validateParentLayoutId(
2079 groupId, privateLayout, layoutId, parentLayoutId);
2080
2081 Date now = new Date();
2082
2083 Layout layout = layoutPersistence.findByG_P_L(
2084 groupId, privateLayout, layoutId);
2085
2086 if (parentLayoutId != layout.getParentLayoutId()) {
2087 int priority = layoutLocalServiceHelper.getNextPriority(
2088 groupId, privateLayout, parentLayoutId,
2089 layout.getSourcePrototypeLayoutUuid(), -1);
2090
2091 layout.setPriority(priority);
2092 }
2093
2094 layout.setModifiedDate(now);
2095 layout.setParentLayoutId(parentLayoutId);
2096
2097 layoutPersistence.update(layout, false);
2098
2099 return layout;
2100 }
2101
2102
2116 @Override
2117 public Layout updateParentLayoutId(long plid, long parentPlid)
2118 throws PortalException, SystemException {
2119
2120 Date now = new Date();
2121
2122 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2123
2124 long parentLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
2125
2126 if (parentPlid > 0) {
2127 Layout parentLayout = layoutPersistence.fetchByPrimaryKey(
2128 parentPlid);
2129
2130 if (parentLayout != null) {
2131 parentLayoutId = parentLayout.getLayoutId();
2132 }
2133 }
2134
2135 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2136 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId);
2137
2138 layoutLocalServiceHelper.validateParentLayoutId(
2139 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2140 parentLayoutId);
2141
2142 if (parentLayoutId != layout.getParentLayoutId()) {
2143 int priority = layoutLocalServiceHelper.getNextPriority(
2144 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId,
2145 layout.getSourcePrototypeLayoutUuid(), -1);
2146
2147 layout.setPriority(priority);
2148 }
2149
2150 layout.setModifiedDate(now);
2151 layout.setParentLayoutId(parentLayoutId);
2152
2153 layoutPersistence.update(layout, false);
2154
2155 return layout;
2156 }
2157
2158
2166 @Override
2167 public void updatePriorities(long groupId, boolean privateLayout)
2168 throws PortalException, SystemException {
2169
2170 List<Layout> layouts = layoutPersistence.findByG_P(
2171 groupId, privateLayout);
2172
2173 for (Layout layout : layouts) {
2174 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2175 layout.getGroupId(), layout.isPrivateLayout(),
2176 layout.getParentLayoutId(),
2177 layout.getSourcePrototypeLayoutUuid(), layout.getPriority());
2178
2179 layout.setPriority(nextPriority);
2180
2181 layoutPersistence.update(layout, false);
2182 }
2183 }
2184
2185
2193 @Override
2194 public Layout updatePriority(Layout layout, int priority)
2195 throws SystemException {
2196
2197 if (layout.getPriority() == priority) {
2198 return layout;
2199 }
2200
2201 int oldPriority = layout.getPriority();
2202
2203 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2204 layout.getGroupId(), layout.isPrivateLayout(),
2205 layout.getParentLayoutId(), layout.getSourcePrototypeLayoutUuid(),
2206 priority);
2207
2208 if (oldPriority == nextPriority) {
2209 return layout;
2210 }
2211
2212 layout.setModifiedDate(new Date());
2213 layout.setPriority(nextPriority);
2214
2215 layoutPersistence.update(layout, false);
2216
2217 List<Layout> layouts = layoutPersistence.findByG_P_P(
2218 layout.getGroupId(), layout.isPrivateLayout(),
2219 layout.getParentLayoutId());
2220
2221 boolean lessThan = false;
2222
2223 if (oldPriority < nextPriority) {
2224 lessThan = true;
2225 }
2226
2227 layouts = ListUtil.sort(
2228 layouts, new LayoutPriorityComparator(layout, lessThan));
2229
2230 priority = 0;
2231
2232 for (Layout curLayout : layouts) {
2233 int curNextPriority = layoutLocalServiceHelper.getNextPriority(
2234 layout.getGroupId(), layout.isPrivateLayout(),
2235 layout.getParentLayoutId(),
2236 curLayout.getSourcePrototypeLayoutUuid(), priority++);
2237
2238 if (curLayout.getPriority() == curNextPriority) {
2239 continue;
2240 }
2241
2242 curLayout.setModifiedDate(layout.getModifiedDate());
2243 curLayout.setPriority(curNextPriority);
2244
2245 layoutPersistence.update(curLayout, false);
2246
2247 if (curLayout.equals(layout)) {
2248 layout = curLayout;
2249 }
2250 }
2251
2252 return layout;
2253 }
2254
2255
2267 @Override
2268 public Layout updatePriority(
2269 long groupId, boolean privateLayout, long layoutId, int priority)
2270 throws PortalException, SystemException {
2271
2272 Layout layout = layoutPersistence.findByG_P_L(
2273 groupId, privateLayout, layoutId);
2274
2275 return updatePriority(layout, priority);
2276 }
2277
2278
2288 @Override
2289 public Layout updatePriority(long plid, int priority)
2290 throws PortalException, SystemException {
2291
2292 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2293
2294 return updatePriority(layout, priority);
2295 }
2296
2297
2300 @Override
2301 public void updateScopedPortletNames(
2302 long groupId, boolean privateLayout, long layoutId,
2303 Map<Locale, String> nameMap, List<Locale> nameMapModifiedLocales)
2304 throws PortalException, SystemException {
2305 }
2306
2307
2322 @Override
2323 public void updateScopedPortletNames(
2324 long groupId, boolean privateLayout, long layoutId, String name,
2325 String languageId)
2326 throws PortalException, SystemException {
2327 }
2328
2329 protected void validateTypeSettingsProperties(
2330 UnicodeProperties typeSettingsProperties)
2331 throws PortalException {
2332
2333 String sitemapChangeFrequency = typeSettingsProperties.getProperty(
2334 "sitemap-changefreq");
2335
2336 if (Validator.isNotNull(sitemapChangeFrequency) &&
2337 !sitemapChangeFrequency.equals("always") &&
2338 !sitemapChangeFrequency.equals("hourly") &&
2339 !sitemapChangeFrequency.equals("daily") &&
2340 !sitemapChangeFrequency.equals("weekly") &&
2341 !sitemapChangeFrequency.equals("monthly") &&
2342 !sitemapChangeFrequency.equals("yearly") &&
2343 !sitemapChangeFrequency.equals("never")) {
2344
2345 throw new SitemapChangeFrequencyException();
2346 }
2347
2348 String sitemapInclude = typeSettingsProperties.getProperty(
2349 "sitemap-include");
2350
2351 if (Validator.isNotNull(sitemapInclude) &&
2352 !sitemapInclude.equals("0") && !sitemapInclude.equals("1")) {
2353
2354 throw new SitemapIncludeException();
2355 }
2356
2357 String sitemapPriority = typeSettingsProperties.getProperty(
2358 "sitemap-priority");
2359
2360 if (Validator.isNotNull(sitemapPriority)) {
2361 try {
2362 double priority = Double.parseDouble(sitemapPriority);
2363
2364 if ((priority < 0) || (priority > 1)) {
2365 throw new SitemapPagePriorityException();
2366 }
2367 }
2368 catch (NumberFormatException nfe) {
2369 throw new SitemapPagePriorityException();
2370 }
2371 }
2372 }
2373
2374 @BeanReference(type = LayoutLocalServiceHelper.class)
2375 protected LayoutLocalServiceHelper layoutLocalServiceHelper;
2376
2377 }