001
014
015 package com.liferay.portal.verify;
016
017 import com.liferay.portal.kernel.cache.CacheRegistryUtil;
018 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
020 import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
021 import com.liferay.portal.kernel.dao.orm.Property;
022 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
023 import com.liferay.portal.kernel.exception.PortalException;
024 import com.liferay.portal.kernel.log.Log;
025 import com.liferay.portal.kernel.log.LogFactoryUtil;
026 import com.liferay.portal.kernel.util.ListUtil;
027 import com.liferay.portal.model.Layout;
028 import com.liferay.portal.model.LayoutRevision;
029 import com.liferay.portal.model.LayoutTypePortlet;
030 import com.liferay.portal.model.Portlet;
031 import com.liferay.portal.model.PortletPreferences;
032 import com.liferay.portal.service.LayoutLocalServiceUtil;
033 import com.liferay.portal.service.LayoutRevisionLocalServiceUtil;
034 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
035
036 import java.util.List;
037
038
041 public class VerifyPortletPreferences extends VerifyProcess {
042
043 public static void cleanUpLayoutRevisionPortletPreferences()
044 throws Exception {
045
046 ActionableDynamicQuery actionableDynamicQuery =
047 getPortletPreferencesActionableDynamicQuery();
048
049 actionableDynamicQuery.setParallel(true);
050
051 actionableDynamicQuery.performActions();
052 }
053
054 protected static ActionableDynamicQuery
055 getPortletPreferencesActionableDynamicQuery() {
056
057 ActionableDynamicQuery portletPreferencesActionableDynamicQuery =
058 PortletPreferencesLocalServiceUtil.getActionableDynamicQuery();
059
060 portletPreferencesActionableDynamicQuery.setAddCriteriaMethod(
061 new ActionableDynamicQuery.AddCriteriaMethod() {
062
063 @Override
064 public void addCriteria(DynamicQuery dynamicQuery) {
065 Property plidProperty = PropertyFactoryUtil.forName("plid");
066
067 DynamicQuery layoutRevisionDynamicQuery =
068 LayoutRevisionLocalServiceUtil.dynamicQuery();
069
070 layoutRevisionDynamicQuery.setProjection(
071 ProjectionFactoryUtil.property("layoutRevisionId"));
072
073 dynamicQuery.add(
074 plidProperty.in(layoutRevisionDynamicQuery));
075 }
076
077 });
078 portletPreferencesActionableDynamicQuery.setPerformActionMethod(
079 new ActionableDynamicQuery.
080 PerformActionMethod<PortletPreferences>() {
081
082 @Override
083 public void performAction(PortletPreferences portletPreferences)
084 throws PortalException {
085
086 long layoutRevisionId = portletPreferences.getPlid();
087
088 LayoutRevision layoutRevision =
089 LayoutRevisionLocalServiceUtil.getLayoutRevision(
090 layoutRevisionId);
091
092 Layout layout = LayoutLocalServiceUtil.getLayout(
093 layoutRevision.getPlid());
094
095 if (!layout.isTypePortlet()) {
096 return;
097 }
098
099 LayoutTypePortlet layoutTypePortlet =
100 (LayoutTypePortlet)layout.getLayoutType();
101
102 List<Portlet> portlets = layoutTypePortlet.getAllPortlets();
103
104 List<String> portletIds = ListUtil.toList(
105 portlets, Portlet.PORTLET_ID_ACCESSOR);
106
107 if (portletIds.contains(
108 portletPreferences.getPortletId())) {
109
110 return;
111 }
112
113 if (_log.isWarnEnabled()) {
114 _log.warn(
115 "Removing portlet preferences " +
116 portletPreferences.getPortletPreferencesId());
117 }
118
119 PortletPreferencesLocalServiceUtil.deletePortletPreferences(
120 portletPreferences);
121 }
122
123 });
124
125 return portletPreferencesActionableDynamicQuery;
126 }
127
128 @Override
129 protected void doVerify() throws Exception {
130 CacheRegistryUtil.setActive(true);
131
132 try {
133 cleanUpLayoutRevisionPortletPreferences();
134 }
135 finally {
136 CacheRegistryUtil.setActive(false);
137 }
138 }
139
140 private static final Log _log = LogFactoryUtil.getLog(
141 VerifyPortletPreferences.class);
142
143 }