001
014
015 package com.liferay.portal.model;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.service.GroupLocalServiceUtil;
020 import com.liferay.portal.service.LayoutLocalServiceUtil;
021 import com.liferay.portal.service.LayoutSetPrototypeLocalServiceUtil;
022 import com.liferay.portal.service.SubscriptionLocalServiceUtil;
023 import com.liferay.portal.service.persistence.LayoutRevisionUtil;
024 import com.liferay.portal.service.persistence.LayoutUtil;
025 import com.liferay.portal.servlet.filters.cache.CacheUtil;
026 import com.liferay.portal.util.PortletKeys;
027
028 import java.util.Date;
029
030
034 public class PortletPreferencesModelListener
035 extends BaseModelListener<PortletPreferences> {
036
037 @Override
038 public void onAfterRemove(PortletPreferences portletPreferences) {
039 clearCache(portletPreferences);
040
041 deleteSubscriptions(portletPreferences);
042 }
043
044 @Override
045 public void onAfterUpdate(PortletPreferences portletPreferences) {
046 clearCache(portletPreferences);
047
048 updateLayout(portletPreferences);
049 }
050
051 protected void clearCache(PortletPreferences portletPreferences) {
052 if (portletPreferences == null) {
053 return;
054 }
055
056 try {
057 long companyId = 0;
058
059 Layout layout = LayoutUtil.fetchByPrimaryKey(
060 portletPreferences.getPlid());
061
062 if ((layout != null) && !layout.isPrivateLayout()) {
063 companyId = layout.getCompanyId();
064 }
065 else {
066 LayoutRevision layoutRevision =
067 LayoutRevisionUtil.fetchByPrimaryKey(
068 portletPreferences.getPlid());
069
070 if ((layoutRevision != null) &&
071 !layoutRevision.isPrivateLayout()) {
072
073 companyId = layoutRevision.getCompanyId();
074 }
075 }
076
077 if (companyId > 0) {
078 CacheUtil.clearCache(companyId);
079 }
080 }
081 catch (Exception e) {
082 CacheUtil.clearCache();
083 }
084 }
085
086 protected void deleteSubscriptions(PortletPreferences portletPreferences) {
087 if (portletPreferences == null) {
088 return;
089 }
090
091 try {
092 SubscriptionLocalServiceUtil.deleteSubscriptions(
093 portletPreferences.getCompanyId(),
094 portletPreferences.getModelClassName(),
095 portletPreferences.getPortletPreferencesId());
096 }
097 catch (Exception e) {
098 _log.error("Unable to delete subscriptions", e);
099 }
100 }
101
102 protected void updateLayout(PortletPreferences portletPreferences) {
103 try {
104 if ((portletPreferences.getOwnerType() ==
105 PortletKeys.PREFS_OWNER_TYPE_GROUP) &&
106 (portletPreferences.getOwnerId() > 0)) {
107
108 Group group = GroupLocalServiceUtil.fetchGroup(
109 portletPreferences.getOwnerId());
110
111 if (group == null) {
112 return;
113 }
114
115 String className = group.getClassName();
116
117 if (!className.equals(LayoutSetPrototype.class.getName())) {
118 return;
119 }
120
121 LayoutSetPrototype layoutSetPrototype =
122 LayoutSetPrototypeLocalServiceUtil.fetchLayoutSetPrototype(
123 group.getClassPK());
124
125 if (layoutSetPrototype == null) {
126 return;
127 }
128
129 layoutSetPrototype.setModifiedDate(new Date());
130
131 LayoutSetPrototypeLocalServiceUtil.updateLayoutSetPrototype(
132 layoutSetPrototype);
133 }
134 else if ((portletPreferences.getOwnerType() ==
135 PortletKeys.PREFS_OWNER_TYPE_LAYOUT) &&
136 (portletPreferences.getPlid() > 0)) {
137
138 Layout layout = LayoutLocalServiceUtil.fetchLayout(
139 portletPreferences.getPlid());
140
141 if (layout == null) {
142 return;
143 }
144
145 layout.setModifiedDate(new Date());
146
147 LayoutLocalServiceUtil.updateLayout(layout);
148 }
149 }
150 catch (Exception e) {
151 _log.error("Unable to update the layout's modified date", e);
152 }
153 }
154
155 private static final Log _log = LogFactoryUtil.getLog(
156 PortletPreferencesModelListener.class);
157
158 }