001
014
015 package com.liferay.portal.upgrade;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.search.SearchEngineUtil;
020 import com.liferay.portal.kernel.upgrade.UpgradeException;
021 import com.liferay.portal.kernel.upgrade.UpgradeProcess;
022 import com.liferay.portal.util.PropsValues;
023
024
029 public class UpgradeProcessUtil {
030
031 public static boolean isCreateIGImageDocumentType() {
032 return _createIGImageDocumentType;
033 }
034
035 public static void setCreateIGImageDocumentType(
036 boolean createIGImageDocumentType) {
037
038 _createIGImageDocumentType = createIGImageDocumentType;
039 }
040
041 public static boolean upgradeProcess(
042 int buildNumber, String[] upgradeProcessClassNames,
043 ClassLoader classLoader)
044 throws UpgradeException {
045
046 return upgradeProcess(
047 buildNumber, upgradeProcessClassNames, classLoader,
048 PropsValues.INDEX_ON_UPGRADE);
049 }
050
051 public static boolean upgradeProcess(
052 int buildNumber, String[] upgradeProcessClassNames,
053 ClassLoader classLoader, boolean indexOnUpgrade)
054 throws UpgradeException {
055
056 boolean ranUpgradeProcess = false;
057
058 boolean tempIndexReadOnly = SearchEngineUtil.isIndexReadOnly();
059
060 if (indexOnUpgrade) {
061 SearchEngineUtil.setIndexReadOnly(true);
062 }
063
064 try {
065 for (String upgradeProcessClassName : upgradeProcessClassNames) {
066 boolean tempRanUpgradeProcess = _upgradeProcess(
067 buildNumber, upgradeProcessClassName, classLoader);
068
069 if (tempRanUpgradeProcess) {
070 ranUpgradeProcess = true;
071 }
072 }
073 }
074 finally {
075 SearchEngineUtil.setIndexReadOnly(tempIndexReadOnly);
076 }
077
078 return ranUpgradeProcess;
079 }
080
081 private static boolean _upgradeProcess(
082 int buildNumber, String upgradeProcessClassName,
083 ClassLoader classLoader)
084 throws UpgradeException {
085
086 if (_log.isDebugEnabled()) {
087 _log.debug("Initializing upgrade " + upgradeProcessClassName);
088 }
089
090 UpgradeProcess upgradeProcess = null;
091
092 try {
093 upgradeProcess = (UpgradeProcess)classLoader.loadClass(
094 upgradeProcessClassName).newInstance();
095 }
096 catch (Exception e) {
097 _log.error(e, e);
098 }
099
100 if (upgradeProcess == null) {
101 _log.error(upgradeProcessClassName + " cannot be found");
102
103 return false;
104 }
105
106 if ((upgradeProcess.getThreshold() == 0) ||
107 (upgradeProcess.getThreshold() > buildNumber)) {
108
109 if (_log.isDebugEnabled()) {
110 _log.debug("Running upgrade " + upgradeProcessClassName);
111 }
112
113 upgradeProcess.upgrade();
114
115 if (_log.isDebugEnabled()) {
116 _log.debug("Finished upgrade " + upgradeProcessClassName);
117 }
118
119 return true;
120 }
121 else {
122 if (_log.isDebugEnabled()) {
123 _log.debug(
124 "Upgrade threshold " + upgradeProcess.getThreshold() +
125 " will not trigger upgrade");
126
127 _log.debug("Skipping upgrade " + upgradeProcessClassName);
128 }
129
130 return false;
131 }
132 }
133
134 private static Log _log = LogFactoryUtil.getLog(UpgradeProcessUtil.class);
135
136 private static boolean _createIGImageDocumentType = false;
137
138 }