1
22
23 package com.liferay.portal.upgrade;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.util.InstancePool;
28
29
35 public abstract class SmartUpgradeSchema extends UpgradeProcess {
36
37 public void upgrade() throws UpgradeException {
38 String smartUpgradeSchemaImplClassName = this.getClass().getName();
39
40 if (_alreadyUpgraded) {
41 _log.info(
42 "Skipping " + smartUpgradeSchemaImplClassName +
43 " because it has already been executed");
44
45 return;
46 }
47
48 _alreadyUpgraded = true;
49
50 try {
51 upgradeOnce();
52
53 boolean doUpgrade = false;
54
55 for (int i = 0; i < _UPGRADE_PROGRESS_CLASSES.length; i++) {
56 String curUpgradeSchemaClassName =
57 _UPGRADE_PROGRESS_CLASSES[i].getName();
58
59 if (doUpgrade) {
60 SmartUpgradeSchema upgradeSchema =
61 (SmartUpgradeSchema)InstancePool.get(
62 curUpgradeSchemaClassName);
63
64 if (!upgradeSchema.isAlreadyUpgraded()) {
65 _log.info(
66 "Automatically executing " +
67 curUpgradeSchemaClassName);
68
69 upgradeSchema.setAlreadyUpgraded(true);
70
71 upgradeSchema.upgradeOnce();
72 }
73 }
74
75 if (smartUpgradeSchemaImplClassName.equals(
76 curUpgradeSchemaClassName)) {
77
78 doUpgrade = true;
79 }
80 }
81 }
82 catch (Exception e) {
83 throw new UpgradeException(e);
84 }
85 }
86
87 protected boolean isAlreadyUpgraded() {
88 return _alreadyUpgraded;
89 }
90
91 protected void setAlreadyUpgraded(boolean alreadyUpgraded) {
92 _alreadyUpgraded = alreadyUpgraded;
93 }
94
95 protected abstract void upgradeOnce() throws Exception;
96
97 private static final Class<?>[] _UPGRADE_PROGRESS_CLASSES = new Class[] {
98 com.liferay.portal.upgrade.v4_3_0.UpgradeSchema.class,
99 com.liferay.portal.upgrade.v4_3_1.UpgradeSchema.class,
100 com.liferay.portal.upgrade.v4_3_2.UpgradeSchema.class,
101 com.liferay.portal.upgrade.v4_3_3.UpgradeSchema.class,
102 com.liferay.portal.upgrade.v4_3_4.UpgradeSchema.class,
103 com.liferay.portal.upgrade.v4_4_0.UpgradeSchema.class,
104 com.liferay.portal.upgrade.v5_0_0.UpgradeSchema.class,
105 com.liferay.portal.upgrade.v5_1_0.UpgradeSchema.class,
106 com.liferay.portal.upgrade.v5_1_2.UpgradeSchema.class,
107 com.liferay.portal.upgrade.v5_2_0.UpgradeSchema.class
108 };
109
110 private static Log _log = LogFactoryUtil.getLog(SmartUpgradeSchema.class);
111
112 private boolean _alreadyUpgraded;
113
114 }