1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.upgrade;
16  
17  import com.liferay.portal.kernel.log.Log;
18  import com.liferay.portal.kernel.log.LogFactoryUtil;
19  import com.liferay.portal.kernel.upgrade.UpgradeException;
20  import com.liferay.portal.kernel.upgrade.UpgradeProcess;
21  
22  /**
23   * <a href="UpgradeProcessUtil.java.html"><b><i>View Source</i></b></a>
24   *
25   * @author Brian Wing Shun Chan
26   * @author Alexander Chow
27   * @author Raymond Augé
28   */
29  public class UpgradeProcessUtil {
30  
31      public static boolean upgradeProcess(
32              int buildNumber, String[] upgradeProcessClassNames,
33              ClassLoader classLoader)
34          throws UpgradeException {
35  
36          boolean ranUpgradeProcess = false;
37  
38          for (String upgradeProcessClassName : upgradeProcessClassNames) {
39              boolean tempRanUpgradeProcess = _upgradeProcess(
40                  buildNumber, upgradeProcessClassName, classLoader);
41  
42              if (tempRanUpgradeProcess) {
43                  ranUpgradeProcess = true;
44              }
45          }
46  
47          return ranUpgradeProcess;
48      }
49  
50      private static boolean _upgradeProcess(
51              int buildNumber, String upgradeProcessClassName,
52              ClassLoader classLoader)
53          throws UpgradeException {
54  
55          if (_log.isDebugEnabled()) {
56              _log.debug("Initializing upgrade " + upgradeProcessClassName);
57          }
58  
59          UpgradeProcess upgradeProcess = null;
60  
61          try {
62              upgradeProcess = (UpgradeProcess)classLoader.loadClass(
63                  upgradeProcessClassName).newInstance();
64          }
65          catch (Exception e) {
66              _log.error(e, e);
67          }
68  
69          if (upgradeProcess == null) {
70              _log.error(upgradeProcessClassName + " cannot be found");
71  
72              return false;
73          }
74  
75          if ((upgradeProcess.getThreshold() == 0) ||
76              (upgradeProcess.getThreshold() > buildNumber)) {
77  
78              if (_log.isDebugEnabled()) {
79                  _log.debug("Running upgrade " + upgradeProcessClassName);
80              }
81  
82              upgradeProcess.upgrade();
83  
84              if (_log.isDebugEnabled()) {
85                  _log.debug("Finished upgrade " + upgradeProcessClassName);
86              }
87  
88              return true;
89          }
90          else {
91              if (_log.isDebugEnabled()) {
92                  _log.debug(
93                      "Upgrade threshold " + upgradeProcess.getThreshold() +
94                          " will not trigger upgrade");
95  
96                  _log.debug("Skipping upgrade " + upgradeProcessClassName);
97              }
98  
99              return false;
100         }
101     }
102 
103     private static Log _log = LogFactoryUtil.getLog(UpgradeProcessUtil.class);
104 
105 }