001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.json.JSONFactoryUtil;
020 import com.liferay.portal.kernel.json.JSONObject;
021 import com.liferay.portal.kernel.util.OrderByComparator;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.model.Subscription;
024 import com.liferay.portal.model.SubscriptionConstants;
025 import com.liferay.portal.model.User;
026 import com.liferay.portal.service.base.SubscriptionLocalServiceBaseImpl;
027 import com.liferay.portal.util.PortalUtil;
028 import com.liferay.portlet.asset.model.AssetEntry;
029 import com.liferay.portlet.messageboards.model.MBMessage;
030 import com.liferay.portlet.messageboards.model.MBThread;
031 import com.liferay.portlet.social.model.SocialActivityConstants;
032
033 import java.util.Date;
034 import java.util.List;
035
036
040 public class SubscriptionLocalServiceImpl
041 extends SubscriptionLocalServiceBaseImpl {
042
043 @Override
044 public Subscription addSubscription(
045 long userId, long groupId, String className, long classPK)
046 throws PortalException, SystemException {
047
048 return addSubscription(
049 userId, groupId, className, classPK,
050 SubscriptionConstants.FREQUENCY_INSTANT);
051 }
052
053 @Override
054 public Subscription addSubscription(
055 long userId, long groupId, String className, long classPK,
056 String frequency)
057 throws PortalException, SystemException {
058
059
060
061 User user = userPersistence.findByPrimaryKey(userId);
062 long classNameId = PortalUtil.getClassNameId(className);
063 Date now = new Date();
064
065 long subscriptionId = counterLocalService.increment();
066
067 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
068 user.getCompanyId(), userId, classNameId, classPK);
069
070 if (subscription == null) {
071 subscription = subscriptionPersistence.create(subscriptionId);
072
073 subscription.setCompanyId(user.getCompanyId());
074 subscription.setUserId(user.getUserId());
075 subscription.setUserName(user.getFullName());
076 subscription.setCreateDate(now);
077 subscription.setModifiedDate(now);
078 subscription.setClassNameId(classNameId);
079 subscription.setClassPK(classPK);
080 subscription.setFrequency(frequency);
081
082 subscriptionPersistence.update(subscription, false);
083 }
084
085 if (groupId > 0) {
086
087
088
089 try {
090 assetEntryLocalService.getEntry(className, classPK);
091 }
092 catch (Exception e) {
093 assetEntryLocalService.updateEntry(
094 userId, groupId, subscription.getCreateDate(),
095 subscription.getModifiedDate(), className, classPK, null, 0,
096 null, null, false, null, null, null, null, null,
097 String.valueOf(groupId), null, null, null, null, 0, 0, null,
098 false);
099 }
100
101
102
103 if (className.equals(MBThread.class.getName())) {
104 MBThread mbThread = mbThreadLocalService.getMBThread(classPK);
105
106 JSONObject extraDataJSONObject =
107 JSONFactoryUtil.createJSONObject();
108
109 extraDataJSONObject.put("threadId", classPK);
110
111 socialActivityLocalService.addActivity(
112 userId, groupId, MBMessage.class.getName(),
113 mbThread.getRootMessageId(),
114 SocialActivityConstants.TYPE_SUBSCRIBE,
115 extraDataJSONObject.toString(), 0);
116 }
117 else {
118 socialActivityLocalService.addActivity(
119 userId, groupId, className, classPK,
120 SocialActivityConstants.TYPE_SUBSCRIBE, StringPool.BLANK,
121 0);
122 }
123 }
124
125 return subscription;
126 }
127
128 @Override
129 public Subscription deleteSubscription(long subscriptionId)
130 throws PortalException, SystemException {
131
132 Subscription subscription = subscriptionPersistence.fetchByPrimaryKey(
133 subscriptionId);
134
135 return deleteSubscription(subscription);
136 }
137
138 @Override
139 public void deleteSubscription(long userId, String className, long classPK)
140 throws PortalException, SystemException {
141
142 User user = userPersistence.findByPrimaryKey(userId);
143 long classNameId = PortalUtil.getClassNameId(className);
144
145 Subscription subscription = subscriptionPersistence.findByC_U_C_C(
146 user.getCompanyId(), userId, classNameId, classPK);
147
148 deleteSubscription(subscription);
149 }
150
151 @Override
152 public Subscription deleteSubscription(Subscription subscription)
153 throws PortalException, SystemException {
154
155
156
157 subscriptionPersistence.remove(subscription);
158
159
160
161 AssetEntry assetEntry = assetEntryPersistence.fetchByC_C(
162 subscription.getClassNameId(), subscription.getClassPK());
163
164 if (assetEntry != null) {
165 String className = PortalUtil.getClassName(
166 subscription.getClassNameId());
167
168 socialActivityLocalService.addActivity(
169 subscription.getUserId(), assetEntry.getGroupId(), className,
170 subscription.getClassPK(),
171 SocialActivityConstants.TYPE_UNSUBSCRIBE, StringPool.BLANK, 0);
172 }
173
174 return subscription;
175 }
176
177 @Override
178 public void deleteSubscriptions(long userId)
179 throws PortalException, SystemException {
180
181 List<Subscription> subscriptions = subscriptionPersistence.findByUserId(
182 userId);
183
184 for (Subscription subscription : subscriptions) {
185 deleteSubscription(subscription);
186 }
187 }
188
189 @Override
190 public void deleteSubscriptions(
191 long companyId, String className, long classPK)
192 throws PortalException, SystemException {
193
194 long classNameId = PortalUtil.getClassNameId(className);
195
196 List<Subscription> subscriptions = subscriptionPersistence.findByC_C_C(
197 companyId, classNameId, classPK);
198
199 for (Subscription subscription : subscriptions) {
200 deleteSubscription(subscription);
201 }
202 }
203
204 @Override
205 public Subscription getSubscription(
206 long companyId, long userId, String className, long classPK)
207 throws PortalException, SystemException {
208
209 long classNameId = PortalUtil.getClassNameId(className);
210
211 return subscriptionPersistence.findByC_U_C_C(
212 companyId, userId, classNameId, classPK);
213 }
214
215 @Override
216 public List<Subscription> getSubscriptions(
217 long companyId, String className, long classPK)
218 throws SystemException {
219
220 long classNameId = PortalUtil.getClassNameId(className);
221
222 return subscriptionPersistence.findByC_C_C(
223 companyId, classNameId, classPK);
224 }
225
226 @Override
227 public List<Subscription> getUserSubscriptions(
228 long userId, int start, int end,
229 OrderByComparator orderByComparator)
230 throws SystemException {
231
232 return subscriptionPersistence.findByUserId(
233 userId, start, end, orderByComparator);
234 }
235
236 @Override
237 public List<Subscription> getUserSubscriptions(
238 long userId, String className)
239 throws SystemException {
240
241 long classNameId = PortalUtil.getClassNameId(className);
242
243 return subscriptionPersistence.findByU_C(userId, classNameId);
244 }
245
246 @Override
247 public int getUserSubscriptionsCount(long userId) throws SystemException {
248 return subscriptionPersistence.countByUserId(userId);
249 }
250
251 @Override
252 public boolean isSubscribed(
253 long companyId, long userId, String className, long classPK)
254 throws SystemException {
255
256 long classNameId = PortalUtil.getClassNameId(className);
257
258 Subscription subscription = subscriptionPersistence.fetchByC_U_C_C(
259 companyId, userId, classNameId, classPK);
260
261 if (subscription != null) {
262 return true;
263 }
264 else {
265 return false;
266 }
267 }
268
269 }