001
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
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 }