001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.LocaleException;
018 import com.liferay.portal.NoSuchLayoutException;
019 import com.liferay.portal.RequiredLayoutException;
020 import com.liferay.portal.SitemapChangeFrequencyException;
021 import com.liferay.portal.SitemapIncludeException;
022 import com.liferay.portal.SitemapPagePriorityException;
023 import com.liferay.portal.kernel.bean.BeanReference;
024 import com.liferay.portal.kernel.dao.orm.QueryUtil;
025 import com.liferay.portal.kernel.exception.PortalException;
026 import com.liferay.portal.kernel.exception.SystemException;
027 import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
028 import com.liferay.portal.kernel.lar.MissingReferences;
029 import com.liferay.portal.kernel.lar.PortletDataException;
030 import com.liferay.portal.kernel.systemevent.SystemEvent;
031 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntry;
032 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntryThreadLocal;
033 import com.liferay.portal.kernel.util.ArrayUtil;
034 import com.liferay.portal.kernel.util.Constants;
035 import com.liferay.portal.kernel.util.FileUtil;
036 import com.liferay.portal.kernel.util.GetterUtil;
037 import com.liferay.portal.kernel.util.ListUtil;
038 import com.liferay.portal.kernel.util.LocaleUtil;
039 import com.liferay.portal.kernel.util.ParamUtil;
040 import com.liferay.portal.kernel.util.StringBundler;
041 import com.liferay.portal.kernel.util.StringPool;
042 import com.liferay.portal.kernel.util.StringUtil;
043 import com.liferay.portal.kernel.util.UnicodeProperties;
044 import com.liferay.portal.kernel.util.Validator;
045 import com.liferay.portal.kernel.workflow.WorkflowConstants;
046 import com.liferay.portal.lar.LayoutExporter;
047 import com.liferay.portal.lar.LayoutImporter;
048 import com.liferay.portal.lar.PortletExporter;
049 import com.liferay.portal.lar.PortletImporter;
050 import com.liferay.portal.lar.backgroundtask.BackgroundTaskContextMapFactory;
051 import com.liferay.portal.lar.backgroundtask.LayoutExportBackgroundTaskExecutor;
052 import com.liferay.portal.lar.backgroundtask.LayoutImportBackgroundTaskExecutor;
053 import com.liferay.portal.lar.backgroundtask.PortletExportBackgroundTaskExecutor;
054 import com.liferay.portal.lar.backgroundtask.PortletImportBackgroundTaskExecutor;
055 import com.liferay.portal.model.BackgroundTask;
056 import com.liferay.portal.model.Group;
057 import com.liferay.portal.model.GroupConstants;
058 import com.liferay.portal.model.Layout;
059 import com.liferay.portal.model.LayoutConstants;
060 import com.liferay.portal.model.LayoutFriendlyURL;
061 import com.liferay.portal.model.LayoutPrototype;
062 import com.liferay.portal.model.LayoutReference;
063 import com.liferay.portal.model.LayoutSet;
064 import com.liferay.portal.model.LayoutSetPrototype;
065 import com.liferay.portal.model.LayoutTypePortlet;
066 import com.liferay.portal.model.PortletConstants;
067 import com.liferay.portal.model.ResourceConstants;
068 import com.liferay.portal.model.ResourcePermission;
069 import com.liferay.portal.model.SystemEventConstants;
070 import com.liferay.portal.model.User;
071 import com.liferay.portal.model.UserGroup;
072 import com.liferay.portal.model.impl.VirtualLayout;
073 import com.liferay.portal.service.ServiceContext;
074 import com.liferay.portal.service.base.LayoutLocalServiceBaseImpl;
075 import com.liferay.portal.util.PortalUtil;
076 import com.liferay.portal.util.PropsValues;
077 import com.liferay.portal.util.comparator.LayoutComparator;
078 import com.liferay.portal.util.comparator.LayoutPriorityComparator;
079 import com.liferay.portlet.dynamicdatalists.RecordSetDuplicateRecordSetKeyException;
080 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateStructureKeyException;
081 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
082 import com.liferay.portlet.sites.util.Sites;
083 import com.liferay.portlet.sites.util.SitesUtil;
084
085 import java.io.File;
086 import java.io.IOException;
087 import java.io.InputStream;
088 import java.io.Serializable;
089
090 import java.util.ArrayList;
091 import java.util.Date;
092 import java.util.HashMap;
093 import java.util.HashSet;
094 import java.util.LinkedHashSet;
095 import java.util.List;
096 import java.util.Locale;
097 import java.util.Map;
098 import java.util.Set;
099
100
115 public class LayoutLocalServiceImpl extends LayoutLocalServiceBaseImpl {
116
117
124 public static String getCounterName(long groupId, boolean privateLayout) {
125 StringBundler sb = new StringBundler();
126
127 sb.append(Layout.class.getName());
128 sb.append(StringPool.POUND);
129 sb.append(groupId);
130 sb.append(StringPool.POUND);
131 sb.append(privateLayout);
132
133 return sb.toString();
134 }
135
136
196 @Override
197 public Layout addLayout(
198 long userId, long groupId, boolean privateLayout,
199 long parentLayoutId, Map<Locale, String> nameMap,
200 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
201 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
202 String type, boolean hidden, String friendlyURL,
203 ServiceContext serviceContext)
204 throws PortalException, SystemException {
205
206 Map<Locale, String> friendlyURLMap = new HashMap<Locale, String>();
207
208 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
209
210 return addLayout(
211 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
212 descriptionMap, keywordsMap, robotsMap, type, StringPool.BLANK,
213 hidden, friendlyURLMap, serviceContext);
214 }
215
216
268 @Override
269 public Layout addLayout(
270 long userId, long groupId, boolean privateLayout,
271 long parentLayoutId, Map<Locale, String> nameMap,
272 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
273 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
274 String type, String typeSettings, boolean hidden,
275 Map<Locale, String> friendlyURLMap, ServiceContext serviceContext)
276 throws PortalException, SystemException {
277
278
279
280 User user = userPersistence.findByPrimaryKey(userId);
281 long layoutId = getNextLayoutId(groupId, privateLayout);
282 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
283 groupId, privateLayout, parentLayoutId);
284 String name = nameMap.get(LocaleUtil.getSiteDefault());
285 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
286 groupId, privateLayout, layoutId, name, friendlyURLMap);
287
288 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
289
290 int priority = layoutLocalServiceHelper.getNextPriority(
291 groupId, privateLayout, parentLayoutId, null, -1);
292
293 layoutLocalServiceHelper.validate(
294 groupId, privateLayout, layoutId, parentLayoutId, name, type,
295 hidden, friendlyURLMap);
296
297 Date now = new Date();
298
299 long plid = counterLocalService.increment();
300
301 Layout layout = layoutPersistence.create(plid);
302
303 layout.setUuid(serviceContext.getUuid());
304 layout.setGroupId(groupId);
305 layout.setCompanyId(user.getCompanyId());
306 layout.setUserId(user.getUserId());
307 layout.setUserName(user.getFullName());
308 layout.setCreateDate(serviceContext.getCreateDate(now));
309 layout.setModifiedDate(serviceContext.getModifiedDate(now));
310 layout.setPrivateLayout(privateLayout);
311 layout.setLayoutId(layoutId);
312 layout.setParentLayoutId(parentLayoutId);
313 layout.setNameMap(nameMap);
314 layout.setTitleMap(titleMap);
315 layout.setDescriptionMap(descriptionMap);
316 layout.setKeywordsMap(keywordsMap);
317 layout.setRobotsMap(robotsMap);
318 layout.setType(type);
319 layout.setHidden(hidden);
320 layout.setFriendlyURL(friendlyURL);
321 layout.setPriority(priority);
322
323 boolean layoutUpdateable = ParamUtil.getBoolean(
324 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
325
326 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
327
328 typeSettingsProperties.fastLoad(typeSettings);
329
330 if (!layoutUpdateable) {
331 typeSettingsProperties.put(
332 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
333 }
334
335 if (privateLayout) {
336 typeSettingsProperties.put(
337 "privateLayout", String.valueOf(privateLayout));
338 }
339
340 validateTypeSettingsProperties(typeSettingsProperties);
341
342 layout.setTypeSettingsProperties(typeSettingsProperties);
343
344 String layoutPrototypeUuid = ParamUtil.getString(
345 serviceContext, "layoutPrototypeUuid");
346 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
347 serviceContext, "layoutPrototypeLinkEnabled",
348 PropsValues.LAYOUT_PROTOTYPE_LINK_ENABLED_DEFAULT);
349
350 if (Validator.isNotNull(layoutPrototypeUuid)) {
351 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
352 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
353 }
354
355 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
356 LayoutTypePortlet layoutTypePortlet =
357 (LayoutTypePortlet)layout.getLayoutType();
358
359 if (Validator.isNull(layoutTypePortlet.getLayoutTemplateId())) {
360 layoutTypePortlet.setLayoutTemplateId(
361 0, PropsValues.LAYOUT_DEFAULT_TEMPLATE_ID, false);
362 }
363 }
364
365 layout.setExpandoBridgeAttributes(serviceContext);
366
367 layoutPersistence.update(layout);
368
369 if (Validator.isNotNull(layoutPrototypeUuid) &&
370 !layoutPrototypeLinkEnabled) {
371
372 LayoutPrototype layoutPrototype =
373 layoutPrototypeLocalService.
374 getLayoutPrototypeByUuidAndCompanyId(
375 layoutPrototypeUuid, layout.getCompanyId());
376
377 try {
378 SitesUtil.applyLayoutPrototype(
379 layoutPrototype, layout, layoutPrototypeLinkEnabled);
380 }
381 catch (PortalException pe) {
382 throw pe;
383 }
384 catch (SystemException se) {
385 throw se;
386 }
387 catch (Exception e) {
388 throw new SystemException(e);
389 }
390 }
391
392
393
394 boolean addGroupPermissions = true;
395
396 Group group = groupLocalService.getGroup(groupId);
397
398 if (privateLayout && group.isUser()) {
399 addGroupPermissions = false;
400 }
401
402 boolean addGuestPermissions = false;
403
404 if (!privateLayout ||
405 type.equals(LayoutConstants.TYPE_CONTROL_PANEL) ||
406 group.isLayoutSetPrototype()) {
407
408 addGuestPermissions = true;
409 }
410
411 resourceLocalService.addResources(
412 user.getCompanyId(), groupId, user.getUserId(),
413 Layout.class.getName(), layout.getPlid(), false,
414 addGroupPermissions, addGuestPermissions);
415
416
417
418 groupLocalService.updateSite(groupId, true);
419
420
421
422 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
423 user.getUserId(), user.getCompanyId(), groupId, plid, privateLayout,
424 friendlyURLMap, serviceContext);
425
426
427
428 layoutSetLocalService.updatePageCount(groupId, privateLayout);
429
430 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
431 groupId, privateLayout);
432
433 layout.setLayoutSet(layoutSet);
434
435
436
437 if (PropsValues.LAYOUT_COMMENTS_ENABLED) {
438 mbMessageLocalService.addDiscussionMessage(
439 userId, user.getFullName(), groupId, Layout.class.getName(),
440 plid, WorkflowConstants.ACTION_PUBLISH);
441 }
442
443 return layout;
444 }
445
446
502 @Override
503 public Layout addLayout(
504 long userId, long groupId, boolean privateLayout,
505 long parentLayoutId, String name, String title, String description,
506 String type, boolean hidden, String friendlyURL,
507 ServiceContext serviceContext)
508 throws PortalException, SystemException {
509
510 Locale locale = LocaleUtil.getSiteDefault();
511
512 Map<Locale, String> nameMap = new HashMap<Locale, String>();
513
514 nameMap.put(locale, name);
515
516 Map<Locale, String> titleMap = new HashMap<Locale, String>();
517
518 titleMap.put(locale, title);
519
520 Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
521
522 descriptionMap.put(locale, description);
523
524 Map<Locale, String> friendlyURLMap = new HashMap<Locale, String>();
525
526 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
527
528 return addLayout(
529 userId, groupId, privateLayout, parentLayoutId, nameMap, titleMap,
530 descriptionMap, new HashMap<Locale, String>(),
531 new HashMap<Locale, String>(), type, StringPool.BLANK, hidden,
532 friendlyURLMap, serviceContext);
533 }
534
535
545 @Override
546 @SystemEvent(
547 action = SystemEventConstants.ACTION_SKIP,
548 type = SystemEventConstants.TYPE_DELETE)
549 public void deleteLayout(
550 Layout layout, boolean updateLayoutSet,
551 ServiceContext serviceContext)
552 throws PortalException, SystemException {
553
554
555
556 if (layout.getParentLayoutId() ==
557 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
558
559 List<Layout> rootLayouts = layoutPersistence.findByG_P_P(
560 layout.getGroupId(), layout.isPrivateLayout(),
561 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, 0, 2);
562
563 if (rootLayouts.size() > 1) {
564 Layout firstLayout = rootLayouts.get(0);
565
566 if (firstLayout.getLayoutId() == layout.getLayoutId()) {
567 Layout secondLayout = rootLayouts.get(1);
568
569 layoutLocalServiceHelper.validateFirstLayout(secondLayout);
570 }
571 }
572 }
573
574
575
576 List<Layout> childLayouts = layoutPersistence.findByG_P_P(
577 layout.getGroupId(), layout.isPrivateLayout(),
578 layout.getLayoutId());
579
580 for (Layout childLayout : childLayouts) {
581 deleteLayout(childLayout, updateLayoutSet, serviceContext);
582 }
583
584
585
586 layoutFriendlyURLLocalService.deleteLayoutFriendlyURLs(
587 layout.getPlid());
588
589
590
591 portletPreferencesLocalService.deletePortletPreferencesByPlid(
592 layout.getPlid());
593
594
595
596 subscriptionLocalService.deleteSubscriptions(
597 layout.getCompanyId(), Layout.class.getName(), layout.getPlid());
598
599
600
601 ratingsStatsLocalService.deleteStats(
602 Layout.class.getName(), layout.getPlid());
603
604
605
606 long layoutClassNameId = classNameLocalService.getClassNameId(
607 Layout.class);
608
609 List<MDRRuleGroupInstance> mdrRuleGroupInstances =
610 mdrRuleGroupInstancePersistence.findByC_C(
611 layoutClassNameId, layout.getPlid());
612
613 for (MDRRuleGroupInstance mdrRuleGroupInstance :
614 mdrRuleGroupInstances) {
615
616 mdrRuleGroupInstanceLocalService.deleteMDRRuleGroupInstance(
617 mdrRuleGroupInstance);
618 }
619
620
621
622 mbMessageLocalService.deleteDiscussionMessages(
623 Layout.class.getName(), layout.getPlid());
624
625
626
627 journalArticleLocalService.deleteLayoutArticleReferences(
628 layout.getGroupId(), layout.getUuid());
629
630
631
632 journalContentSearchLocalService.deleteLayoutContentSearches(
633 layout.getGroupId(), layout.isPrivateLayout(),
634 layout.getLayoutId());
635
636
637
638 expandoRowLocalService.deleteRows(layout.getPlid());
639
640
641
642 imageLocalService.deleteImage(layout.getIconImageId());
643
644
645
646 Group scopeGroup = layout.getScopeGroup();
647
648 if (scopeGroup != null) {
649 groupLocalService.deleteGroup(scopeGroup.getGroupId());
650 }
651
652
653
654 String primKey =
655 layout.getPlid() + PortletConstants.LAYOUT_SEPARATOR + "%";
656
657 List<ResourcePermission> resourcePermissions =
658 resourcePermissionPersistence.findByC_LikeP(
659 layout.getCompanyId(), primKey);
660
661 for (ResourcePermission resourcePermission : resourcePermissions) {
662 resourcePermissionLocalService.deleteResourcePermission(
663 resourcePermission);
664 }
665
666 resourceLocalService.deleteResource(
667 layout.getCompanyId(), Layout.class.getName(),
668 ResourceConstants.SCOPE_INDIVIDUAL, layout.getPlid());
669
670
671
672 layoutPersistence.remove(layout);
673
674
675
676 if (updateLayoutSet) {
677 layoutSetLocalService.updatePageCount(
678 layout.getGroupId(), layout.isPrivateLayout());
679 }
680
681
682
683 SystemEventHierarchyEntry systemEventHierarchyEntry =
684 SystemEventHierarchyEntryThreadLocal.peek();
685
686 if ((systemEventHierarchyEntry != null) &&
687 systemEventHierarchyEntry.hasTypedModel(
688 Layout.class.getName(), layout.getPlid())) {
689
690 systemEventHierarchyEntry.setExtraDataValue(
691 "privateLayout", StringUtil.valueOf(layout.isPrivateLayout()));
692 }
693 }
694
695
707 @Override
708 public void deleteLayout(
709 long groupId, boolean privateLayout, long layoutId,
710 ServiceContext serviceContext)
711 throws PortalException, SystemException {
712
713 Layout layout = layoutPersistence.findByG_P_L(
714 groupId, privateLayout, layoutId);
715
716 deleteLayout(layout, true, serviceContext);
717 }
718
719
729 @Override
730 public void deleteLayout(long plid, ServiceContext serviceContext)
731 throws PortalException, SystemException {
732
733 Layout layout = layoutPersistence.findByPrimaryKey(plid);
734
735 deleteLayout(layout, true, serviceContext);
736 }
737
738
753 @Override
754 public void deleteLayouts(
755 long groupId, boolean privateLayout, ServiceContext serviceContext)
756 throws PortalException, SystemException {
757
758
759
760 List<Layout> layouts = layoutPersistence.findByG_P_P(
761 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
762 QueryUtil.ALL_POS, QueryUtil.ALL_POS,
763 new LayoutPriorityComparator(false));
764
765 for (Layout layout : layouts) {
766 try {
767 deleteLayout(layout, false, serviceContext);
768 }
769 catch (NoSuchLayoutException nsle) {
770 }
771 }
772
773
774
775 if (GetterUtil.getBoolean(
776 serviceContext.getAttribute("updatePageCount"), true)) {
777
778 layoutSetLocalService.updatePageCount(groupId, privateLayout);
779 }
780
781
782
783 counterLocalService.reset(getCounterName(groupId, privateLayout));
784 }
785
786
803 @Override
804 public byte[] exportLayouts(
805 long groupId, boolean privateLayout, long[] layoutIds,
806 Map<String, String[]> parameterMap, Date startDate, Date endDate)
807 throws PortalException, SystemException {
808
809 File file = exportLayoutsAsFile(
810 groupId, privateLayout, layoutIds, parameterMap, startDate,
811 endDate);
812
813 try {
814 return FileUtil.getBytes(file);
815 }
816 catch (IOException ioe) {
817 throw new SystemException(ioe);
818 }
819 finally {
820 file.delete();
821 }
822 }
823
824
840 @Override
841 public byte[] exportLayouts(
842 long groupId, boolean privateLayout,
843 Map<String, String[]> parameterMap, Date startDate, Date endDate)
844 throws PortalException, SystemException {
845
846 return exportLayouts(
847 groupId, privateLayout, null, parameterMap, startDate, endDate);
848 }
849
850
868 @Override
869 public File exportLayoutsAsFile(
870 long groupId, boolean privateLayout, long[] layoutIds,
871 Map<String, String[]> parameterMap, Date startDate, Date endDate)
872 throws PortalException, SystemException {
873
874 try {
875 LayoutExporter layoutExporter = new LayoutExporter();
876
877 return layoutExporter.exportLayoutsAsFile(
878 groupId, privateLayout, layoutIds, parameterMap, startDate,
879 endDate);
880 }
881 catch (PortalException pe) {
882 throw pe;
883 }
884 catch (SystemException se) {
885 throw se;
886 }
887 catch (Exception e) {
888 throw new SystemException(e);
889 }
890 }
891
892 @Override
893 public long exportLayoutsAsFileInBackground(
894 long userId, String taskName, long groupId, boolean privateLayout,
895 long[] layoutIds, Map<String, String[]> parameterMap,
896 Date startDate, Date endDate, String fileName)
897 throws PortalException, SystemException {
898
899 Map<String, Serializable> taskContextMap =
900 BackgroundTaskContextMapFactory.buildTaskContextMap(
901 userId, groupId, privateLayout, layoutIds, parameterMap,
902 Constants.EXPORT, startDate, endDate, fileName);
903
904 BackgroundTask backgroundTask =
905 backgroundTaskLocalService.addBackgroundTask(
906 userId, groupId, taskName, null,
907 LayoutExportBackgroundTaskExecutor.class, taskContextMap,
908 new ServiceContext());
909
910 return backgroundTask.getBackgroundTaskId();
911 }
912
913
931 @Override
932 public byte[] exportPortletInfo(
933 long plid, long groupId, String portletId,
934 Map<String, String[]> parameterMap, Date startDate, Date endDate)
935 throws PortalException, SystemException {
936
937 File file = exportPortletInfoAsFile(
938 plid, groupId, portletId, parameterMap, startDate, endDate);
939
940 try {
941 return FileUtil.getBytes(file);
942 }
943 catch (IOException ioe) {
944 throw new SystemException(ioe);
945 }
946 finally {
947 file.delete();
948 }
949 }
950
951 @Override
952 public byte[] exportPortletInfo(
953 long companyId, String portletId,
954 Map<String, String[]> parameterMap, Date startDate, Date endDate)
955 throws PortalException, SystemException {
956
957 File file = exportPortletInfoAsFile(
958 companyId, portletId, parameterMap, startDate, endDate);
959
960 try {
961 return FileUtil.getBytes(file);
962 }
963 catch (IOException ioe) {
964 throw new SystemException(ioe);
965 }
966 finally {
967 file.delete();
968 }
969 }
970
971
989 @Override
990 public File exportPortletInfoAsFile(
991 long plid, long groupId, String portletId,
992 Map<String, String[]> parameterMap, Date startDate, Date endDate)
993 throws PortalException, SystemException {
994
995 try {
996 PortletExporter portletExporter = new PortletExporter();
997
998 return portletExporter.exportPortletInfoAsFile(
999 plid, groupId, portletId, parameterMap, startDate, endDate);
1000 }
1001 catch (PortalException pe) {
1002 throw pe;
1003 }
1004 catch (SystemException se) {
1005 throw se;
1006 }
1007 catch (Exception e) {
1008 throw new SystemException(e);
1009 }
1010 }
1011
1012 @Override
1013 public File exportPortletInfoAsFile(
1014 long companyId, String portletId,
1015 Map<String, String[]> parameterMap, Date startDate, Date endDate)
1016 throws PortalException, SystemException {
1017
1018 Group companyGroup = groupLocalService.getCompanyGroup(companyId);
1019 Group controlPanelGroup = groupPersistence.findByC_F(
1020 companyId, GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
1021
1022 Layout controlPanelLayout = layoutPersistence.findByG_P_T_First(
1023 controlPanelGroup.getGroupId(), true,
1024 LayoutConstants.TYPE_CONTROL_PANEL, null);
1025
1026 return exportPortletInfoAsFile(
1027 controlPanelLayout.getPlid(), companyGroup.getGroupId(), portletId,
1028 parameterMap, startDate, endDate);
1029 }
1030
1031 @Override
1032 public long exportPortletInfoAsFileInBackground(
1033 long userId, String taskName, long plid, long groupId,
1034 String portletId, Map<String, String[]> parameterMap,
1035 Date startDate, Date endDate, String fileName)
1036 throws PortalException, SystemException {
1037
1038 Map<String, Serializable> taskContextMap =
1039 BackgroundTaskContextMapFactory.buildTaskContextMap(
1040 userId, plid, groupId, portletId, parameterMap,
1041 Constants.EXPORT, startDate, endDate, fileName);
1042
1043 BackgroundTask backgroundTask =
1044 backgroundTaskLocalService.addBackgroundTask(
1045 userId, groupId, taskName, null,
1046 PortletExportBackgroundTaskExecutor.class, taskContextMap,
1047 new ServiceContext());
1048
1049 return backgroundTask.getBackgroundTaskId();
1050 }
1051
1052 @Override
1053 public long exportPortletInfoAsFileInBackground(
1054 long userId, String taskName, String portletId,
1055 Map<String, String[]> parameterMap, Date startDate, Date endDate,
1056 String fileName)
1057 throws PortalException, SystemException {
1058
1059 User user = userPersistence.findByPrimaryKey(userId);
1060
1061 Group companyGroup = groupLocalService.getCompanyGroup(
1062 user.getCompanyId());
1063 Group controlPanelGroup = groupPersistence.findByC_F(
1064 user.getCompanyId(), GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
1065
1066 Layout controlPanelLayout = layoutPersistence.findByG_P_T_First(
1067 controlPanelGroup.getGroupId(), true,
1068 LayoutConstants.TYPE_CONTROL_PANEL, null);
1069
1070 return exportPortletInfoAsFileInBackground(
1071 userId, taskName, controlPanelLayout.getPlid(),
1072 companyGroup.getGroupId(), portletId, parameterMap, startDate,
1073 endDate, fileName);
1074 }
1075
1076 @Override
1077 public Layout fetchFirstLayout(
1078 long groupId, boolean privateLayout, long parentLayoutId)
1079 throws SystemException {
1080
1081 return layoutPersistence.fetchByG_P_P_First(
1082 groupId, privateLayout, parentLayoutId,
1083 new LayoutPriorityComparator());
1084 }
1085
1086 @Override
1087 public Layout fetchLayout(
1088 long groupId, boolean privateLayout, long layoutId)
1089 throws SystemException {
1090
1091 return layoutPersistence.fetchByG_P_L(groupId, privateLayout, layoutId);
1092 }
1093
1094 @Override
1095 public Layout fetchLayoutByFriendlyURL(
1096 long groupId, boolean privateLayout, String friendlyURL)
1097 throws SystemException {
1098
1099 return layoutPersistence.fetchByG_P_F(
1100 groupId, privateLayout, friendlyURL);
1101 }
1102
1103
1111 @Override
1112 public long getDefaultPlid(long groupId) throws SystemException {
1113 if (groupId > 0) {
1114 List<Layout> layouts = layoutPersistence.findByGroupId(
1115 groupId, 0, 1);
1116
1117 if (layouts.size() > 0) {
1118 Layout layout = layouts.get(0);
1119
1120 return layout.getPlid();
1121 }
1122 }
1123
1124 return LayoutConstants.DEFAULT_PLID;
1125 }
1126
1127
1136 @Override
1137 public long getDefaultPlid(long groupId, boolean privateLayout)
1138 throws SystemException {
1139
1140 if (groupId > 0) {
1141 List<Layout> layouts = layoutPersistence.findByG_P(
1142 groupId, privateLayout, 0, 1);
1143
1144 if (layouts.size() > 0) {
1145 Layout layout = layouts.get(0);
1146
1147 return layout.getPlid();
1148 }
1149 }
1150
1151 return LayoutConstants.DEFAULT_PLID;
1152 }
1153
1154
1167 @Override
1168 public long getDefaultPlid(
1169 long groupId, boolean privateLayout, String portletId)
1170 throws PortalException, SystemException {
1171
1172 if (groupId > 0) {
1173 List<Layout> layouts = layoutPersistence.findByG_P(
1174 groupId, privateLayout);
1175
1176 for (Layout layout : layouts) {
1177 if (layout.isTypePortlet()) {
1178 LayoutTypePortlet layoutTypePortlet =
1179 (LayoutTypePortlet)layout.getLayoutType();
1180
1181 if (layoutTypePortlet.hasPortletId(portletId)) {
1182 return layout.getPlid();
1183 }
1184 }
1185 }
1186 }
1187
1188 return LayoutConstants.DEFAULT_PLID;
1189 }
1190
1191
1202 @Override
1203 public Layout getFriendlyURLLayout(
1204 long groupId, boolean privateLayout, String friendlyURL)
1205 throws PortalException, SystemException {
1206
1207 if (Validator.isNull(friendlyURL)) {
1208 throw new NoSuchLayoutException();
1209 }
1210
1211 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(friendlyURL);
1212
1213 Layout layout = null;
1214
1215 List<LayoutFriendlyURL> layoutFriendlyURLs =
1216 layoutFriendlyURLPersistence.findByG_P_F(
1217 groupId, privateLayout, friendlyURL, 0, 1);
1218
1219 if (!layoutFriendlyURLs.isEmpty()) {
1220 LayoutFriendlyURL layoutFriendlyURL = layoutFriendlyURLs.get(0);
1221
1222 layout = layoutPersistence.findByPrimaryKey(
1223 layoutFriendlyURL.getPlid());
1224 }
1225
1226 if ((layout == null) &&
1227 friendlyURL.startsWith(StringPool.SLASH) &&
1228 Validator.isNumber(friendlyURL.substring(1))) {
1229
1230 long layoutId = GetterUtil.getLong(friendlyURL.substring(1));
1231
1232 layout = layoutPersistence.fetchByG_P_L(
1233 groupId, privateLayout, layoutId);
1234 }
1235
1236 if (layout == null) {
1237 throw new NoSuchLayoutException();
1238 }
1239
1240 return layout;
1241 }
1242
1243
1254 @Override
1255 public Layout getLayout(long groupId, boolean privateLayout, long layoutId)
1256 throws PortalException, SystemException {
1257
1258 return layoutPersistence.findByG_P_L(groupId, privateLayout, layoutId);
1259 }
1260
1261
1271 @Override
1272 public Layout getLayoutByIconImageId(long iconImageId)
1273 throws PortalException, SystemException {
1274
1275 return layoutPersistence.findByIconImageId(iconImageId);
1276 }
1277
1278
1287 @Override
1288 public List<Layout> getLayouts(long groupId, boolean privateLayout)
1289 throws SystemException {
1290
1291 return layoutPersistence.findByG_P(groupId, privateLayout);
1292 }
1293
1294
1305 @Override
1306 public List<Layout> getLayouts(
1307 long groupId, boolean privateLayout, long parentLayoutId)
1308 throws SystemException {
1309
1310 return layoutPersistence.findByG_P_P(
1311 groupId, privateLayout, parentLayoutId);
1312 }
1313
1314
1338 @Override
1339 public List<Layout> getLayouts(
1340 long groupId, boolean privateLayout, long parentLayoutId,
1341 boolean incomplete, int start, int end)
1342 throws SystemException {
1343
1344 return layoutPersistence.findByG_P_P(
1345 groupId, privateLayout, parentLayoutId, start, end);
1346 }
1347
1348
1360 @Override
1361 public List<Layout> getLayouts(
1362 long groupId, boolean privateLayout, long[] layoutIds)
1363 throws PortalException, SystemException {
1364
1365 List<Layout> layouts = new ArrayList<Layout>();
1366
1367 for (long layoutId : layoutIds) {
1368 Layout layout = getLayout(groupId, privateLayout, layoutId);
1369
1370 layouts.add(layout);
1371 }
1372
1373 return layouts;
1374 }
1375
1376
1387 @Override
1388 public List<Layout> getLayouts(
1389 long groupId, boolean privateLayout, String type)
1390 throws SystemException {
1391
1392 return layoutPersistence.findByG_P_T(groupId, privateLayout, type);
1393 }
1394
1395
1406 @Override
1407 public LayoutReference[] getLayouts(
1408 long companyId, String portletId, String preferencesKey,
1409 String preferencesValue)
1410 throws SystemException {
1411
1412 List<LayoutReference> layoutReferences = layoutFinder.findByC_P_P(
1413 companyId, portletId, preferencesKey, preferencesValue);
1414
1415 return layoutReferences.toArray(
1416 new LayoutReference[layoutReferences.size()]);
1417 }
1418
1419 @Override
1420 public List<Layout> getLayoutsByLayoutPrototypeUuid(
1421 String layoutPrototypeUuid)
1422 throws SystemException {
1423
1424 return layoutPersistence.findByLayoutPrototypeUuid(layoutPrototypeUuid);
1425 }
1426
1427 @Override
1428 public int getLayoutsByLayoutPrototypeUuidCount(String layoutPrototypeUuid)
1429 throws SystemException {
1430
1431 return layoutPersistence.countByLayoutPrototypeUuid(
1432 layoutPrototypeUuid);
1433 }
1434
1435 @Override
1436 public int getLayoutsCount(Group group, boolean privateLayout)
1437 throws PortalException, SystemException {
1438
1439 return getLayoutsCount(group, privateLayout, true);
1440 }
1441
1442 @Override
1443 public int getLayoutsCount(
1444 Group group, boolean privateLayout, boolean includeUserGroups)
1445 throws PortalException, SystemException {
1446
1447 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1448 group.getGroupId(), privateLayout);
1449
1450 int count = layoutSet.getPageCount();
1451
1452 if (!group.isUser() || !includeUserGroups) {
1453 return count;
1454 }
1455
1456 List<UserGroup> userGroups = userPersistence.getUserGroups(
1457 group.getClassPK());
1458
1459 if (!userGroups.isEmpty()) {
1460 long userGroupClassNameId = classNameLocalService.getClassNameId(
1461 UserGroup.class);
1462
1463 for (UserGroup userGroup : userGroups) {
1464 Group userGroupGroup = groupPersistence.findByC_C_C(
1465 group.getCompanyId(), userGroupClassNameId,
1466 userGroup.getUserGroupId());
1467
1468 layoutSet = layoutSetPersistence.findByG_P(
1469 userGroupGroup.getGroupId(), privateLayout);
1470
1471 count += layoutSet.getPageCount();
1472 }
1473 }
1474
1475 return count;
1476 }
1477
1478 @Override
1479 public int getLayoutsCount(User user, boolean privateLayout)
1480 throws PortalException, SystemException {
1481
1482 return getLayoutsCount(user, privateLayout, true);
1483 }
1484
1485 @Override
1486 public int getLayoutsCount(
1487 User user, boolean privateLayout, boolean includeUserGroups)
1488 throws PortalException, SystemException {
1489
1490 long classNameId = classNameLocalService.getClassNameId(User.class);
1491
1492 Group group = groupPersistence.findByC_C_C(
1493 user.getCompanyId(), classNameId, user.getUserId());
1494
1495 return getLayoutsCount(group, privateLayout, includeUserGroups);
1496 }
1497
1498
1506 @Override
1507 public long getNextLayoutId(long groupId, boolean privateLayout)
1508 throws SystemException {
1509
1510 long nextLayoutId = counterLocalService.increment(
1511 getCounterName(groupId, privateLayout));
1512
1513 if (nextLayoutId == 1) {
1514 List<Layout> layouts = layoutPersistence.findByG_P(
1515 groupId, privateLayout, 0, 1, new LayoutComparator());
1516
1517 if (!layouts.isEmpty()) {
1518 Layout layout = layouts.get(0);
1519
1520 nextLayoutId = layout.getLayoutId() + 1;
1521
1522 counterLocalService.reset(
1523 getCounterName(groupId, privateLayout), nextLayoutId);
1524 }
1525 }
1526
1527 return nextLayoutId;
1528 }
1529
1530
1537 @Override
1538 public List<Layout> getNoPermissionLayouts(long roleId)
1539 throws SystemException {
1540
1541 return layoutFinder.findByNoPermissions(roleId);
1542 }
1543
1544
1550 @Override
1551 public List<Layout> getNullFriendlyURLLayouts() throws SystemException {
1552 return layoutFinder.findByNullFriendlyURL();
1553 }
1554
1555 @Override
1556 public Layout getParentLayout(Layout layout)
1557 throws PortalException, SystemException {
1558
1559 Layout parentLayout = null;
1560
1561 if (layout instanceof VirtualLayout) {
1562 VirtualLayout virtualLayout = (VirtualLayout)layout;
1563
1564 Layout sourceLayout = virtualLayout.getSourceLayout();
1565
1566 parentLayout = getLayout(
1567 sourceLayout.getGroupId(), sourceLayout.isPrivateLayout(),
1568 sourceLayout.getParentLayoutId());
1569
1570 parentLayout = new VirtualLayout(parentLayout, layout.getGroup());
1571 }
1572 else {
1573 parentLayout = getLayout(
1574 layout.getGroupId(), layout.isPrivateLayout(),
1575 layout.getParentLayoutId());
1576 }
1577
1578 return parentLayout;
1579 }
1580
1581
1589 @Override
1590 public List<Layout> getScopeGroupLayouts(
1591 long groupId, boolean privateLayout)
1592 throws SystemException {
1593
1594 return layoutFinder.findByScopeGroup(groupId, privateLayout);
1595 }
1596
1597 @Override
1598 public boolean hasLayouts(Group group, boolean privateLayout)
1599 throws PortalException, SystemException {
1600
1601 return hasLayouts(group, privateLayout, true);
1602 }
1603
1604 @Override
1605 public boolean hasLayouts(
1606 Group group, boolean privateLayout, boolean includeUserGroups)
1607 throws PortalException, SystemException {
1608
1609 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
1610 group.getGroupId(), privateLayout);
1611
1612 if (layoutSet.getPageCount() > 0) {
1613 return true;
1614 }
1615
1616 if (!group.isUser() || !includeUserGroups) {
1617 return false;
1618 }
1619
1620 List<UserGroup> userGroups = userPersistence.getUserGroups(
1621 group.getClassPK());
1622
1623 if (!userGroups.isEmpty()) {
1624 long userGroupClassNameId = classNameLocalService.getClassNameId(
1625 UserGroup.class);
1626
1627 for (UserGroup userGroup : userGroups) {
1628 Group userGroupGroup = groupPersistence.findByC_C_C(
1629 group.getCompanyId(), userGroupClassNameId,
1630 userGroup.getUserGroupId());
1631
1632 layoutSet = layoutSetPersistence.findByG_P(
1633 userGroupGroup.getGroupId(), privateLayout);
1634
1635 if (layoutSet.getPageCount() > 0) {
1636 return true;
1637 }
1638 }
1639 }
1640
1641 return false;
1642 }
1643
1644
1655 @Override
1656 public boolean hasLayouts(
1657 long groupId, boolean privateLayout, long parentLayoutId)
1658 throws SystemException {
1659
1660 return layoutPersistence.countByG_P_P(
1661 groupId, privateLayout, parentLayoutId) > 0;
1662 }
1663
1664 @Override
1665 public boolean hasLayouts(User user, boolean privateLayout)
1666 throws PortalException, SystemException {
1667
1668 return hasLayouts(user, privateLayout, true);
1669 }
1670
1671 @Override
1672 public boolean hasLayouts(
1673 User user, boolean privateLayout, boolean includeUserGroups)
1674 throws PortalException, SystemException {
1675
1676 long classNameId = classNameLocalService.getClassNameId(User.class);
1677
1678 Group group = groupPersistence.findByC_C_C(
1679 user.getCompanyId(), classNameId, user.getUserId());
1680
1681 return hasLayouts(group, privateLayout, includeUserGroups);
1682 }
1683
1684 @Override
1685 public boolean hasLayoutSetPrototypeLayout(
1686 long layoutSetPrototypeId, String layoutUuid)
1687 throws PortalException, SystemException {
1688
1689 LayoutSetPrototype layoutSetPrototype =
1690 layoutSetPrototypeLocalService.getLayoutSetPrototype(
1691 layoutSetPrototypeId);
1692
1693 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1694 layoutSetPrototype, layoutUuid);
1695 }
1696
1697 @Override
1698 public boolean hasLayoutSetPrototypeLayout(
1699 String layoutSetPrototypeUuid, long companyId, String layoutUuid)
1700 throws PortalException, SystemException {
1701
1702 LayoutSetPrototype layoutSetPrototype =
1703 layoutSetPrototypeLocalService.
1704 getLayoutSetPrototypeByUuidAndCompanyId(
1705 layoutSetPrototypeUuid, companyId);
1706
1707 return layoutLocalServiceHelper.hasLayoutSetPrototypeLayout(
1708 layoutSetPrototype, layoutUuid);
1709 }
1710
1711
1727 @Override
1728 public void importLayouts(
1729 long userId, long groupId, boolean privateLayout,
1730 Map<String, String[]> parameterMap, byte[] bytes)
1731 throws PortalException, SystemException {
1732
1733 importLayouts(
1734 userId, groupId, privateLayout, parameterMap,
1735 new UnsyncByteArrayInputStream(bytes));
1736 }
1737
1738
1754 @Override
1755 public void importLayouts(
1756 long userId, long groupId, boolean privateLayout,
1757 Map<String, String[]> parameterMap, File file)
1758 throws PortalException, SystemException {
1759
1760 try {
1761 LayoutImporter layoutImporter = new LayoutImporter();
1762
1763 layoutImporter.importLayouts(
1764 userId, groupId, privateLayout, parameterMap, file);
1765 }
1766 catch (PortalException pe) {
1767 Throwable cause = pe.getCause();
1768
1769 if (cause instanceof LocaleException) {
1770 throw (PortalException)cause;
1771 }
1772
1773 throw pe;
1774 }
1775 catch (SystemException se) {
1776 throw se;
1777 }
1778 catch (Exception e) {
1779 throw new SystemException(e);
1780 }
1781 }
1782
1783
1799 @Override
1800 public void importLayouts(
1801 long userId, long groupId, boolean privateLayout,
1802 Map<String, String[]> parameterMap, InputStream is)
1803 throws PortalException, SystemException {
1804
1805 File file = null;
1806
1807 try {
1808 file = FileUtil.createTempFile("lar");
1809
1810 FileUtil.write(file, is);
1811
1812 importLayouts(userId, groupId, privateLayout, parameterMap, file);
1813 }
1814 catch (IOException ioe) {
1815 throw new SystemException(ioe);
1816 }
1817 finally {
1818 FileUtil.delete(file);
1819 }
1820 }
1821
1822 @Override
1823 public long importLayoutsInBackground(
1824 long userId, String taskName, long groupId, boolean privateLayout,
1825 Map<String, String[]> parameterMap, File file)
1826 throws PortalException, SystemException {
1827
1828 Map<String, Serializable> taskContextMap =
1829 BackgroundTaskContextMapFactory.buildTaskContextMap(
1830 userId, groupId, privateLayout, null, parameterMap,
1831 Constants.IMPORT, null, null, file.getName());
1832
1833 BackgroundTask backgroundTask =
1834 backgroundTaskLocalService.addBackgroundTask(
1835 userId, groupId, taskName, null,
1836 LayoutImportBackgroundTaskExecutor.class, taskContextMap,
1837 new ServiceContext());
1838
1839 backgroundTaskLocalService.addBackgroundTaskAttachment(
1840 userId, backgroundTask.getBackgroundTaskId(), file.getName(), file);
1841
1842 return backgroundTask.getBackgroundTaskId();
1843 }
1844
1845 @Override
1846 public long importLayoutsInBackground(
1847 long userId, String taskName, long groupId, boolean privateLayout,
1848 Map<String, String[]> parameterMap, InputStream is)
1849 throws PortalException, SystemException {
1850
1851 File file = null;
1852
1853 try {
1854 file = FileUtil.createTempFile("lar");
1855
1856 FileUtil.write(file, is);
1857
1858 return importLayoutsInBackground(
1859 userId, taskName, groupId, privateLayout, parameterMap, file);
1860 }
1861 catch (IOException ioe) {
1862 throw new SystemException(ioe);
1863 }
1864 finally {
1865 FileUtil.delete(file);
1866 }
1867 }
1868
1869
1886 @Override
1887 public void importPortletInfo(
1888 long userId, long plid, long groupId, String portletId,
1889 Map<String, String[]> parameterMap, File file)
1890 throws PortalException, SystemException {
1891
1892 try {
1893 PortletImporter portletImporter = new PortletImporter();
1894
1895 portletImporter.importPortletInfo(
1896 userId, plid, groupId, portletId, parameterMap, file);
1897 }
1898 catch (PortalException pe) {
1899 Throwable cause = pe.getCause();
1900
1901 while (true) {
1902 if (cause == null) {
1903 break;
1904 }
1905
1906 if ((cause instanceof LocaleException) ||
1907 (cause instanceof
1908 RecordSetDuplicateRecordSetKeyException) ||
1909 (cause instanceof
1910 StructureDuplicateStructureKeyException)) {
1911
1912 throw (PortalException)cause;
1913 }
1914
1915 if (cause instanceof PortletDataException) {
1916 cause = cause.getCause();
1917 }
1918 else {
1919 break;
1920 }
1921 }
1922
1923 throw pe;
1924 }
1925 catch (SystemException se) {
1926 throw se;
1927 }
1928 catch (Exception e) {
1929 throw new SystemException(e);
1930 }
1931 }
1932
1933
1950 @Override
1951 public void importPortletInfo(
1952 long userId, long plid, long groupId, String portletId,
1953 Map<String, String[]> parameterMap, InputStream is)
1954 throws PortalException, SystemException {
1955
1956 File file = null;
1957
1958 try {
1959 file = FileUtil.createTempFile("lar");
1960
1961 FileUtil.write(file, is);
1962
1963 importPortletInfo(
1964 userId, plid, groupId, portletId, parameterMap, file);
1965 }
1966 catch (IOException ioe) {
1967 throw new SystemException(ioe);
1968 }
1969 finally {
1970 FileUtil.delete(file);
1971 }
1972 }
1973
1974 @Override
1975 public void importPortletInfo(
1976 long userId, String portletId, Map<String, String[]> parameterMap,
1977 File file)
1978 throws PortalException, SystemException {
1979
1980 User user = userPersistence.findByPrimaryKey(userId);
1981
1982 Group companyGroup = groupLocalService.getCompanyGroup(
1983 user.getCompanyId());
1984
1985 Group controlPanelGroup = groupPersistence.findByC_F(
1986 user.getCompanyId(), GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
1987
1988 Layout controlPanelLayout = layoutPersistence.findByG_P_T_First(
1989 controlPanelGroup.getGroupId(), true,
1990 LayoutConstants.TYPE_CONTROL_PANEL, null);
1991
1992 importPortletInfo(
1993 userId, controlPanelLayout.getPlid(), companyGroup.getGroupId(),
1994 portletId, parameterMap, file);
1995 }
1996
1997 @Override
1998 public void importPortletInfo(
1999 long userId, String portletId, Map<String, String[]> parameterMap,
2000 InputStream is)
2001 throws PortalException, SystemException {
2002
2003 File file = null;
2004
2005 try {
2006 file = FileUtil.createTempFile("lar");
2007
2008 FileUtil.write(file, is);
2009
2010 importPortletInfo(userId, portletId, parameterMap, file);
2011 }
2012 catch (IOException ioe) {
2013 throw new SystemException(ioe);
2014 }
2015 finally {
2016 FileUtil.delete(file);
2017 }
2018 }
2019
2020 @Override
2021 public long importPortletInfoInBackground(
2022 long userId, String taskName, long plid, long groupId,
2023 String portletId, Map<String, String[]> parameterMap, File file)
2024 throws PortalException, SystemException {
2025
2026 Map<String, Serializable> taskContextMap =
2027 BackgroundTaskContextMapFactory.buildTaskContextMap(
2028 userId, plid, groupId, portletId, parameterMap,
2029 Constants.IMPORT, null, null, file.getName());
2030
2031 BackgroundTask backgroundTask =
2032 backgroundTaskLocalService.addBackgroundTask(
2033 userId, groupId, taskName, null,
2034 PortletImportBackgroundTaskExecutor.class, taskContextMap,
2035 new ServiceContext());
2036
2037 backgroundTaskLocalService.addBackgroundTaskAttachment(
2038 userId, backgroundTask.getBackgroundTaskId(), file.getName(), file);
2039
2040 return backgroundTask.getBackgroundTaskId();
2041 }
2042
2043 @Override
2044 public long importPortletInfoInBackground(
2045 long userId, String taskName, long plid, long groupId,
2046 String portletId, Map<String, String[]> parameterMap,
2047 InputStream is)
2048 throws PortalException, SystemException {
2049
2050 File file = null;
2051
2052 try {
2053 file = FileUtil.createTempFile("lar");
2054
2055 FileUtil.write(file, is);
2056
2057 return importPortletInfoInBackground(
2058 userId, taskName, plid, groupId, portletId, parameterMap, file);
2059 }
2060 catch (IOException ioe) {
2061 throw new SystemException(ioe);
2062 }
2063 finally {
2064 FileUtil.delete(file);
2065 }
2066 }
2067
2068 @Override
2069 public long importPortletInfoInBackground(
2070 long userId, String taskName, String portletId,
2071 Map<String, String[]> parameterMap, File file)
2072 throws PortalException, SystemException {
2073
2074 User user = userPersistence.findByPrimaryKey(userId);
2075
2076 Group companyGroup = groupLocalService.getCompanyGroup(
2077 user.getCompanyId());
2078
2079 Group controlPanelGroup = groupPersistence.findByC_F(
2080 user.getCompanyId(), GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
2081
2082 Layout controlPanelLayout = layoutPersistence.findByG_P_T_First(
2083 controlPanelGroup.getGroupId(), true,
2084 LayoutConstants.TYPE_CONTROL_PANEL, null);
2085
2086 return importPortletInfoInBackground(
2087 userId, taskName, controlPanelLayout.getPlid(),
2088 companyGroup.getGroupId(), portletId, parameterMap, file);
2089 }
2090
2091 @Override
2092 public long importPortletInfoInBackground(
2093 long userId, String taskName, String portletId,
2094 Map<String, String[]> parameterMap, InputStream is)
2095 throws PortalException, SystemException {
2096
2097 File file = null;
2098
2099 try {
2100 file = FileUtil.createTempFile("lar");
2101
2102 FileUtil.write(file, is);
2103
2104 return importPortletInfoInBackground(
2105 userId, taskName, portletId, parameterMap, file);
2106 }
2107 catch (IOException ioe) {
2108 throw new SystemException(ioe);
2109 }
2110 finally {
2111 FileUtil.delete(file);
2112 }
2113 }
2114
2115
2130 @Override
2131 public void setLayouts(
2132 long groupId, boolean privateLayout, long parentLayoutId,
2133 long[] layoutIds, ServiceContext serviceContext)
2134 throws PortalException, SystemException {
2135
2136 if (layoutIds == null) {
2137 return;
2138 }
2139
2140 if (parentLayoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2141 if (layoutIds.length < 1) {
2142 throw new RequiredLayoutException(
2143 RequiredLayoutException.AT_LEAST_ONE);
2144 }
2145
2146 Layout layout = layoutPersistence.findByG_P_L(
2147 groupId, privateLayout, layoutIds[0]);
2148
2149 if (!PortalUtil.isLayoutFirstPageable(layout.getType())) {
2150 throw new RequiredLayoutException(
2151 RequiredLayoutException.FIRST_LAYOUT_TYPE);
2152 }
2153 }
2154
2155 Set<Long> layoutIdsSet = new LinkedHashSet<Long>();
2156
2157 for (long layoutId : layoutIds) {
2158 layoutIdsSet.add(layoutId);
2159 }
2160
2161 Set<Long> newLayoutIdsSet = new HashSet<Long>();
2162
2163 List<Layout> layouts = layoutPersistence.findByG_P_P(
2164 groupId, privateLayout, parentLayoutId);
2165
2166 for (Layout layout : layouts) {
2167 if (!layoutIdsSet.contains(layout.getLayoutId())) {
2168 deleteLayout(layout, true, serviceContext);
2169 }
2170 else {
2171 newLayoutIdsSet.add(layout.getLayoutId());
2172 }
2173 }
2174
2175 int priority = 0;
2176
2177 for (long layoutId : layoutIdsSet) {
2178 Layout layout = layoutPersistence.findByG_P_L(
2179 groupId, privateLayout, layoutId);
2180
2181 layout.setPriority(priority++);
2182
2183 layoutPersistence.update(layout);
2184 }
2185
2186 layoutSetLocalService.updatePageCount(groupId, privateLayout);
2187 }
2188
2189
2200 @Override
2201 public Layout updateFriendlyURL(
2202 long plid, String friendlyURL, String languageId)
2203 throws PortalException, SystemException {
2204
2205 Date now = new Date();
2206
2207 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2208
2209 friendlyURL = layoutLocalServiceHelper.getFriendlyURL(
2210 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2211 StringPool.BLANK, friendlyURL);
2212
2213 layoutLocalServiceHelper.validateFriendlyURL(
2214 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2215 friendlyURL);
2216
2217 layoutFriendlyURLLocalService.updateLayoutFriendlyURL(
2218 layout.getUserId(), layout.getCompanyId(), layout.getGroupId(),
2219 layout.getPlid(), layout.isPrivateLayout(), friendlyURL, languageId,
2220 new ServiceContext());
2221
2222 layout.setModifiedDate(now);
2223
2224 String defaultLanguageId = LocaleUtil.toLanguageId(
2225 LocaleUtil.getSiteDefault());
2226
2227 if (languageId.equals(defaultLanguageId)) {
2228 layout.setFriendlyURL(friendlyURL);
2229 }
2230
2231 layoutPersistence.update(layout);
2232
2233 return layout;
2234 }
2235
2236
2278 @Override
2279 public Layout updateLayout(
2280 long groupId, boolean privateLayout, long layoutId,
2281 long parentLayoutId, Map<Locale, String> nameMap,
2282 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2283 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2284 String type, boolean hidden, Map<Locale, String> friendlyURLMap,
2285 Boolean iconImage, byte[] iconBytes, ServiceContext serviceContext)
2286 throws PortalException, SystemException {
2287
2288
2289
2290 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2291 groupId, privateLayout, parentLayoutId);
2292 String name = nameMap.get(LocaleUtil.getSiteDefault());
2293 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
2294 groupId, privateLayout, layoutId, name, friendlyURLMap);
2295
2296 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
2297
2298 layoutLocalServiceHelper.validate(
2299 groupId, privateLayout, layoutId, parentLayoutId, name, type,
2300 hidden, friendlyURLMap);
2301
2302 layoutLocalServiceHelper.validateParentLayoutId(
2303 groupId, privateLayout, layoutId, parentLayoutId);
2304
2305 Date now = new Date();
2306
2307 Layout layout = layoutPersistence.findByG_P_L(
2308 groupId, privateLayout, layoutId);
2309
2310 if (parentLayoutId != layout.getParentLayoutId()) {
2311 int priority = layoutLocalServiceHelper.getNextPriority(
2312 groupId, privateLayout, parentLayoutId,
2313 layout.getSourcePrototypeLayoutUuid(), -1);
2314
2315 layout.setPriority(priority);
2316 }
2317
2318 layout.setModifiedDate(serviceContext.getModifiedDate(now));
2319 layout.setParentLayoutId(parentLayoutId);
2320 layout.setNameMap(nameMap);
2321 layout.setTitleMap(titleMap);
2322 layout.setDescriptionMap(descriptionMap);
2323 layout.setKeywordsMap(keywordsMap);
2324 layout.setRobotsMap(robotsMap);
2325 layout.setType(type);
2326 layout.setHidden(hidden);
2327 layout.setFriendlyURL(friendlyURL);
2328
2329 if (iconImage != null) {
2330 layout.setIconImage(iconImage.booleanValue());
2331
2332 if (iconImage.booleanValue()) {
2333 long iconImageId = layout.getIconImageId();
2334
2335 if (iconImageId <= 0) {
2336 iconImageId = counterLocalService.increment();
2337
2338 layout.setIconImageId(iconImageId);
2339 }
2340 }
2341 }
2342
2343 boolean layoutUpdateable = ParamUtil.getBoolean(
2344 serviceContext, Sites.LAYOUT_UPDATEABLE, true);
2345
2346 UnicodeProperties typeSettingsProperties =
2347 layout.getTypeSettingsProperties();
2348
2349 typeSettingsProperties.put(
2350 Sites.LAYOUT_UPDATEABLE, String.valueOf(layoutUpdateable));
2351
2352 if (privateLayout) {
2353 typeSettingsProperties.put(
2354 "privateLayout", String.valueOf(privateLayout));
2355 }
2356
2357 layout.setTypeSettingsProperties(typeSettingsProperties);
2358
2359 String layoutPrototypeUuid = ParamUtil.getString(
2360 serviceContext, "layoutPrototypeUuid");
2361 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
2362 serviceContext, "layoutPrototypeLinkEnabled");
2363
2364 if (Validator.isNotNull(layoutPrototypeUuid)) {
2365 layout.setLayoutPrototypeUuid(layoutPrototypeUuid);
2366 layout.setLayoutPrototypeLinkEnabled(layoutPrototypeLinkEnabled);
2367 }
2368
2369 layout.setExpandoBridgeAttributes(serviceContext);
2370
2371 layoutPersistence.update(layout);
2372
2373
2374
2375 if (iconImage != null) {
2376 if (!iconImage.booleanValue()) {
2377 imageLocalService.deleteImage(layout.getIconImageId());
2378 }
2379 else if (ArrayUtil.isNotEmpty(iconBytes)) {
2380 imageLocalService.updateImage(
2381 layout.getIconImageId(), iconBytes);
2382 }
2383 }
2384
2385
2386
2387 layoutFriendlyURLLocalService.updateLayoutFriendlyURLs(
2388 layout.getUserId(), layout.getCompanyId(), layout.getGroupId(),
2389 layout.getPlid(), layout.isPrivateLayout(), friendlyURLMap,
2390 serviceContext);
2391
2392 return layout;
2393 }
2394
2395
2449 @Override
2450 public Layout updateLayout(
2451 long groupId, boolean privateLayout, long layoutId,
2452 long parentLayoutId, Map<Locale, String> nameMap,
2453 Map<Locale, String> titleMap, Map<Locale, String> descriptionMap,
2454 Map<Locale, String> keywordsMap, Map<Locale, String> robotsMap,
2455 String type, boolean hidden, String friendlyURL, Boolean iconImage,
2456 byte[] iconBytes, ServiceContext serviceContext)
2457 throws PortalException, SystemException {
2458
2459 Map<Locale, String> friendlyURLMap = new HashMap<Locale, String>();
2460
2461 friendlyURLMap.put(LocaleUtil.getSiteDefault(), friendlyURL);
2462
2463 return updateLayout(
2464 groupId, privateLayout, layoutId, parentLayoutId, nameMap, titleMap,
2465 descriptionMap, keywordsMap, robotsMap, type, hidden,
2466 friendlyURLMap, iconImage, iconBytes, serviceContext);
2467 }
2468
2469
2483 @Override
2484 public Layout updateLayout(
2485 long groupId, boolean privateLayout, long layoutId,
2486 String typeSettings)
2487 throws PortalException, SystemException {
2488
2489 Date now = new Date();
2490
2491 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
2492
2493 typeSettingsProperties.fastLoad(typeSettings);
2494
2495 validateTypeSettingsProperties(typeSettingsProperties);
2496
2497 Layout layout = layoutPersistence.findByG_P_L(
2498 groupId, privateLayout, layoutId);
2499
2500 layout.setModifiedDate(now);
2501 layout.setTypeSettings(typeSettingsProperties.toString());
2502
2503 layoutPersistence.update(layout);
2504
2505 return layout;
2506 }
2507
2508
2522 @Override
2523 public Layout updateLookAndFeel(
2524 long groupId, boolean privateLayout, long layoutId, String themeId,
2525 String colorSchemeId, String css, boolean wapTheme)
2526 throws PortalException, SystemException {
2527
2528 Date now = new Date();
2529
2530 Layout layout = layoutPersistence.findByG_P_L(
2531 groupId, privateLayout, layoutId);
2532
2533 layout.setModifiedDate(now);
2534
2535 if (wapTheme) {
2536 layout.setWapThemeId(themeId);
2537 layout.setWapColorSchemeId(colorSchemeId);
2538 }
2539 else {
2540 layout.setThemeId(themeId);
2541 layout.setColorSchemeId(colorSchemeId);
2542 layout.setCss(css);
2543 }
2544
2545 layoutPersistence.update(layout);
2546
2547 return layout;
2548 }
2549
2550
2561 @Override
2562 public Layout updateName(Layout layout, String name, String languageId)
2563 throws PortalException, SystemException {
2564
2565 Date now = new Date();
2566
2567 layoutLocalServiceHelper.validateName(name, languageId);
2568
2569 layout.setModifiedDate(now);
2570 layout.setName(name, LocaleUtil.fromLanguageId(languageId));
2571
2572 layoutPersistence.update(layout);
2573
2574 Group group = layout.getGroup();
2575
2576 if (group.isLayoutPrototype()) {
2577 LayoutPrototype layoutPrototype =
2578 layoutPrototypeLocalService.getLayoutPrototype(
2579 group.getClassPK());
2580
2581 layoutPrototype.setModifiedDate(now);
2582 layoutPrototype.setName(
2583 name, LocaleUtil.fromLanguageId(languageId));
2584
2585 layoutPrototypePersistence.update(layoutPrototype);
2586 }
2587
2588 return layout;
2589 }
2590
2591
2606 @Override
2607 public Layout updateName(
2608 long groupId, boolean privateLayout, long layoutId, String name,
2609 String languageId)
2610 throws PortalException, SystemException {
2611
2612 Layout layout = layoutPersistence.findByG_P_L(
2613 groupId, privateLayout, layoutId);
2614
2615 return layoutLocalService.updateName(layout, name, languageId);
2616 }
2617
2618
2630 @Override
2631 public Layout updateName(long plid, String name, String languageId)
2632 throws PortalException, SystemException {
2633
2634 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2635
2636 return layoutLocalService.updateName(layout, name, languageId);
2637 }
2638
2639
2653 @Override
2654 public Layout updateParentLayoutId(
2655 long groupId, boolean privateLayout, long layoutId,
2656 long parentLayoutId)
2657 throws PortalException, SystemException {
2658
2659 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2660 groupId, privateLayout, parentLayoutId);
2661
2662 layoutLocalServiceHelper.validateParentLayoutId(
2663 groupId, privateLayout, layoutId, parentLayoutId);
2664
2665 Date now = new Date();
2666
2667 Layout layout = layoutPersistence.findByG_P_L(
2668 groupId, privateLayout, layoutId);
2669
2670 if (parentLayoutId != layout.getParentLayoutId()) {
2671 int priority = layoutLocalServiceHelper.getNextPriority(
2672 groupId, privateLayout, parentLayoutId,
2673 layout.getSourcePrototypeLayoutUuid(), -1);
2674
2675 layout.setPriority(priority);
2676 }
2677
2678 layout.setModifiedDate(now);
2679 layout.setParentLayoutId(parentLayoutId);
2680
2681 layoutPersistence.update(layout);
2682
2683 return layout;
2684 }
2685
2686
2700 @Override
2701 public Layout updateParentLayoutId(long plid, long parentPlid)
2702 throws PortalException, SystemException {
2703
2704 Date now = new Date();
2705
2706 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2707
2708 long parentLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
2709
2710 if (parentPlid > 0) {
2711 Layout parentLayout = layoutPersistence.fetchByPrimaryKey(
2712 parentPlid);
2713
2714 if (parentLayout != null) {
2715 parentLayoutId = parentLayout.getLayoutId();
2716 }
2717 }
2718
2719 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
2720 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId);
2721
2722 layoutLocalServiceHelper.validateParentLayoutId(
2723 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
2724 parentLayoutId);
2725
2726 if (parentLayoutId != layout.getParentLayoutId()) {
2727 int priority = layoutLocalServiceHelper.getNextPriority(
2728 layout.getGroupId(), layout.isPrivateLayout(), parentLayoutId,
2729 layout.getSourcePrototypeLayoutUuid(), -1);
2730
2731 layout.setPriority(priority);
2732 }
2733
2734 layout.setModifiedDate(now);
2735 layout.setParentLayoutId(parentLayoutId);
2736
2737 layoutPersistence.update(layout);
2738
2739 return layout;
2740 }
2741
2742 @Override
2743 public Layout updateParentLayoutIdAndPriority(
2744 long plid, long parentPlid, int priority)
2745 throws PortalException, SystemException {
2746
2747 Layout layout = updateParentLayoutId(plid, parentPlid);
2748
2749 return updatePriority(layout, priority);
2750 }
2751
2752
2760 @Override
2761 public void updatePriorities(long groupId, boolean privateLayout)
2762 throws PortalException, SystemException {
2763
2764 List<Layout> layouts = layoutPersistence.findByG_P(
2765 groupId, privateLayout);
2766
2767 for (Layout layout : layouts) {
2768 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2769 layout.getGroupId(), layout.isPrivateLayout(),
2770 layout.getParentLayoutId(),
2771 layout.getSourcePrototypeLayoutUuid(), layout.getPriority());
2772
2773 layout.setPriority(nextPriority);
2774
2775 layoutPersistence.update(layout);
2776 }
2777 }
2778
2779
2788 @Override
2789 public Layout updatePriority(Layout layout, int priority)
2790 throws PortalException, SystemException {
2791
2792 if (layout.getPriority() == priority) {
2793 return layout;
2794 }
2795
2796 int oldPriority = layout.getPriority();
2797
2798 int nextPriority = layoutLocalServiceHelper.getNextPriority(
2799 layout.getGroupId(), layout.isPrivateLayout(),
2800 layout.getParentLayoutId(), layout.getSourcePrototypeLayoutUuid(),
2801 priority);
2802
2803 if (oldPriority == nextPriority) {
2804 return layout;
2805 }
2806
2807 layout.setModifiedDate(new Date());
2808 layout.setPriority(nextPriority);
2809
2810 layoutPersistence.update(layout);
2811
2812 List<Layout> layouts = layoutPersistence.findByG_P_P(
2813 layout.getGroupId(), layout.isPrivateLayout(),
2814 layout.getParentLayoutId());
2815
2816 boolean lessThan = false;
2817
2818 if (oldPriority < nextPriority) {
2819 lessThan = true;
2820 }
2821
2822 layouts = ListUtil.sort(
2823 layouts, new LayoutPriorityComparator(layout, lessThan));
2824
2825 if (layout.getParentLayoutId() ==
2826 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
2827
2828 Layout firstLayout = layouts.get(0);
2829
2830 layoutLocalServiceHelper.validateFirstLayout(firstLayout);
2831 }
2832
2833 int newPriority = LayoutConstants.FIRST_PRIORITY;
2834
2835 for (Layout curLayout : layouts) {
2836 int curNextPriority = layoutLocalServiceHelper.getNextPriority(
2837 layout.getGroupId(), layout.isPrivateLayout(),
2838 layout.getParentLayoutId(),
2839 curLayout.getSourcePrototypeLayoutUuid(), newPriority++);
2840
2841 if (curLayout.getPriority() == curNextPriority) {
2842 continue;
2843 }
2844
2845 curLayout.setModifiedDate(layout.getModifiedDate());
2846 curLayout.setPriority(curNextPriority);
2847
2848 layoutPersistence.update(curLayout);
2849
2850 if (curLayout.equals(layout)) {
2851 layout = curLayout;
2852 }
2853 }
2854
2855 return layout;
2856 }
2857
2858
2870 @Override
2871 public Layout updatePriority(
2872 long groupId, boolean privateLayout, long layoutId, int priority)
2873 throws PortalException, SystemException {
2874
2875 Layout layout = layoutPersistence.findByG_P_L(
2876 groupId, privateLayout, layoutId);
2877
2878 return updatePriority(layout, priority);
2879 }
2880
2881
2895 @Override
2896 public Layout updatePriority(
2897 long groupId, boolean privateLayout, long layoutId,
2898 long nextLayoutId, long previousLayoutId)
2899 throws PortalException, SystemException {
2900
2901 Layout layout = getLayout(groupId, privateLayout, layoutId);
2902
2903 int priority = layout.getPriority();
2904
2905 Layout nextLayout = null;
2906
2907 if (nextLayoutId > -1) {
2908 nextLayout = getLayout(groupId, privateLayout, nextLayoutId);
2909 }
2910
2911 Layout previousLayout = null;
2912
2913 if (previousLayoutId > -1) {
2914 previousLayout = getLayout(
2915 groupId, privateLayout, previousLayoutId);
2916 }
2917
2918 if ((nextLayout != null) && (priority > nextLayout.getPriority())) {
2919 priority = nextLayout.getPriority();
2920 }
2921 else if ((previousLayout != null) &&
2922 (priority < previousLayout.getPriority())) {
2923
2924 priority = previousLayout.getPriority();
2925 }
2926
2927 return updatePriority(layout, priority);
2928 }
2929
2930
2940 @Override
2941 public Layout updatePriority(long plid, int priority)
2942 throws PortalException, SystemException {
2943
2944 Layout layout = layoutPersistence.findByPrimaryKey(plid);
2945
2946 return updatePriority(layout, priority);
2947 }
2948
2949
2952 @Override
2953 @SuppressWarnings("unused")
2954 public void updateScopedPortletNames(
2955 long groupId, boolean privateLayout, long layoutId,
2956 Map<Locale, String> nameMap, List<Locale> nameMapModifiedLocales)
2957 throws PortalException, SystemException {
2958 }
2959
2960
2974 @Override
2975 public void updateScopedPortletNames(
2976 long groupId, boolean privateLayout, long layoutId, String name,
2977 String languageId)
2978 throws PortalException, SystemException {
2979 }
2980
2981 @Override
2982 public MissingReferences validateImportLayoutsFile(
2983 long userId, long groupId, boolean privateLayout,
2984 Map<String, String[]> parameterMap, File file)
2985 throws PortalException, SystemException {
2986
2987 try {
2988 LayoutImporter layoutImporter = new LayoutImporter();
2989
2990 return layoutImporter.validateFile(
2991 userId, groupId, privateLayout, parameterMap, file);
2992 }
2993 catch (PortalException pe) {
2994 Throwable cause = pe.getCause();
2995
2996 if (cause instanceof LocaleException) {
2997 throw (PortalException)cause;
2998 }
2999
3000 throw pe;
3001 }
3002 catch (SystemException se) {
3003 throw se;
3004 }
3005 catch (Exception e) {
3006 throw new SystemException(e);
3007 }
3008 }
3009
3010 @Override
3011 public MissingReferences validateImportLayoutsFile(
3012 long userId, long groupId, boolean privateLayout,
3013 Map<String, String[]> parameterMap, InputStream inputStream)
3014 throws PortalException, SystemException {
3015
3016 File file = null;
3017
3018 try {
3019 file = FileUtil.createTempFile("lar");
3020
3021 FileUtil.write(file, inputStream);
3022
3023 return validateImportLayoutsFile(
3024 userId, groupId, privateLayout, parameterMap, file);
3025 }
3026 catch (IOException ioe) {
3027 throw new SystemException(ioe);
3028 }
3029 finally {
3030 FileUtil.delete(file);
3031 }
3032 }
3033
3034 @Override
3035 public MissingReferences validateImportPortletInfo(
3036 long userId, long plid, long groupId, String portletId,
3037 Map<String, String[]> parameterMap, File file)
3038 throws PortalException, SystemException {
3039
3040 try {
3041 PortletImporter portletImporter = new PortletImporter();
3042
3043 return portletImporter.validateFile(
3044 userId, plid, groupId, portletId, parameterMap, file);
3045 }
3046 catch (PortalException pe) {
3047 Throwable cause = pe.getCause();
3048
3049 if (cause instanceof LocaleException) {
3050 throw (PortalException)cause;
3051 }
3052
3053 throw pe;
3054 }
3055 catch (SystemException se) {
3056 throw se;
3057 }
3058 catch (Exception e) {
3059 throw new SystemException(e);
3060 }
3061 }
3062
3063 @Override
3064 public MissingReferences validateImportPortletInfo(
3065 long userId, long plid, long groupId, String portletId,
3066 Map<String, String[]> parameterMap, InputStream inputStream)
3067 throws PortalException, SystemException {
3068
3069 File file = null;
3070
3071 try {
3072 file = FileUtil.createTempFile("lar");
3073
3074 FileUtil.write(file, inputStream);
3075
3076 return validateImportPortletInfo(
3077 userId, plid, groupId, portletId, parameterMap, file);
3078 }
3079 catch (IOException ioe) {
3080 throw new SystemException(ioe);
3081 }
3082 finally {
3083 FileUtil.delete(file);
3084 }
3085 }
3086
3087 protected void validateTypeSettingsProperties(
3088 UnicodeProperties typeSettingsProperties)
3089 throws PortalException {
3090
3091 String sitemapChangeFrequency = typeSettingsProperties.getProperty(
3092 "sitemap-changefreq");
3093
3094 if (Validator.isNotNull(sitemapChangeFrequency) &&
3095 !sitemapChangeFrequency.equals("always") &&
3096 !sitemapChangeFrequency.equals("hourly") &&
3097 !sitemapChangeFrequency.equals("daily") &&
3098 !sitemapChangeFrequency.equals("weekly") &&
3099 !sitemapChangeFrequency.equals("monthly") &&
3100 !sitemapChangeFrequency.equals("yearly") &&
3101 !sitemapChangeFrequency.equals("never")) {
3102
3103 throw new SitemapChangeFrequencyException();
3104 }
3105
3106 String sitemapInclude = typeSettingsProperties.getProperty(
3107 "sitemap-include");
3108
3109 if (Validator.isNotNull(sitemapInclude) &&
3110 !sitemapInclude.equals("0") && !sitemapInclude.equals("1")) {
3111
3112 throw new SitemapIncludeException();
3113 }
3114
3115 String sitemapPriority = typeSettingsProperties.getProperty(
3116 "sitemap-priority");
3117
3118 if (Validator.isNotNull(sitemapPriority)) {
3119 try {
3120 double priority = Double.parseDouble(sitemapPriority);
3121
3122 if ((priority < 0) || (priority > 1)) {
3123 throw new SitemapPagePriorityException();
3124 }
3125 }
3126 catch (NumberFormatException nfe) {
3127 throw new SitemapPagePriorityException();
3128 }
3129 }
3130 }
3131
3132 @BeanReference(type = LayoutLocalServiceHelper.class)
3133 protected LayoutLocalServiceHelper layoutLocalServiceHelper;
3134
3135 }