KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > module > builders > Versions


1 /*
2
3  This software is OSI Certified Open Source Software.
4  OSI Certified is a certification mark of the Open Source Initiative.
5
6  The license (Mozilla version 1.0) can be read at the MMBase site.
7  See http://www.MMBase.org/license
8
9  */

10 package org.mmbase.module.builders;
11
12 import java.util.*;
13
14 import org.mmbase.core.event.NodeEvent;
15 import org.mmbase.module.core.*;
16 import org.mmbase.util.logging.*;
17
18 /**
19  * @javadoc
20  * @author Daniel Ockeloen
21  * @version $Id: Versions.java,v 1.17 2006/03/29 14:30:23 nklasens Exp $
22  */

23 public class Versions extends MMObjectBuilder implements MMBaseObserver {
24
25     private static final Logger log = Logging.getLoggerInstance(Versions.class);
26
27     private Hashtable cacheVersionHandlers = new Hashtable();
28
29     private Map versionsCache = new Hashtable();
30     
31     private boolean initialized = false;
32     
33     /**
34      * @javadoc
35      */

36     public boolean init() {
37         if (!initialized) {
38             super.init();
39             startCacheTypes();
40             List versionNodes = getNodes();
41             for (Iterator iter = versionNodes.iterator(); iter.hasNext();) {
42                 MMObjectNode versionNode = (MMObjectNode) iter.next();
43                 String JavaDoc name = versionNode.getStringValue("name");
44                 String JavaDoc type = versionNode.getStringValue("type");
45                 Integer JavaDoc number = new Integer JavaDoc(versionNode.getNumber());
46                 
47                 String JavaDoc key = type + "_" + name;
48                 if (versionsCache.containsKey(key)) {
49                     StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
50                     sb.append("versions node[number,version,maintainer]:");
51                     sb.append("[");
52                     sb.append(versionNode.getNumber());
53                     sb.append(",");
54                     sb.append(versionNode.getIntValue("version"));
55                     sb.append(",");
56                     sb.append(versionNode.getStringValue("maintainer"));
57                     sb.append("]");
58                     log.warn("more than one version was found for " + type + " with name " + name + " ." + sb.toString());
59                 }
60                 else {
61                     versionsCache.put(key, number);
62                 }
63             }
64             
65             initialized = true;
66         }
67
68         return true;
69     }
70
71     /**
72      * @param name the name of the component we want to get know the version information about
73      * @param type the type of tye component we want to get information about (application/builder)
74      * @return the node that contains version information about "name", "type" or null if no version
75      * information is avaiable
76      * @throws SearchQueryException
77      * @since MMBase-1.7
78      */

79     public MMObjectNode getVersionNode(String JavaDoc name, String JavaDoc type) {
80         MMObjectNode retval = null;
81
82         String JavaDoc key = type + "_" + name;
83         if (versionsCache.containsKey(key)) {
84             Integer JavaDoc number = (Integer JavaDoc) versionsCache.get(key);
85             retval = getNode(number.intValue());
86         }
87         return retval;
88     }
89
90     /**
91      * @javadoc
92      */

93     public int getInstalledVersion(String JavaDoc name, String JavaDoc type) {
94         MMObjectNode node = getVersionNode(name, type);
95         if (node == null) { return -1; }
96         return node.getIntValue("version");
97     }
98
99     /**
100      * @javadoc
101      */

102     public void setInstalledVersion(String JavaDoc name, String JavaDoc type, String JavaDoc maintainer, int version) {
103
104         MMObjectNode node = getVersionNode(name, type);
105         if (node == null) {
106             node = getNewNode("system");
107             node.setValue("name", name);
108             node.setValue("type", type);
109             node.setValue("maintainer", maintainer);
110             node.setValue("version", version);
111             int number = insert("system", node);
112             
113             String JavaDoc key = type + "_" + name;
114             versionsCache.put(key, new Integer JavaDoc(number));
115         } else {
116             node.setValue("maintainer", maintainer);
117             node.setValue("version", version);
118             node.commit();
119         }
120     }
121
122     /**
123      * @javadoc
124      */

125     public void updateInstalledVersion(String JavaDoc name, String JavaDoc type, String JavaDoc maintainer, int version) {
126         setInstalledVersion(name, type, maintainer, version);
127     }
128
129     /**
130      * @javadoc
131      */

132     public void startCacheTypes() {
133         // is there a CacheVersion file ?
134
String JavaDoc cacheversionfile = getInitParameter("cacheversionfile");
135
136         if (cacheversionfile != null && !cacheversionfile.equals("")) {
137             VersionXMLCacheNodeReader parser = new VersionXMLCacheNodeReader(cacheversionfile);
138             parser.setBuilder(this);
139             cacheVersionHandlers = parser.getCacheVersions(cacheVersionHandlers);
140         }
141         for (Enumeration e = cacheVersionHandlers.keys(); e.hasMoreElements();) {
142             String JavaDoc bname = (String JavaDoc) e.nextElement();
143             mmb.addLocalObserver(bname, this);
144             mmb.addRemoteObserver(bname, this);
145         }
146     }
147
148     /*
149      * (non-Javadoc)
150      * @see org.mmbase.module.core.MMObjectBuilder#notify(org.mmbase.core.event.NodeEvent)
151      */

152     public void notify(NodeEvent event) {
153         if (log.isDebugEnabled()) {
154             log.debug("Changed " + event.getMachine() + " " + event.getNodeNumber() + " "
155                 + event.getBuilderName() + " " + NodeEvent.newTypeToOldType(event.getType()));
156         }
157         String JavaDoc builder = event.getBuilderName();
158         Vector subs = (Vector) cacheVersionHandlers.get(builder);
159         int inumber = event.getNodeNumber();
160         if (subs != null) {
161             for (Enumeration e = subs.elements(); e.hasMoreElements();) {
162                 VersionCacheNode cnode = (VersionCacheNode) e.nextElement();
163                 cnode.handleChanged(builder, inumber);
164             }
165         }
166         super.notify(event);
167     }
168 }
169
Popular Tags