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.v7_0_0;
016    
017    import com.liferay.portal.kernel.dao.orm.WildcardMode;
018    import com.liferay.portal.kernel.upgrade.UpgradeException;
019    import com.liferay.portal.kernel.upgrade.UpgradeProcess;
020    import com.liferay.portal.kernel.util.StringBundler;
021    import com.liferay.portal.kernel.util.StringPool;
022    import com.liferay.portal.kernel.util.StringUtil;
023    import com.liferay.portal.upgrade.AutoBatchPreparedStatementUtil;
024    
025    import java.sql.PreparedStatement;
026    import java.sql.ResultSet;
027    import java.sql.SQLException;
028    
029    /**
030     * @author Preston Crary
031     */
032    public class UpgradeKernelPackage extends UpgradeProcess {
033    
034            @Override
035            protected void doUpgrade() throws UpgradeException {
036                    try {
037                            upgradeTable(
038                                    "Counter", "name", getClassNames(), WildcardMode.SURROUND);
039                            upgradeTable(
040                                    "ClassName_", "value", getClassNames(), WildcardMode.SURROUND);
041                            upgradeTable(
042                                    "ResourceAction", "name", getClassNames(),
043                                    WildcardMode.SURROUND);
044                            upgradeTable(
045                                    "ResourceBlock", "name", getClassNames(),
046                                    WildcardMode.SURROUND);
047                            upgradeTable(
048                                    "ResourcePermission", "name", getClassNames(),
049                                    WildcardMode.SURROUND);
050    
051                            upgradeTable(
052                                    "ResourceAction", "name", getResourceNames(),
053                                    WildcardMode.LEADING);
054                            upgradeTable(
055                                    "ResourceBlock", "name", getResourceNames(),
056                                    WildcardMode.LEADING);
057                            upgradeTable(
058                                    "ResourcePermission", "name", getResourceNames(),
059                                    WildcardMode.LEADING);
060                    }
061                    catch (SQLException sqle) {
062                            throw new UpgradeException(sqle);
063                    }
064            }
065    
066            protected String[][] getClassNames() {
067                    return _CLASS_NAMES;
068            }
069    
070            protected String[][] getResourceNames() {
071                    return _RESOURCE_NAMES;
072            }
073    
074            protected void upgradeTable(
075                            String columnName, String selectSQL, String updateSQL,
076                            String[] name)
077                    throws SQLException {
078    
079                    try (PreparedStatement ps1 = connection.prepareStatement(selectSQL);
080                            ResultSet rs = ps1.executeQuery();
081                            PreparedStatement ps2 = AutoBatchPreparedStatementUtil.autoBatch(
082                                    connection.prepareStatement(updateSQL))) {
083    
084                            while (rs.next()) {
085                                    String oldValue = rs.getString(columnName);
086    
087                                    String newValue = StringUtil.replace(
088                                            oldValue, name[0], name[1]);
089    
090                                    ps2.setString(1, newValue);
091                                    ps2.setString(2, oldValue);
092    
093                                    ps2.addBatch();
094                            }
095    
096                            ps2.executeBatch();
097                    }
098            }
099    
100            protected void upgradeTable(
101                            String tableName, String columnName, String[][] names,
102                            WildcardMode wildcardMode)
103                    throws SQLException {
104    
105                    StringBundler updateSB = new StringBundler(7);
106    
107                    updateSB.append("update ");
108                    updateSB.append(tableName);
109                    updateSB.append(" set ");
110                    updateSB.append(columnName);
111                    updateSB.append(" = ? where ");
112                    updateSB.append(columnName);
113                    updateSB.append(" = ?");
114    
115                    String updateSQL = updateSB.toString();
116    
117                    StringBundler selectPrefixSB = new StringBundler(7);
118    
119                    selectPrefixSB.append("select distinct ");
120                    selectPrefixSB.append(columnName);
121                    selectPrefixSB.append(" from ");
122                    selectPrefixSB.append(tableName);
123                    selectPrefixSB.append(" where ");
124                    selectPrefixSB.append(columnName);
125    
126                    if (wildcardMode.equals(WildcardMode.LEADING) ||
127                            wildcardMode.equals(WildcardMode.SURROUND)) {
128    
129                            selectPrefixSB.append(" like '%");
130                    }
131                    else {
132                            selectPrefixSB.append(" like '");
133                    }
134    
135                    String selectPrefix = selectPrefixSB.toString();
136    
137                    String selectPostfix = StringPool.APOSTROPHE;
138    
139                    if (wildcardMode.equals(WildcardMode.SURROUND) ||
140                            wildcardMode.equals(WildcardMode.TRAILING)) {
141    
142                            selectPostfix = "%'";
143                    }
144    
145                    for (String[] name : names) {
146                            String selectSQL = selectPrefix.concat(name[0]).concat(
147                                    selectPostfix);
148    
149                            upgradeTable(columnName, selectSQL, updateSQL, name);
150                    }
151            }
152    
153            private static final String[][] _CLASS_NAMES = new String[][] {
154                    {
155                            "com.liferay.portal.kernel.mail.Account",
156                            "com.liferay.mail.kernel.model.Account"
157                    },
158                    {
159                            "com.liferay.portal.model.BackgroundTask",
160                            "com.liferay.portal.kernel.backgroundtask.model.BackgroundTask"
161                    },
162                    {
163                            "com.liferay.portal.lock.model.Lock",
164                            "com.liferay.portal.kernel.lock.model.Lock"
165                    },
166                    {
167                            "com.liferay.portal.model.Account",
168                            "com.liferay.portal.kernel.model.Account"
169                    },
170                    {
171                            "com.liferay.portal.model.Address",
172                            "com.liferay.portal.kernel.model.Address"
173                    },
174                    {
175                            "com.liferay.portal.model.BrowserTracker",
176                            "com.liferay.portal.kernel.model.BrowserTracker"
177                    },
178                    {
179                            "com.liferay.portal.model.ClassName",
180                            "com.liferay.portal.kernel.model.ClassName"
181                    },
182                    {
183                            "com.liferay.portal.model.ClusterGroup",
184                            "com.liferay.portal.kernel.model.ClusterGroup"
185                    },
186                    {
187                            "com.liferay.portal.model.Company",
188                            "com.liferay.portal.kernel.model.Company"
189                    },
190                    {
191                            "com.liferay.portal.model.Contact",
192                            "com.liferay.portal.kernel.model.Contact"
193                    },
194                    {
195                            "com.liferay.portal.model.Country",
196                            "com.liferay.portal.kernel.model.Country"
197                    },
198                    {
199                            "com.liferay.portal.model.Dummy",
200                            "com.liferay.portal.kernel.model.Dummy"
201                    },
202                    {
203                            "com.liferay.portal.model.EmailAddress",
204                            "com.liferay.portal.kernel.model.EmailAddress"
205                    },
206                    {
207                            "com.liferay.portal.model.Group",
208                            "com.liferay.portal.kernel.model.Group"
209                    },
210                    {
211                            "com.liferay.portal.model.Image",
212                            "com.liferay.portal.kernel.model.Image"
213                    },
214                    {
215                            "com.liferay.portal.model.Layout",
216                            "com.liferay.portal.kernel.model.Layout"
217                    },
218                    {
219                            "com.liferay.portal.model.LayoutBranch",
220                            "com.liferay.portal.kernel.model.LayoutBranch"
221                    },
222                    {
223                            "com.liferay.portal.model.LayoutFriendlyURL",
224                            "com.liferay.portal.kernel.model.LayoutFriendlyURL"
225                    },
226                    {
227                            "com.liferay.portal.model.LayoutPrototype",
228                            "com.liferay.portal.kernel.model.LayoutPrototype"
229                    },
230                    {
231                            "com.liferay.portal.model.LayoutRevision",
232                            "com.liferay.portal.kernel.model.LayoutRevision"
233                    },
234                    {
235                            "com.liferay.portal.model.LayoutSet",
236                            "com.liferay.portal.kernel.model.LayoutSet"
237                    },
238                    {
239                            "com.liferay.portal.model.LayoutSetBranch",
240                            "com.liferay.portal.kernel.model.LayoutSetBranch"
241                    },
242                    {
243                            "com.liferay.portal.model.LayoutSetPrototype",
244                            "com.liferay.portal.kernel.model.LayoutSetPrototype"
245                    },
246                    {
247                            "com.liferay.portal.model.ListType",
248                            "com.liferay.portal.kernel.model.ListType"
249                    },
250                    {
251                            "com.liferay.portal.model.MembershipRequest",
252                            "com.liferay.portal.kernel.model.MembershipRequest"
253                    },
254                    {
255                            "com.liferay.portal.model.Organization",
256                            "com.liferay.portal.kernel.model.Organization"
257                    },
258                    {
259                            "com.liferay.portal.model.OrgGroupRole",
260                            "com.liferay.portal.kernel.model.OrgGroupRole"
261                    },
262                    {
263                            "com.liferay.portal.model.OrgLabor",
264                            "com.liferay.portal.kernel.model.OrgLabor"
265                    },
266                    {
267                            "com.liferay.portal.model.PasswordPolicy",
268                            "com.liferay.portal.kernel.model.PasswordPolicy"
269                    },
270                    {
271                            "com.liferay.portal.model.PasswordPolicyRel",
272                            "com.liferay.portal.kernel.model.PasswordPolicyRel"
273                    },
274                    {
275                            "com.liferay.portal.model.PasswordTracker",
276                            "com.liferay.portal.kernel.model.PasswordTracker"
277                    },
278                    {
279                            "com.liferay.portal.model.Phone",
280                            "com.liferay.portal.kernel.model.Phone"
281                    },
282                    {
283                            "com.liferay.portal.model.PluginSetting",
284                            "com.liferay.portal.kernel.model.PluginSetting"
285                    },
286                    {
287                            "com.liferay.portal.model.PortalPreferences",
288                            "com.liferay.portal.kernel.model.PortalPreferences"
289                    },
290                    {
291                            "com.liferay.portal.model.Portlet",
292                            "com.liferay.portal.kernel.model.Portlet"
293                    },
294                    {
295                            "com.liferay.portal.model.PortletItem",
296                            "com.liferay.portal.kernel.model.PortletItem"
297                    },
298                    {
299                            "com.liferay.portal.model.PortletPreferences",
300                            "com.liferay.portal.kernel.model.PortletPreferences"
301                    },
302                    {
303                            "com.liferay.portal.model.Region",
304                            "com.liferay.portal.kernel.model.Region"
305                    },
306                    {
307                            "com.liferay.portal.model.Release",
308                            "com.liferay.portal.kernel.model.Release"
309                    },
310                    {
311                            "com.liferay.portal.model.Repository",
312                            "com.liferay.portal.kernel.model.Repository"
313                    },
314                    {
315                            "com.liferay.portal.model.RepositoryEntry",
316                            "com.liferay.portal.kernel.model.RepositoryEntry"
317                    },
318                    {
319                            "com.liferay.portal.model.ResourceAction",
320                            "com.liferay.portal.kernel.model.ResourceAction"
321                    },
322                    {
323                            "com.liferay.portal.model.ResourceBlock",
324                            "com.liferay.portal.kernel.model.ResourceBlock"
325                    },
326                    {
327                            "com.liferay.portal.model.ResourceBlockPermission",
328                            "com.liferay.portal.kernel.model.ResourceBlockPermission"
329                    },
330                    {
331                            "com.liferay.portal.model.ResourcePermission",
332                            "com.liferay.portal.kernel.model.ResourcePermission"
333                    },
334                    {
335                            "com.liferay.portal.model.ResourceTypePermission",
336                            "com.liferay.portal.kernel.model.ResourceTypePermission"
337                    },
338                    {
339                            "com.liferay.portal.model.Role",
340                            "com.liferay.portal.kernel.model.Role"
341                    },
342                    {
343                            "com.liferay.portal.model.ServiceComponent",
344                            "com.liferay.portal.kernel.model.ServiceComponent"
345                    },
346                    {
347                            "com.liferay.portal.model.Subscription",
348                            "com.liferay.portal.kernel.model.Subscription"
349                    },
350                    {
351                            "com.liferay.portal.model.SystemEvent",
352                            "com.liferay.portal.kernel.model.SystemEvent"
353                    },
354                    {
355                            "com.liferay.portal.model.Team",
356                            "com.liferay.portal.kernel.model.Team"
357                    },
358                    {
359                            "com.liferay.portal.model.Ticket",
360                            "com.liferay.portal.kernel.model.Ticket"
361                    },
362                    {
363                            "com.liferay.portal.model.User",
364                            "com.liferay.portal.kernel.model.User"
365                    },
366                    {
367                            "com.liferay.portal.model.UserGroup",
368                            "com.liferay.portal.kernel.model.UserGroup"
369                    },
370                    {
371                            "com.liferay.portal.model.UserGroupGroupRole",
372                            "com.liferay.portal.kernel.model.UserGroupGroupRole"
373                    },
374                    {
375                            "com.liferay.portal.model.UserGroupRole",
376                            "com.liferay.portal.kernel.model.UserGroupRole"
377                    },
378                    {
379                            "com.liferay.portal.model.UserIdMapper",
380                            "com.liferay.portal.kernel.model.UserIdMapper"
381                    },
382                    {
383                            "com.liferay.portal.model.UserNotificationDelivery",
384                            "com.liferay.portal.kernel.model.UserNotificationDelivery"
385                    },
386                    {
387                            "com.liferay.portal.model.UserNotificationEvent",
388                            "com.liferay.portal.kernel.model.UserNotificationEvent"
389                    },
390                    {
391                            "com.liferay.portal.model.UserTracker",
392                            "com.liferay.portal.kernel.model.UserTracker"
393                    },
394                    {
395                            "com.liferay.portal.model.UserTrackerPath",
396                            "com.liferay.portal.kernel.model.UserTrackerPath"
397                    },
398                    {
399                            "com.liferay.portal.model.VirtualHost",
400                            "com.liferay.portal.kernel.model.VirtualHost"
401                    },
402                    {
403                            "com.liferay.portal.model.WebDAVProps",
404                            "com.liferay.portal.kernel.model.WebDAVProps"
405                    },
406                    {
407                            "com.liferay.portal.model.Website",
408                            "com.liferay.portal.kernel.model.Website"
409                    },
410                    {
411                            "com.liferay.portal.model.WorkflowDefinitionLink",
412                            "com.liferay.portal.kernel.model.WorkflowDefinitionLink"
413                    },
414                    {
415                            "com.liferay.portal.model.WorkflowInstanceLink",
416                            "com.liferay.portal.kernel.model.WorkflowInstanceLink"
417                    },
418                    {
419                            "com.liferay.portlet.announcements.model.AnnouncementsDelivery",
420                            "com.liferay.announcements.kernel.model.AnnouncementsDelivery"
421                    },
422                    {
423                            "com.liferay.portlet.announcements.model.AnnouncementsEntry",
424                            "com.liferay.announcements.kernel.model.AnnouncementsEntry"
425                    },
426                    {
427                            "com.liferay.portlet.announcements.model.AnnouncementsFlag",
428                            "com.liferay.announcements.kernel.model.AnnouncementsFlag"
429                    },
430                    {
431                            "com.liferay.portlet.asset.model.AssetCategory",
432                            "com.liferay.asset.kernel.model.AssetCategory"
433                    },
434                    {
435                            "com.liferay.portlet.asset.model.AssetCategoryProperty",
436                            "com.liferay.asset.kernel.model.AssetCategoryProperty"
437                    },
438                    {
439                            "com.liferay.portlet.asset.model.AssetEntry",
440                            "com.liferay.asset.kernel.model.AssetEntry"
441                    },
442                    {
443                            "com.liferay.portlet.asset.model.AssetLink",
444                            "com.liferay.asset.kernel.model.AssetLink"
445                    },
446                    {
447                            "com.liferay.portlet.asset.model.AssetTag",
448                            "com.liferay.asset.kernel.model.AssetTag"
449                    },
450                    {
451                            "com.liferay.portlet.asset.model.AssetTagStats",
452                            "com.liferay.asset.kernel.model.AssetTagStats"
453                    },
454                    {
455                            "com.liferay.portlet.asset.model.AssetVocabulary",
456                            "com.liferay.asset.kernel.model.AssetVocabulary"
457                    },
458                    {
459                            "com.liferay.portlet.blogs.model.BlogsEntry",
460                            "com.liferay.blogs.kernel.model.BlogsEntry"
461                    },
462                    {
463                            "com.liferay.portlet.blogs.model.BlogsStatsUser",
464                            "com.liferay.blogs.kernel.model.BlogsStatsUser"
465                    },
466                    {
467                            "com.liferay.portlet.counter.model.Counter",
468                            "com.liferay.counter.kernel.model.Counter"
469                    },
470                    {
471                            "com.liferay.portlet.documentlibrary.model.DLContent",
472                            "com.liferay.document.library.kernel.model.DLContent"
473                    },
474                    {
475                            "com.liferay.portlet.documentlibrary.model.DLFileEntry",
476                            "com.liferay.document.library.kernel.model.DLFileEntry"
477                    },
478                    {
479                            "com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata",
480                            "com.liferay.document.library.kernel.model.DLFileEntryMetadata"
481                    },
482                    {
483                            "com.liferay.portlet.documentlibrary.model.DLFileEntryType",
484                            "com.liferay.document.library.kernel.model.DLFileEntryType"
485                    },
486                    {
487                            "com.liferay.portlet.documentlibrary.model.DLFileRank",
488                            "com.liferay.document.library.kernel.model.DLFileRank"
489                    },
490                    {
491                            "com.liferay.portlet.documentlibrary.model.DLFileShortcut",
492                            "com.liferay.document.library.kernel.model.DLFileShortcut"
493                    },
494                    {
495                            "com.liferay.portlet.documentlibrary.model.DLFileVersion",
496                            "com.liferay.document.library.kernel.model.DLFileVersion"
497                    },
498                    {
499                            "com.liferay.portlet.documentlibrary.model.DLFolder",
500                            "com.liferay.document.library.kernel.model.DLFolder"
501                    },
502                    {
503                            "com.liferay.portlet.documentlibrary.model.DLSyncEvent",
504                            "com.liferay.document.library.kernel.model.DLSyncEvent"
505                    },
506                    {
507                            "com.liferay.portlet.documentlibrary.util.RawMetadataProcessor",
508                            "com.liferay.document.library.kernel.util.RawMetadataProcessor"
509                    },
510                    {
511                            "com.liferay.portlet.expando.model.ExpandoColumn",
512                            "com.liferay.expando.kernel.model.ExpandoColumn"
513                    },
514                    {
515                            "com.liferay.portlet.expando.model.ExpandoRow",
516                            "com.liferay.expando.kernel.model.ExpandoRow"
517                    },
518                    {
519                            "com.liferay.portlet.expando.model.ExpandoTable",
520                            "com.liferay.expando.kernel.model.ExpandoTable"
521                    },
522                    {
523                            "com.liferay.portlet.expando.model.ExpandoValue",
524                            "com.liferay.expando.kernel.model.ExpandoValue"
525                    },
526                    {
527                            "com.liferay.portlet.messageboards.model.MBBan",
528                            "com.liferay.message.boards.kernel.model.MBBan"
529                    },
530                    {
531                            "com.liferay.portlet.messageboards.model.MBCategory",
532                            "com.liferay.message.boards.kernel.model.MBCategory"
533                    },
534                    {
535                            "com.liferay.portlet.messageboards.model.MBDiscussion",
536                            "com.liferay.message.boards.kernel.model.MBDiscussion"
537                    },
538                    {
539                            "com.liferay.portlet.messageboards.model.MBMailingList",
540                            "com.liferay.message.boards.kernel.model.MBMailingList"
541                    },
542                    {
543                            "com.liferay.portlet.messageboards.model.MBMessage",
544                            "com.liferay.message.boards.kernel.model.MBMessage"
545                    },
546                    {
547                            "com.liferay.portlet.messageboards.model.MBStatsUser",
548                            "com.liferay.message.boards.kernel.model.MBStatsUser"
549                    },
550                    {
551                            "com.liferay.portlet.messageboards.model.MBThread",
552                            "com.liferay.message.boards.kernel.model.MBThread"
553                    },
554                    {
555                            "com.liferay.portlet.messageboards.model.MBThreadFlag",
556                            "com.liferay.message.boards.kernel.model.MBThreadFlag"
557                    },
558                    {
559                            "com.liferay.portlet.mobiledevicerules.model.MDRAction",
560                            "com.liferay.mobile.device.rules.model.MDRAction"
561                    },
562                    {
563                            "com.liferay.portlet.mobiledevicerules.model.MDRRule",
564                            "com.liferay.mobile.device.rules.model.MDRRule"
565                    },
566                    {
567                            "com.liferay.portlet.mobiledevicerules.model.MDRRuleGroup",
568                            "com.liferay.mobile.device.rules.model.MDRRuleGroup"
569                    },
570                    {
571                            "com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance",
572                            "com.liferay.mobile.device.rules.model.MDRRuleGroupInstance"
573                    },
574                    {
575                            "com.liferay.portlet.ratings.model.RatingsEntry",
576                            "com.liferay.ratings.kernel.model.RatingsEntry"
577                    },
578                    {
579                            "com.liferay.portlet.ratings.model.RatingsStats",
580                            "com.liferay.ratings.kernel.model.RatingsStats"
581                    },
582                    {
583                            "com.liferay.portlet.social.model.SocialActivity",
584                            "com.liferay.social.kernel.model.SocialActivity"
585                    },
586                    {
587                            "com.liferay.portlet.social.model.SocialActivityCounter",
588                            "com.liferay.social.kernel.model.SocialActivityCounter"
589                    },
590                    {
591                            "com.liferay.portlet.social.model.SocialActivityLimit",
592                            "com.liferay.social.kernel.model.SocialActivityLimit"
593                    },
594                    {
595                            "com.liferay.portlet.social.model.SocialActivitySet",
596                            "com.liferay.social.kernel.model.SocialActivitySet"
597                    },
598                    {
599                            "com.liferay.portlet.social.model.SocialActivitySetting",
600                            "com.liferay.social.kernel.model.SocialActivitySetting"
601                    },
602                    {
603                            "com.liferay.portlet.social.model.SocialRelation",
604                            "com.liferay.social.kernel.model.SocialRelation"
605                    },
606                    {
607                            "com.liferay.portlet.social.model.SocialRequest",
608                            "com.liferay.social.kernel.model.SocialRequest"
609                    },
610                    {
611                            "com.liferay.portlet.trash.model.TrashEntry",
612                            "com.liferay.trash.kernel.model.TrashEntry"
613                    },
614                    {
615                            "com.liferay.portlet.trash.model.TrashVersion",
616                            "com.liferay.trash.kernel.model.TrashVersion"
617                    },
618                    {
619                            "com.liferay.socialnetworking.model.MeetupsEntry",
620                            "com.liferay.social.networking.model.MeetupsEntry"
621                    },
622                    {
623                            "com.liferay.socialnetworking.model.MeetupsRegistration",
624                            "com.liferay.social.networking.model.MeetupsRegistration"
625                    },
626                    {
627                            "com.liferay.socialnetworking.model.WallEntry",
628                            "com.liferay.social.networking.model.WallEntry"
629                    }
630            };
631    
632            private static final String[][] _RESOURCE_NAMES = new String[][] {
633                    {
634                            "com.liferay.portlet.asset", "com.liferay.asset"
635                    },
636                    {
637                            "com.liferay.portlet.blogs", "com.liferay.blogs"
638                    },
639                    {
640                            "com.liferay.portlet.documentlibrary",
641                            "com.liferay.document.library"
642                    },
643                    {
644                            "com.liferay.portlet.messageboards", "com.liferay.message.boards"
645                    }
646            };
647    
648    }