1
22
23 package com.liferay.portlet.messageboards.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29 import com.liferay.portal.kernel.util.DateUtil;
30 import com.liferay.portal.model.User;
31 import com.liferay.portlet.messageboards.model.MBMessage;
32 import com.liferay.portlet.messageboards.model.MBMessageFlag;
33 import com.liferay.portlet.messageboards.model.MBThread;
34 import com.liferay.portlet.messageboards.model.impl.MBMessageFlagImpl;
35 import com.liferay.portlet.messageboards.service.base.MBMessageFlagLocalServiceBaseImpl;
36
37 import java.util.List;
38
39
46 public class MBMessageFlagLocalServiceImpl
47 extends MBMessageFlagLocalServiceBaseImpl {
48
49
52 public void addReadFlags(long userId, List<MBMessage> messages)
53 throws PortalException, SystemException {
54
55 MBMessage message = messages.get(1);
56
57 MBThread thread = message.getThread();
58
59 addReadFlags(userId, thread);
60 }
61
62 public void addReadFlags(long userId, MBThread thread)
63 throws PortalException, SystemException {
64
65 User user = userPersistence.findByPrimaryKey(userId);
66
67 if (user.isDefaultUser()) {
68 return;
69 }
70
71 long messageId = thread.getRootMessageId();
72 int flag = MBMessageFlagImpl.READ_FLAG;
73
74 MBMessageFlag messageFlag = mbMessageFlagPersistence.fetchByU_M_F(
75 userId, messageId, flag);
76
77 if (messageFlag == null) {
78 long messageFlagId = counterLocalService.increment();
79
80 messageFlag = mbMessageFlagPersistence.create(messageFlagId);
81
82 messageFlag.setUserId(userId);
83 messageFlag.setModifiedDate(thread.getLastPostDate());
84 messageFlag.setThreadId(thread.getThreadId());
85 messageFlag.setMessageId(messageId);
86 messageFlag.setFlag(flag);
87
88 mbMessageFlagPersistence.update(messageFlag, false);
89
90 try {
91 mbMessageFlagPersistence.update(messageFlag, false);
92 }
93 catch (SystemException se) {
94 if (_log.isWarnEnabled()) {
95 _log.warn(
96 "Add failed, fetch {userId=" + userId +
97 ", messageId=" + messageId + ",flag=" + flag +
98 "}");
99 }
100
101 messageFlag = mbMessageFlagPersistence.fetchByU_M_F(
102 userId, messageId, flag, false);
103
104 if (messageFlag == null) {
105 throw se;
106 }
107 }
108 }
109
110 if (!DateUtil.equals(
111 messageFlag.getModifiedDate(), thread.getLastPostDate(),
112 true)) {
113
114 messageFlag.setModifiedDate(thread.getLastPostDate());
115
116 mbMessageFlagPersistence.update(messageFlag, false);
117 }
118 }
119
120 public void deleteFlags(long userId) throws SystemException {
121 mbMessageFlagPersistence.removeByUserId(userId);
122 }
123
124 public void deleteThreadFlags(long threadId) throws SystemException {
125 mbMessageFlagPersistence.removeByThreadId(threadId);
126 }
127
128 public MBMessageFlag getReadFlag(long userId, MBThread thread)
129 throws PortalException, SystemException {
130
131 User user = userPersistence.findByPrimaryKey(userId);
132
133 if (user.isDefaultUser()) {
134 return null;
135 }
136
137 return mbMessageFlagPersistence.fetchByU_M_F(
138 userId, thread.getRootMessageId(), MBMessageFlagImpl.READ_FLAG);
139 }
140
141
144 public boolean hasReadFlag(long userId, long messageId)
145 throws PortalException, SystemException {
146
147 MBMessage message = mbMessageLocalService.getMessage(messageId);
148
149 return hasReadFlag(userId, message.getThread());
150 }
151
152 public boolean hasReadFlag(long userId, MBThread thread)
153 throws PortalException, SystemException {
154
155 User user = userPersistence.findByPrimaryKey(userId);
156
157 if (user.isDefaultUser()) {
158 return true;
159 }
160
161 MBMessageFlag messageFlag = mbMessageFlagPersistence.fetchByU_M_F(
162 userId, thread.getRootMessageId(), MBMessageFlagImpl.READ_FLAG);
163
164 if ((messageFlag != null) &&
165 (DateUtil.equals(
166 messageFlag.getModifiedDate(), thread.getLastPostDate(),
167 true))) {
168
169 return true;
170 }
171 else {
172 return false;
173 }
174 }
175
176 private static Log _log =
177 LogFactoryUtil.getLog(MBMessageFlagLocalServiceImpl.class);
178
179 }