1 20 package org.pentaho.repository; 21 22 import java.util.*; 23 24 import org.hibernate.Session; 25 26 public class DefinitionVersionManager { 27 private Map versionMap = new HashMap(); 28 29 private int revision; 30 31 private String key; 32 33 private static final String VersionKey = "PENTAHO_HIBERNATE_VERSIONS"; 35 public static void performAutoUpdateIfRequired() { 36 Session session = HibernateUtil.getSession(); 37 try { 38 DefinitionVersionManager mgr = null; 39 try { 40 mgr = (DefinitionVersionManager) session.get(DefinitionVersionManager.class, VersionKey); 41 } catch (Exception ignored) { 42 43 } 44 if (mgr == null) { 45 mgr = new DefinitionVersionManager(); 47 mgr.setKey(VersionKey); 48 session.save(mgr); 49 } 50 boolean needsUpdate = mgr.versionsUpdated(); 51 if (needsUpdate) { 52 HibernateUtil.updateSchema(); 53 } 54 try { 55 HibernateUtil.commitTransaction(); 56 } catch (Throwable ignored) { 57 } 58 HibernateUtil.flushSession(); 59 } finally { 60 HibernateUtil.closeSession(); 61 } 62 } 63 64 public boolean versionsUpdated() { 65 Map verMap = this.getVersionMap(); 66 boolean needsUpdate = false; 67 List objectHandlers = HibernateUtil.getHibernatedObjectHandlerList(); 68 IHibernatedObjectExtensionList handler; 69 Map objectVersionMap; 70 Iterator it; 71 Map.Entry ent; 72 String clName; 73 Integer clVersion; 74 for (int i = 0; i < objectHandlers.size(); i++) { 75 handler = (IHibernatedObjectExtensionList) objectHandlers.get(i); 76 objectVersionMap = handler.getHibernatedObjectVersionMap(); 77 it = objectVersionMap.entrySet().iterator(); 78 while (it.hasNext()) { 79 ent = (Map.Entry) it.next(); 80 clName = (String ) ent.getKey(); 81 clVersion = (Integer ) ent.getValue(); 82 needsUpdate |= checkVersion(verMap, clVersion.intValue(), clName); 83 } 84 } 85 94 return needsUpdate; 95 } 96 97 private boolean checkVersion(Map verMap, int curVerNum, String className) { 98 Long currentVersionNumber = new Long (curVerNum); 99 Long storedVerNum = (Long ) verMap.get(className); 100 if (storedVerNum == null) { 101 verMap.put(className, currentVersionNumber); 102 return true; 103 } else if (!storedVerNum.equals(currentVersionNumber)) { 104 verMap.put(className, currentVersionNumber); 105 return true; 106 } 107 return false; 108 } 109 110 public int getRevision() { 111 return revision; 112 } 113 114 public void setRevision(int revision) { 115 this.revision = revision; 116 } 117 118 protected Map getVersionMap() { 119 return versionMap; 120 } 121 122 protected void setVersionMap(Map versionMap) { 123 this.versionMap = versionMap; 124 } 125 126 public String getKey() { 127 return key; 128 } 129 130 public void setKey(String value) { 131 this.key = value; 132 } 133 134 } 135
| Popular Tags
|