|
DataStoreRegister |
|
1 /* 2 * DataStoreRegister.java 3 * 4 * Copyright (c) 1998-2001, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June 1991 (in the distribution as file licence.html, 9 * and also available at http://gate.ac.uk/gate/licence.html). 10 * 11 * Hamish Cunningham, 23/Jan/2001 12 * 13 * $Id: DataStoreRegister.java,v 1.16 2001/11/08 14:29:46 hamish Exp $ 14 */ 15 16 package gate; 17 18 import java.util.*; 19 import java.net.*; 20 21 import gate.util.*; 22 import gate.persist.*; 23 import gate.event.*; 24 25 /** Records all the open DataStores. 26 */ 27 public class DataStoreRegister extends HashSet { 28 29 /** All the DataStore classes available. This is a map of class name 30 * to descriptive text. 31 */ 32 public static Map getDataStoreClassNames() { 33 Map names = new HashMap(); 34 35 // no plugability here at present.... at some future point there should 36 // be a capability to add new data store classes via creole.xml metadata 37 // and resource jars 38 names.put( 39 "gate.persist.SerialDataStore", 40 "SerialDataStore: file-based storage using Java serialisation" 41 ); 42 // names.put( 43 // "gate.persist.JdbcDataStore", 44 // "JdbcDataStore: generic RDBMS storage over JDBC" 45 // ); 46 names.put( 47 "gate.persist.OracleDataStore", 48 "OracleDataStore: Oracle-specific RDBMS storage over JDBC" 49 ); 50 51 return names; 52 } // getDataStoreClassNames() 53 54 /** 55 * Adds the specified element to this set if it is not already 56 * present. Overriden here for event registration code. 57 */ 58 public boolean add(Object o) { 59 return super.add(o); 60 } // add 61 62 /** 63 * Removes the given element from this set if it is present. 64 * Overriden here for event registration code. 65 */ 66 public boolean remove(Object o) { 67 boolean res = super.remove(o); 68 if(res) { 69 fireDatastoreClosed( 70 new CreoleEvent((DataStore)o, CreoleEvent.DATASTORE_CLOSED) 71 ); 72 removeSecurityData((DataStore) o); 73 } 74 return res; 75 } // remove 76 77 /** 78 * Removes all of the elements from this set. 79 * Overriden here for event registration code. 80 */ 81 public void clear() { 82 Set datastores = new HashSet(this); 83 super.clear(); 84 85 Iterator iter = datastores.iterator(); 86 while(iter.hasNext()) { 87 fireDatastoreClosed( 88 new CreoleEvent((DataStore) iter.next(), CreoleEvent.DATASTORE_CLOSED) 89 ); 90 } // while 91 } // clear() 92 93 /** Configuration data such as driver names. */ 94 private static Map configData = new HashMap(); 95 96 /** Get the configuration data map. */ 97 public static Map getConfigData() { return configData; } 98 99 /** 100 * Adds configuration data (e.g. from <TT>gate.xml</TT> files) to 101 * the register. New key/value pairs are added to the existing 102 * set (this will overwrite existing pairs whose keys match new ones). 103 */ 104 public static void addConfig(Map configData) { 105 DataStoreRegister.configData.putAll(configData); 106 } // addConfig 107 108 /** A hashmap from datastore to security data (current user and group)*/ 109 private static Map securityData = new HashMap(); 110 111 /** 112 * Returns the security data for this datastore 113 */ 114 public static Map getSecurityData(DataStore ds) { 115 return (Map) securityData.get(ds); 116 } // 117 118 /** 119 * Adds security data for this datastore 120 */ 121 public static void addSecurityData(DataStore ds, Map secData){ 122 DataStoreRegister.securityData.put(ds, secData); 123 } 124 125 /** 126 * Removes the security data for this datastore 127 */ 128 public static void removeSecurityData(DataStore ds){ 129 DataStoreRegister.securityData.remove(ds); 130 } 131 132 /** 133 * Removes a previously registered {@link gate.event.CreoleListener} 134 * from the list of listeners for this DataStoreRegister. 135 * Normally the only listener that is registered with the DataStoreRegister 136 * is the {@link CreoleRegister} which can be obtained through 137 * {@link Gate#getCreoleRegister()} 138 */ 139 public synchronized void removeCreoleListener(CreoleListener l) { 140 if (creoleListeners != null && creoleListeners.contains(l)) { 141 Vector v = (Vector) creoleListeners.clone(); 142 v.removeElement(l); 143 creoleListeners = v; 144 } 145 } // removeCreoleListener(CreoleListener l) 146 147 /** 148 * Registers a new {@link gate.event.CreoleListener} with this 149 * DataStoreRegister. Normally the only listener that is 150 * registered with the DataStoreRegister is the {@link CreoleRegister} 151 * which can be obtained through {@link Gate#getCreoleRegister()} 152 */ 153 public synchronized void addCreoleListener(CreoleListener l) { 154 Vector v = 155 creoleListeners == 156 null ? new Vector(2) : (Vector) creoleListeners.clone(); 157 if (!v.contains(l)) { 158 v.addElement(l); 159 creoleListeners = v; 160 }// if 161 }// addCreoleListener(CreoleListener l) 162 163 /** 164 * Notifies all registered {@link gate.event.CreoleListener}s that a 165 * {@link DataStore} has been opened. Normally the only listener that is 166 * registered with the DataStoreRegister is the {@link CreoleRegister} 167 * which can be obtained through {@link Gate#getCreoleRegister()} 168 */ 169 protected void fireDatastoreOpened(CreoleEvent e) { 170 if (creoleListeners != null) { 171 Vector listeners = creoleListeners; 172 int count = listeners.size(); 173 for (int i = 0; i < count; i++) { 174 ((CreoleListener) listeners.elementAt(i)).datastoreOpened(e); 175 } // for 176 } // if 177 } // fireDatastoreOpened(CreoleEvent e) 178 179 /** 180 * Notifies all registered {@link gate.event.CreoleListener}s that a new 181 * {@link DataStore} has been created. Normally the only listener that is 182 * registered with the DataStoreRegister is the {@link CreoleRegister} 183 * which can be obtained through {@link Gate#getCreoleRegister()} 184 */ 185 protected void fireDatastoreCreated(CreoleEvent e) { 186 if (creoleListeners != null ) { 187 Vector listeners = creoleListeners; 188 int count = listeners.size(); 189 for (int i = 0; i < count; i++) { 190 ((CreoleListener) listeners.elementAt(i)).datastoreCreated(e); 191 } // for 192 } // if 193 } // fireDatastoreCreated(CreoleEvent e) 194 195 /** 196 * Notifies all registered {@link gate.event.CreoleListener}s that a 197 * {@link DataStore} has been closed. Normally the only listener that is 198 * registered with the DataStoreRegister is the {@link CreoleRegister} 199 * which can be obtained through {@link Gate#getCreoleRegister()} 200 */ 201 protected void fireDatastoreClosed(CreoleEvent e) { 202 if (creoleListeners != null) { 203 Vector listeners = creoleListeners; 204 int count = listeners.size(); 205 for (int i = 0; i < count; i++) { 206 ((CreoleListener) listeners.elementAt(i)).datastoreClosed(e); 207 } // for 208 } // if 209 } // fireDatastoreClosed(CreoleEvent e) 210 211 /** */ 212 private transient Vector creoleListeners; 213 214 } // class DataStoreRegister 215
|
DataStoreRegister |
|