1 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 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 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 name = versionNode.getStringValue("name"); 44 String type = versionNode.getStringValue("type"); 45 Integer number = new Integer (versionNode.getNumber()); 46 47 String key = type + "_" + name; 48 if (versionsCache.containsKey(key)) { 49 StringBuffer sb = new StringBuffer (); 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 79 public MMObjectNode getVersionNode(String name, String type) { 80 MMObjectNode retval = null; 81 82 String key = type + "_" + name; 83 if (versionsCache.containsKey(key)) { 84 Integer number = (Integer ) versionsCache.get(key); 85 retval = getNode(number.intValue()); 86 } 87 return retval; 88 } 89 90 93 public int getInstalledVersion(String name, String type) { 94 MMObjectNode node = getVersionNode(name, type); 95 if (node == null) { return -1; } 96 return node.getIntValue("version"); 97 } 98 99 102 public void setInstalledVersion(String name, String type, String 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 key = type + "_" + name; 114 versionsCache.put(key, new Integer (number)); 115 } else { 116 node.setValue("maintainer", maintainer); 117 node.setValue("version", version); 118 node.commit(); 119 } 120 } 121 122 125 public void updateInstalledVersion(String name, String type, String maintainer, int version) { 126 setInstalledVersion(name, type, maintainer, version); 127 } 128 129 132 public void startCacheTypes() { 133 String 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 bname = (String ) e.nextElement(); 143 mmb.addLocalObserver(bname, this); 144 mmb.addRemoteObserver(bname, this); 145 } 146 } 147 148 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 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
|