1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    *
5    *
6    *
7    * The contents of this file are subject to the terms of the Liferay Enterprise
8    * Subscription License ("License"). You may not use this file except in
9    * compliance with the License. You can obtain a copy of the License by
10   * contacting Liferay, Inc. See the License for the specific language governing
11   * permissions and limitations under the License, including but not limited to
12   * distribution rights of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.verify;
24  
25  import com.liferay.portal.kernel.dao.jdbc.DataAccess;
26  import com.liferay.portal.kernel.util.StringPool;
27  import com.liferay.portlet.social.service.SocialActivityLocalServiceUtil;
28  import com.liferay.portlet.social.service.SocialRequestLocalServiceUtil;
29  
30  import java.sql.Connection;
31  import java.sql.PreparedStatement;
32  import java.sql.ResultSet;
33  
34  /**
35   * <a href="VerifySocial.java.html"><b><i>View Source</i></b></a>
36   *
37   * @author Brian Wing Shun Chan
38   */
39  public class VerifySocial extends VerifyProcess {
40  
41      protected void deleteDuplicateActivities() throws Exception {
42          StringBuilder sb = new StringBuilder();
43  
44          sb.append("select distinct sa1.* from SocialActivity sa1 ");
45          sb.append("inner join SocialActivity sa2 on ");
46          sb.append("sa1.activityId != sa2.activityId and ");
47          sb.append("sa1.groupId = sa2.groupId and ");
48          sb.append("sa1.userId = sa2.userId and ");
49          sb.append("sa1.classNameId = sa2.classNameId and ");
50          sb.append("sa1.classPK = sa2.classPK and ");
51          sb.append("sa1.type_ = sa2.type_ and ");
52          sb.append("sa1.extraData = sa2.extraData and ");
53          sb.append("sa1.receiverUserId = sa2.receiverUserId ");
54          sb.append("where sa1.mirrorActivityId = 0 ");
55          sb.append("order by sa1.groupId, sa1.userId, sa1.classNameId, ");
56          sb.append("sa1.classPK, sa1.type_, sa1.extraData, ");
57          sb.append("sa1.receiverUserId, sa1.createDate desc");
58  
59          String sql = sb.toString();
60  
61          Connection con = null;
62          PreparedStatement ps = null;
63          ResultSet rs = null;
64  
65          try {
66              con = DataAccess.getConnection();
67  
68              ps = con.prepareStatement(sql);
69  
70              rs = ps.executeQuery();
71  
72              long groupId = 0;
73              long userId = 0;
74              long classNameId = 0;
75              long classPK = 0;
76              long type = 0;
77              String extraData = StringPool.BLANK;
78              long receiverUserId = 0;
79  
80              while (rs.next()) {
81                  long curActivityId = rs.getLong("activityId");
82                  long curGroupId = rs.getLong("groupId");
83                  long curUserId = rs.getLong("userId");
84                  long curClassNameId = rs.getLong("classNameId");
85                  long curClassPK = rs.getLong("classPK");
86                  long curType = rs.getLong("type_");
87                  String curExtraData = rs.getString("extraData");
88                  long curReceiverUserId = rs.getLong("receiverUserId");
89  
90                  if ((curGroupId == groupId) && (curUserId == userId) &&
91                      (curClassNameId == classNameId) &&
92                      (curClassPK == classPK) && (curType == type) &&
93                      (curExtraData.equals(extraData)) &&
94                      (curReceiverUserId == receiverUserId)) {
95  
96                      SocialActivityLocalServiceUtil.deleteActivity(
97                          curActivityId);
98                  }
99                  else {
100                     groupId = curGroupId;
101                     userId = curUserId;
102                     classNameId = curClassNameId;
103                     classPK = curClassPK;
104                     type = curType;
105                     extraData = curExtraData;
106                     receiverUserId = curReceiverUserId;
107                 }
108             }
109         }
110         finally {
111             DataAccess.cleanUp(con, ps, rs);
112         }
113     }
114 
115     protected void deleteDuplicateRequests() throws Exception {
116         StringBuilder sb = new StringBuilder();
117 
118         sb.append("select distinct sr1.* from SocialRequest sr1 ");
119         sb.append("inner join SocialRequest sr2 on ");
120         sb.append("sr1.requestId != sr2.requestId and ");
121         sb.append("sr1.groupId = sr2.groupId and ");
122         sb.append("sr1.userId = sr2.userId and ");
123         sb.append("sr1.classNameId = sr2.classNameId and ");
124         sb.append("sr1.classPK = sr2.classPK and ");
125         sb.append("sr1.type_ = sr2.type_ and ");
126         sb.append("sr1.extraData = sr2.extraData and ");
127         sb.append("sr1.receiverUserId = sr2.receiverUserId ");
128         sb.append("order by sr1.groupId, sr1.userId, sr1.classNameId, ");
129         sb.append("sr1.classPK, sr1.type_, sr1.extraData, ");
130         sb.append("sr1.receiverUserId, sr1.createDate desc");
131 
132         String sql = sb.toString();
133 
134         Connection con = null;
135         PreparedStatement ps = null;
136         ResultSet rs = null;
137 
138         try {
139             con = DataAccess.getConnection();
140 
141             ps = con.prepareStatement(sql);
142 
143             rs = ps.executeQuery();
144 
145             long groupId = 0;
146             long userId = 0;
147             long classNameId = 0;
148             long classPK = 0;
149             long type = 0;
150             String extraData = StringPool.BLANK;
151             long receiverUserId = 0;
152 
153             while (rs.next()) {
154                 long curRequestId = rs.getLong("requestId");
155                 long curGroupId = rs.getLong("groupId");
156                 long curUserId = rs.getLong("userId");
157                 long curClassNameId = rs.getLong("classNameId");
158                 long curClassPK = rs.getLong("classPK");
159                 long curType = rs.getLong("type_");
160                 String curExtraData = rs.getString("extraData");
161                 long curReceiverUserId = rs.getLong("receiverUserId");
162 
163                 if ((curGroupId == groupId) && (curUserId == userId) &&
164                     (curClassNameId == classNameId) &&
165                     (curClassPK == classPK) && (curType == type) &&
166                     (curExtraData.equals(extraData)) &&
167                     (curReceiverUserId == receiverUserId)) {
168 
169                     SocialRequestLocalServiceUtil.deleteRequest(curRequestId);
170                 }
171                 else {
172                     groupId = curGroupId;
173                     userId = curUserId;
174                     classNameId = curClassNameId;
175                     classPK = curClassPK;
176                     type = curType;
177                     extraData = curExtraData;
178                     receiverUserId = curReceiverUserId;
179                 }
180             }
181         }
182         finally {
183             DataAccess.cleanUp(con, ps, rs);
184         }
185     }
186 
187     protected void doVerify() throws Exception {
188 
189         // Temporarily comment these out because of performance issues. This
190         // verification is not needed because activities can be added while
191         // ensuring a duplicate does not exist. See LEP-6593.
192 
193         //deleteDuplicateActivities();
194         //deleteDuplicateRequests();
195     }
196 
197 }