KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > repository > DefinitionVersionManager


1 /*
2  * Copyright 2006 Pentaho Corporation. All rights reserved.
3  * This software was developed by Pentaho Corporation and is provided under the terms
4  * of the Mozilla Public License, Version 1.1, or any later version. You may not use
5  * this file except in compliance with the license. If you need a copy of the license,
6  * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
7  * BI Platform. The Initial Developer is Pentaho Corporation.
8  *
9  * Software distributed under the Mozilla Public License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
11  * the license for the specific language governing your rights and limitations.
12  *
13  * The purpose of this class is to maintain a list of versions of each hibernated
14  * class (the object definition, not the contents of any one object) for the purposes
15  * of initiating an automatic schema update.
16  *
17  * Created Sep 28, 2005
18  * @author mbatchel
19  */

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 JavaDoc key;
32
33     private static final String JavaDoc VersionKey = "PENTAHO_HIBERNATE_VERSIONS"; //$NON-NLS-1$
34

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 JavaDoc ignored) {
42
43             }
44             if (mgr == null) {
45                 // Never been stored before - Create one
46
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 JavaDoc 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 JavaDoc clName;
73         Integer JavaDoc 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 JavaDoc) ent.getKey();
81                 clVersion = (Integer JavaDoc) ent.getValue();
82                 needsUpdate |= checkVersion(verMap, clVersion.intValue(), clName);
83             }
84         }
85         /*
86          * needsUpdate = checkVersion(verMap, ContentItem.ClassVersionNumber,
87          * "ContentItem"); //$NON-NLS-1$ needsUpdate |= checkVersion(verMap,
88          * ContentItemFile.ClassVersionNumber, "ContentItemFile"); //$NON-NLS-1$
89          * needsUpdate |= checkVersion(verMap,
90          * ContentLocation.ClassVersionNumber, "ContentLocation"); //$NON-NLS-1$
91          * needsUpdate |= checkVersion(verMap,
92          * RuntimeElement.ClassVersionNumber, "RuntimeElement"); //$NON-NLS-1$
93          */

94         return needsUpdate;
95     }
96
97     private boolean checkVersion(Map verMap, int curVerNum, String JavaDoc className) {
98         Long JavaDoc currentVersionNumber = new Long JavaDoc(curVerNum);
99         Long JavaDoc storedVerNum = (Long JavaDoc) 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 JavaDoc getKey() {
127         return key;
128     }
129
130     public void setKey(String JavaDoc value) {
131         this.key = value;
132     }
133
134 }
135
Popular Tags