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 Class<?> clazz = classLoader.loadClass(upgradeProcessClassName);
094
095 upgradeProcess = (UpgradeProcess)clazz.newInstance();
096 }
097 catch (Exception e) {
098 _log.error(e, e);
099 }
100
101 if (upgradeProcess == null) {
102 _log.error(upgradeProcessClassName + " cannot be found");
103
104 return false;
105 }
106
107 if ((upgradeProcess.getThreshold() == 0) ||
108 (upgradeProcess.getThreshold() > buildNumber)) {
109
110 if (_log.isDebugEnabled()) {
111 _log.debug("Running upgrade " + upgradeProcessClassName);
112 }
113
114 upgradeProcess.upgrade();
115
116 if (_log.isDebugEnabled()) {
117 _log.debug("Finished upgrade " + upgradeProcessClassName);
118 }
119
120 return true;
121 }
122
123 if (_log.isDebugEnabled()) {
124 _log.debug(
125 "Upgrade threshold " + upgradeProcess.getThreshold() +
126 " will not trigger upgrade");
127
128 _log.debug("Skipping upgrade " + upgradeProcessClassName);
129 }
130
131 return false;
132 }
133
134 private static Log _log = LogFactoryUtil.getLog(UpgradeProcessUtil.class);
135
136 private static boolean _createIGImageDocumentType = false;
137
138 }