001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.upgrade.v6_2_0;
016    
017    import com.liferay.portal.kernel.json.JSONException;
018    import com.liferay.portal.kernel.json.JSONFactoryUtil;
019    import com.liferay.portal.kernel.json.JSONObject;
020    import com.liferay.portal.kernel.log.Log;
021    import com.liferay.portal.kernel.log.LogFactoryUtil;
022    import com.liferay.portal.kernel.upgrade.UpgradeProcess;
023    import com.liferay.portal.kernel.util.LoggingTimer;
024    import com.liferay.portal.kernel.util.PortalUtil;
025    import com.liferay.portal.kernel.util.StringBundler;
026    import com.liferay.portal.kernel.util.StringPool;
027    
028    import java.sql.PreparedStatement;
029    import java.sql.ResultSet;
030    import java.sql.SQLException;
031    
032    import java.util.HashMap;
033    import java.util.Map;
034    
035    /**
036     * @author Sergio Sanchez
037     * @author Zsolt Berentey
038     * @author Daniel Sanz
039     */
040    public class UpgradeSocial extends UpgradeProcess {
041    
042            protected String createExtraData(
043                            ExtraDataFactory extraDataFactory, long companyId, long groupId,
044                            long userId, long classNameId, long classPK, int type,
045                            String extraData)
046                    throws Exception {
047    
048                    if (extraDataFactory == null) {
049                            return null;
050                    }
051    
052                    try (PreparedStatement preparedStatement = connection.prepareStatement(
053                                    extraDataFactory.getSQL())) {
054    
055                            extraDataFactory.setModelSQLParameters(
056                                    preparedStatement, groupId, companyId, userId, classNameId,
057                                    classPK, type, extraData);
058    
059                            try (ResultSet resultSet = preparedStatement.executeQuery()) {
060                                    if (resultSet.next()) {
061                                            JSONObject extraDataJSONObject =
062                                                    extraDataFactory.createExtraDataJSONObject(
063                                                            resultSet, extraData);
064    
065                                            return extraDataJSONObject.toString();
066                                    }
067    
068                                    return null;
069                            }
070                    }
071            }
072    
073            protected Map<Long, String> createExtraDataMap(
074                            ExtraDataFactory extraDataFactory)
075                    throws Exception {
076    
077                    Map<Long, String> extraDataMap = new HashMap<>();
078    
079                    StringBundler sb = new StringBundler(4);
080    
081                    sb.append("select activityId, groupId, companyId, userId, ");
082                    sb.append("classNameId, classPK, type_, extraData from ");
083                    sb.append("SocialActivity where ");
084                    sb.append(extraDataFactory.getActivitySQLWhereClause());
085    
086                    try (PreparedStatement preparedStatement = connection.prepareStatement(
087                                    sb.toString())) {
088    
089                            extraDataFactory.setActivitySQLParameters(preparedStatement);
090    
091                            try (ResultSet resultSet = preparedStatement.executeQuery()) {
092                                    while (resultSet.next()) {
093                                            long activityId = resultSet.getLong("activityId");
094                                            long classNameId = resultSet.getLong("classNameId");
095                                            long classPK = resultSet.getLong("classPK");
096                                            long companyId = resultSet.getLong("companyId");
097                                            String extraData = resultSet.getString("extraData");
098                                            long groupId = resultSet.getLong("groupId");
099                                            int type = resultSet.getInt("type_");
100                                            long userId = resultSet.getLong("userId");
101    
102                                            String newExtraData = createExtraData(
103                                                    extraDataFactory, groupId, companyId, userId,
104                                                    classNameId, classPK, type, extraData);
105    
106                                            if (newExtraData != null) {
107                                                    extraDataMap.put(activityId, newExtraData);
108                                            }
109                                    }
110                            }
111                    }
112    
113                    return extraDataMap;
114            }
115    
116            @Override
117            protected void doUpgrade() throws Exception {
118                    updateJournalActivities();
119                    updateSOSocialActivities();
120    
121                    updateActivities();
122            }
123    
124            protected void updateActivities() throws Exception {
125                    ExtraDataFactory[] extraDataFactories = {
126                            new AddAssetCommentExtraDataFactory(),
127                            new AddMessageExtraDataFactory(), new BlogsEntryExtraDataFactory(),
128                            new BookmarksEntryExtraDataFactory(),
129                            new DLFileEntryExtraDataFactory(), new KBArticleExtraDataFactory(),
130                            new KBCommentExtraDataFactory(), new KBTemplateExtraDataFactory(),
131                            new WikiPageExtraDataFactory()
132                    };
133    
134                    for (ExtraDataFactory extraDataFactory : extraDataFactories) {
135                            updateActivities(extraDataFactory);
136                    }
137            }
138    
139            protected void updateActivities(ExtraDataFactory extraDataFactory)
140                    throws Exception {
141    
142                    Map<Long, String> extraDataMap = createExtraDataMap(extraDataFactory);
143    
144                    for (Map.Entry<Long, String> entry : extraDataMap.entrySet()) {
145                            long activityId = entry.getKey();
146                            String extraData = entry.getValue();
147    
148                            try (PreparedStatement preparedStatement =
149                                            connection.prepareStatement(
150                                                    "update SocialActivity set extraData = ? where " +
151                                                            "activityId = ?")) {
152    
153                                    preparedStatement.setString(1, extraData);
154                                    preparedStatement.setLong(2, activityId);
155    
156                                    preparedStatement.executeUpdate();
157                            }
158                            catch (Exception e) {
159                                    if (_log.isWarnEnabled()) {
160                                            _log.warn("Unable to update activity " + activityId, e);
161                                    }
162                            }
163                    }
164            }
165    
166            protected void updateJournalActivities() throws Exception {
167                    try (LoggingTimer loggingTimer = new LoggingTimer()) {
168                            long classNameId = PortalUtil.getClassNameId(
169                                    "com.liferay.portlet.journal.model.JournalArticle");
170    
171                            String[] tableNames = {"SocialActivity", "SocialActivityCounter"};
172    
173                            for (String tableName : tableNames) {
174                                    StringBundler sb = new StringBundler(7);
175    
176                                    sb.append("update ");
177                                    sb.append(tableName);
178                                    sb.append(" set classPK = (select resourcePrimKey from ");
179                                    sb.append("JournalArticle where id_ = ");
180                                    sb.append(tableName);
181                                    sb.append(".classPK) where classNameId = ");
182                                    sb.append(classNameId);
183    
184                                    runSQL(sb.toString());
185                            }
186                    }
187            }
188    
189            protected void updateSOSocialActivities() throws Exception {
190                    try (LoggingTimer loggingTimer = new LoggingTimer()) {
191                            if (!hasTable("SO_SocialActivity")) {
192                                    return;
193                            }
194    
195                            try (PreparedStatement preparedStatement =
196                                            connection.prepareStatement(
197                                                    "select activityId, activitySetId from " +
198                                                            "SO_SocialActivity");
199                                    ResultSet resultSet = preparedStatement.executeQuery()) {
200    
201                                    while (resultSet.next()) {
202                                            long activityId = resultSet.getLong("activityId");
203                                            long activitySetId = resultSet.getLong("activitySetId");
204    
205                                            StringBundler sb = new StringBundler(4);
206    
207                                            sb.append("update SocialActivity set activitySetId = ");
208                                            sb.append(activitySetId);
209                                            sb.append(" where activityId = ");
210                                            sb.append(activityId);
211    
212                                            runSQL(sb.toString());
213                                    }
214                            }
215    
216                            runSQL("drop table SO_SocialActivity");
217                    }
218            }
219    
220            protected interface ExtraDataFactory {
221    
222                    public JSONObject createExtraDataJSONObject(
223                                    ResultSet resultSet, String extraData)
224                            throws SQLException;
225    
226                    public String getActivityClassName();
227    
228                    public String getActivitySQLWhereClause();
229    
230                    public String getSQL();
231    
232                    public void setActivitySQLParameters(
233                                    PreparedStatement preparedStatement)
234                            throws SQLException;
235    
236                    public void setModelSQLParameters(
237                                    PreparedStatement preparedStatement, long companyId,
238                                    long groupId, long userId, long classNameId, long classPK,
239                                    int type, String extraData)
240                            throws SQLException;
241    
242            }
243    
244            private static final Log _log = LogFactoryUtil.getLog(UpgradeSocial.class);
245    
246            private class AddAssetCommentExtraDataFactory implements ExtraDataFactory {
247    
248                    @Override
249                    public JSONObject createExtraDataJSONObject(
250                                    ResultSet resultSet, String extraData)
251                            throws SQLException {
252    
253                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
254    
255                            long messageId = 0;
256    
257                            try {
258                                    JSONObject jsonObject = JSONFactoryUtil.createJSONObject(
259                                            extraData);
260    
261                                    messageId = jsonObject.getLong("messageId");
262                            }
263                            catch (JSONException jsone) {
264                            }
265    
266                            extraDataJSONObject.put("messageId", messageId);
267    
268                            extraDataJSONObject.put("title", resultSet.getString("subject"));
269    
270                            return extraDataJSONObject;
271                    }
272    
273                    @Override
274                    public String getActivityClassName() {
275                            return StringPool.BLANK;
276                    }
277    
278                    @Override
279                    public String getActivitySQLWhereClause() {
280                            return "type_ = ?";
281                    }
282    
283                    @Override
284                    public String getSQL() {
285                            return "select subject from MBMessage where messageId = ?";
286                    }
287    
288                    @Override
289                    public void setActivitySQLParameters(
290                                    PreparedStatement preparedStatement)
291                            throws SQLException {
292    
293                            preparedStatement.setInt(1, _TYPE_ADD_COMMENT);
294                    }
295    
296                    @Override
297                    public void setModelSQLParameters(
298                                    PreparedStatement preparedStatement, long companyId,
299                                    long groupId, long userId, long classNameId, long classPK,
300                                    int type, String extraData)
301                            throws SQLException {
302    
303                            long messageId = 0;
304    
305                            try {
306                                    JSONObject jsonObject = JSONFactoryUtil.createJSONObject(
307                                            extraData);
308    
309                                    messageId = jsonObject.getLong("messageId");
310                            }
311                            catch (JSONException jsone) {
312                            }
313    
314                            preparedStatement.setLong(1, messageId);
315                    }
316    
317                    private static final int _TYPE_ADD_COMMENT = 10005;
318    
319            };
320    
321            private class AddMessageExtraDataFactory implements ExtraDataFactory {
322    
323                    @Override
324                    public JSONObject createExtraDataJSONObject(
325                                    ResultSet resultSet, String extraData)
326                            throws SQLException {
327    
328                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
329    
330                            extraDataJSONObject.put("title", resultSet.getString("subject"));
331    
332                            return extraDataJSONObject;
333                    }
334    
335                    @Override
336                    public String getActivityClassName() {
337                            return "com.liferay.portlet.messageboards.model.MBMessage";
338                    }
339    
340                    @Override
341                    public String getActivitySQLWhereClause() {
342                            return "classNameId = ? and (type_ = ? or type_ = ?)";
343                    }
344    
345                    @Override
346                    public String getSQL() {
347                            return "select subject from MBMessage where messageId = ?";
348                    }
349    
350                    @Override
351                    public void setActivitySQLParameters(
352                                    PreparedStatement preparedStatement)
353                            throws SQLException {
354    
355                            preparedStatement.setLong(
356                                    1, PortalUtil.getClassNameId(getActivityClassName()));
357                            preparedStatement.setInt(2, _ADD_MESSAGE);
358                            preparedStatement.setInt(3, _REPLY_MESSAGE);
359                    }
360    
361                    @Override
362                    public void setModelSQLParameters(
363                                    PreparedStatement preparedStatement, long companyId,
364                                    long groupId, long userId, long classNameId, long classPK,
365                                    int type, String extraData)
366                            throws SQLException {
367    
368                            preparedStatement.setLong(1, classPK);
369                    }
370    
371                    private static final int _ADD_MESSAGE = 1;
372    
373                    private static final int _REPLY_MESSAGE = 2;
374    
375            };
376    
377            private class BlogsEntryExtraDataFactory implements ExtraDataFactory {
378    
379                    @Override
380                    public JSONObject createExtraDataJSONObject(
381                                    ResultSet resultSet, String extraData)
382                            throws SQLException {
383    
384                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
385    
386                            extraDataJSONObject.put("title", resultSet.getString("title"));
387    
388                            return extraDataJSONObject;
389                    }
390    
391                    @Override
392                    public String getActivityClassName() {
393                            return "com.liferay.portlet.blogs.model.BlogsEntry";
394                    }
395    
396                    @Override
397                    public String getActivitySQLWhereClause() {
398                            return "classNameId = ? and (type_ = ? or type_ = ?)";
399                    }
400    
401                    @Override
402                    public String getSQL() {
403                            return "select title from BlogsEntry where entryId = ?";
404                    }
405    
406                    @Override
407                    public void setActivitySQLParameters(
408                                    PreparedStatement preparedStatement)
409                            throws SQLException {
410    
411                            preparedStatement.setLong(
412                                    1, PortalUtil.getClassNameId(getActivityClassName()));
413                            preparedStatement.setInt(2, _ADD_ENTRY);
414                            preparedStatement.setInt(3, _UPDATE_ENTRY);
415                    }
416    
417                    @Override
418                    public void setModelSQLParameters(
419                                    PreparedStatement preparedStatement, long companyId,
420                                    long groupId, long userId, long classNameId, long classPK,
421                                    int type, String extraData)
422                            throws SQLException {
423    
424                            preparedStatement.setLong(1, classPK);
425                    }
426    
427                    private static final int _ADD_ENTRY = 2;
428    
429                    private static final int _UPDATE_ENTRY = 3;
430    
431            };
432    
433            private class BookmarksEntryExtraDataFactory implements ExtraDataFactory {
434    
435                    @Override
436                    public JSONObject createExtraDataJSONObject(
437                                    ResultSet resultSet, String extraData)
438                            throws SQLException {
439    
440                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
441    
442                            extraDataJSONObject.put("title", resultSet.getString("name"));
443    
444                            return extraDataJSONObject;
445                    }
446    
447                    @Override
448                    public String getActivityClassName() {
449                            return "com.liferay.portlet.bookmarks.model.BookmarksEntry";
450                    }
451    
452                    @Override
453                    public String getActivitySQLWhereClause() {
454                            return "classNameId = ? and (type_ = ? or type_ = ?)";
455                    }
456    
457                    @Override
458                    public String getSQL() {
459                            return "select name from BookmarksEntry where entryId = ?";
460                    }
461    
462                    @Override
463                    public void setActivitySQLParameters(
464                                    PreparedStatement preparedStatement)
465                            throws SQLException {
466    
467                            preparedStatement.setLong(
468                                    1, PortalUtil.getClassNameId(getActivityClassName()));
469                            preparedStatement.setInt(2, _ADD_ENTRY);
470                            preparedStatement.setInt(3, _UPDATE_ENTRY);
471                    }
472    
473                    @Override
474                    public void setModelSQLParameters(
475                                    PreparedStatement preparedStatement, long companyId,
476                                    long groupId, long userId, long classNameId, long classPK,
477                                    int type, String extraData)
478                            throws SQLException {
479    
480                            preparedStatement.setLong(1, classPK);
481                    }
482    
483                    private static final int _ADD_ENTRY = 1;
484    
485                    private static final int _UPDATE_ENTRY = 2;
486    
487            };
488    
489            private class DLFileEntryExtraDataFactory implements ExtraDataFactory {
490    
491                    @Override
492                    public JSONObject createExtraDataJSONObject(
493                                    ResultSet resultSet, String extraData)
494                            throws SQLException {
495    
496                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
497    
498                            extraDataJSONObject.put("title", resultSet.getString("title"));
499    
500                            return extraDataJSONObject;
501                    }
502    
503                    @Override
504                    public String getActivityClassName() {
505                            return "com.liferay.portlet.documentlibrary.model.DLFileEntry";
506                    }
507    
508                    @Override
509                    public String getActivitySQLWhereClause() {
510                            return "classNameId = ?";
511                    }
512    
513                    @Override
514                    public String getSQL() {
515                            return "select title from DLFileEntry where companyId = ? and " +
516                                    "groupId = ? and fileEntryId = ?";
517                    }
518    
519                    @Override
520                    public void setActivitySQLParameters(
521                                    PreparedStatement preparedStatement)
522                            throws SQLException {
523    
524                            preparedStatement.setLong(
525                                    1, PortalUtil.getClassNameId(getActivityClassName()));
526                    }
527    
528                    @Override
529                    public void setModelSQLParameters(
530                                    PreparedStatement preparedStatement, long companyId,
531                                    long groupId, long userId, long classNameId, long classPK,
532                                    int type, String extraData)
533                            throws SQLException {
534    
535                            preparedStatement.setLong(1, companyId);
536                            preparedStatement.setLong(2, groupId);
537                            preparedStatement.setLong(3, classPK);
538                    }
539    
540            };
541    
542            private class KBArticleExtraDataFactory implements ExtraDataFactory {
543    
544                    @Override
545                    public JSONObject createExtraDataJSONObject(
546                                    ResultSet resultSet, String extraData)
547                            throws SQLException {
548    
549                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
550    
551                            extraDataJSONObject.put("title", resultSet.getString("title"));
552    
553                            return extraDataJSONObject;
554                    }
555    
556                    @Override
557                    public String getActivityClassName() {
558                            return "com.liferay.knowledgebase.model.KBArticle";
559                    }
560    
561                    @Override
562                    public String getActivitySQLWhereClause() {
563                            return "classNameId = ? and (type_ = ? or type_ = ? or type_ = ?)";
564                    }
565    
566                    @Override
567                    public String getSQL() {
568                            return "select title from KBArticle where resourcePrimKey = ?";
569                    }
570    
571                    @Override
572                    public void setActivitySQLParameters(
573                                    PreparedStatement preparedStatement)
574                            throws SQLException {
575    
576                            preparedStatement.setLong(
577                                    1, PortalUtil.getClassNameId(getActivityClassName()));
578                            preparedStatement.setInt(2, _ADD_KB_ARTICLE);
579                            preparedStatement.setInt(3, _UPDATE_KB_ARTICLE);
580                            preparedStatement.setInt(4, _MOVE_KB_ARTICLE);
581                    }
582    
583                    @Override
584                    public void setModelSQLParameters(
585                                    PreparedStatement preparedStatement, long companyId,
586                                    long groupId, long userId, long classNameId, long classPK,
587                                    int type, String extraData)
588                            throws SQLException {
589    
590                            preparedStatement.setLong(1, classPK);
591                    }
592    
593                    private static final int _ADD_KB_ARTICLE = 1;
594    
595                    private static final int _MOVE_KB_ARTICLE = 7;
596    
597                    private static final int _UPDATE_KB_ARTICLE = 3;
598    
599            };
600    
601            private class KBCommentExtraDataFactory implements ExtraDataFactory {
602    
603                    @Override
604                    public JSONObject createExtraDataJSONObject(
605                                    ResultSet resultSet, String extraData)
606                            throws SQLException {
607    
608                            long classNameId = resultSet.getLong("classNameId");
609                            long classPK = resultSet.getLong("classPK");
610    
611                            ExtraDataFactory extraDataFactory = null;
612    
613                            if (classNameId == PortalUtil.getClassNameId(
614                                            _kbArticleExtraDataFactory.getActivityClassName())) {
615    
616                                    extraDataFactory = _kbArticleExtraDataFactory;
617                            }
618                            else if (classNameId == PortalUtil.getClassNameId(
619                                                    _kbTemplateExtraDataFactory.getActivityClassName())) {
620    
621                                    extraDataFactory = _kbTemplateExtraDataFactory;
622                            }
623    
624                            if (extraDataFactory == null) {
625                                    return null;
626                            }
627    
628                            try (PreparedStatement preparedStatement =
629                                            connection.prepareStatement(
630                                                    extraDataFactory.getSQL())) {
631    
632                                    preparedStatement.setLong(1, classPK);
633    
634                                    try (ResultSet curResultSet =
635                                                    preparedStatement.executeQuery()) {
636    
637                                            while (curResultSet.next()) {
638                                                    return extraDataFactory.createExtraDataJSONObject(
639                                                            curResultSet, StringPool.BLANK);
640                                            }
641                                    }
642                            }
643    
644                            return null;
645                    }
646    
647                    @Override
648                    public String getActivityClassName() {
649                            return "com.liferay.knowledgebase.model.KBComment";
650                    }
651    
652                    @Override
653                    public String getActivitySQLWhereClause() {
654                            return "classNameId = ? and (type_ = ? or type_ = ?)";
655                    }
656    
657                    @Override
658                    public String getSQL() {
659                            return "select classNameId, classPK from KBComment where " +
660                                    "kbCommentId = ?";
661                    }
662    
663                    @Override
664                    public void setActivitySQLParameters(
665                                    PreparedStatement preparedStatement)
666                            throws SQLException {
667    
668                            preparedStatement.setLong(
669                                    1, PortalUtil.getClassNameId(getActivityClassName()));
670                            preparedStatement.setInt(2, _ADD_KB_COMMENT);
671                            preparedStatement.setInt(3, _UPDATE_KB_COMMENT);
672                    }
673    
674                    @Override
675                    public void setModelSQLParameters(
676                                    PreparedStatement preparedStatement, long companyId,
677                                    long groupId, long userId, long classNameId, long classPK,
678                                    int type, String extraData)
679                            throws SQLException {
680    
681                            preparedStatement.setLong(1, classPK);
682                    }
683    
684                    private static final int _ADD_KB_COMMENT = 5;
685    
686                    private static final int _UPDATE_KB_COMMENT = 6;
687    
688                    private final KBArticleExtraDataFactory _kbArticleExtraDataFactory =
689                            new KBArticleExtraDataFactory();
690                    private final KBTemplateExtraDataFactory _kbTemplateExtraDataFactory =
691                            new KBTemplateExtraDataFactory();
692    
693            };
694    
695            private class KBTemplateExtraDataFactory implements ExtraDataFactory {
696    
697                    @Override
698                    public JSONObject createExtraDataJSONObject(
699                                    ResultSet resultSet, String extraData)
700                            throws SQLException {
701    
702                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
703    
704                            extraDataJSONObject.put("title", resultSet.getString("title"));
705    
706                            return extraDataJSONObject;
707                    }
708    
709                    @Override
710                    public String getActivityClassName() {
711                            return "com.liferay.knowledgebase.model.KBTemplate";
712                    }
713    
714                    @Override
715                    public String getActivitySQLWhereClause() {
716                            return "classNameId = ? and (type_ = ? or type_ = ?)";
717                    }
718    
719                    @Override
720                    public String getSQL() {
721                            return "select title from KBTemplate where kbTemplateId = ?";
722                    }
723    
724                    @Override
725                    public void setActivitySQLParameters(
726                                    PreparedStatement preparedStatement)
727                            throws SQLException {
728    
729                            preparedStatement.setLong(
730                                    1, PortalUtil.getClassNameId(getActivityClassName()));
731                            preparedStatement.setInt(2, _ADD_KB_TEMPLATE);
732                            preparedStatement.setInt(3, _UPDATE_KB_TEMPLATE);
733                    }
734    
735                    @Override
736                    public void setModelSQLParameters(
737                                    PreparedStatement preparedStatement, long companyId,
738                                    long groupId, long userId, long classNameId, long classPK,
739                                    int type, String extraData)
740                            throws SQLException {
741    
742                            preparedStatement.setLong(1, classPK);
743                    }
744    
745                    private static final int _ADD_KB_TEMPLATE = 2;
746    
747                    private static final int _UPDATE_KB_TEMPLATE = 4;
748    
749            };
750    
751            private class WikiPageExtraDataFactory implements ExtraDataFactory {
752    
753                    @Override
754                    public JSONObject createExtraDataJSONObject(
755                                    ResultSet resultSet, String extraData)
756                            throws SQLException {
757    
758                            JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
759    
760                            extraDataJSONObject.put("title", resultSet.getString("title"));
761                            extraDataJSONObject.put("version", resultSet.getDouble("version"));
762    
763                            return extraDataJSONObject;
764                    }
765    
766                    @Override
767                    public String getActivityClassName() {
768                            return "com.liferay.portlet.wiki.model.WikiPage";
769                    }
770    
771                    @Override
772                    public String getActivitySQLWhereClause() {
773                            return "classNameId = ? and (type_ = ? or type_ = ?)";
774                    }
775    
776                    @Override
777                    public String getSQL() {
778                            return "select title, version from WikiPage where companyId = ? " +
779                                    "and groupId = ? and resourcePrimKey = ? and head = ?";
780                    }
781    
782                    @Override
783                    public void setActivitySQLParameters(
784                                    PreparedStatement preparedStatement)
785                            throws SQLException {
786    
787                            preparedStatement.setLong(
788                                    1, PortalUtil.getClassNameId(getActivityClassName()));
789                            preparedStatement.setInt(2, _ADD_PAGE);
790                            preparedStatement.setInt(3, _UPDATE_PAGE);
791                    }
792    
793                    @Override
794                    public void setModelSQLParameters(
795                                    PreparedStatement preparedStatement, long companyId,
796                                    long groupId, long userId, long classNameId, long classPK,
797                                    int type, String extraData)
798                            throws SQLException {
799    
800                            preparedStatement.setLong(1, companyId);
801                            preparedStatement.setLong(2, groupId);
802                            preparedStatement.setLong(3, classPK);
803                            preparedStatement.setBoolean(4, true);
804                    }
805    
806                    private static final int _ADD_PAGE = 1;
807    
808                    private static final int _UPDATE_PAGE = 2;
809    
810            };
811    
812    }