src/org/objectweb/cjdbc/controller/cache/result/schema/CacheDatabaseTable.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.cache.result.schema; 00026 00027 import java.io.Serializable; 00028 import java.sql.SQLException; 00029 import java.util.ArrayList; 00030 import java.util.HashMap; 00031 import java.util.Iterator; 00032 00033 import org.objectweb.cjdbc.common.sql.RequestType; 00034 import org.objectweb.cjdbc.common.sql.schema.DatabaseColumn; 00035 import org.objectweb.cjdbc.common.sql.schema.DatabaseTable; 00036 import org.objectweb.cjdbc.controller.cache.result.entries.CacheEntry; 00037 import org.objectweb.cjdbc.controller.cache.result.entries.ResultCacheEntry; 00038 00051 public class CacheDatabaseTable implements Serializable 00052 { 00053 private String name; 00054 private ArrayList columns; 00055 private ArrayList cacheEntries; // Cache entries depending on this table 00056 private HashMap pkCacheEntries; // Cache entries corresponding to a pk value 00057 00063 public CacheDatabaseTable(DatabaseTable databaseTable) 00064 { 00065 // Clone the name and the columns 00066 name = databaseTable.getName(); 00067 ArrayList origColumns = databaseTable.getColumns(); 00068 int size = origColumns.size(); 00069 columns = new ArrayList(size); 00070 for (int i = 0; i < size; i++) 00071 columns.add(new CacheDatabaseColumn(((DatabaseColumn) origColumns.get(i)) 00072 .getName())); 00073 00074 // Create an empty cache 00075 cacheEntries = new ArrayList(); 00076 pkCacheEntries = new HashMap(); 00077 } 00078 00084 public String getName() 00085 { 00086 return name; 00087 } 00088 00096 public void addColumn(CacheDatabaseColumn column) 00097 { 00098 columns.add(column); 00099 } 00100 00109 public void mergeColumns(CacheDatabaseTable t) throws SQLException 00110 { 00111 if (t == null) 00112 return; 00113 00114 ArrayList otherColumns = t.getColumns(); 00115 if (otherColumns == null) 00116 return; 00117 00118 int size = otherColumns.size(); 00119 for (int i = 0; i < size; i++) 00120 { 00121 CacheDatabaseColumn c = (CacheDatabaseColumn) otherColumns.get(i); 00122 CacheDatabaseColumn original = getColumn(c.getName()); 00123 if (original == null) 00124 addColumn(c); 00125 else 00126 { 00127 if (!original.equals(c)) 00128 throw new SQLException("Column " + c.getName() 00129 + " definition mismatch."); 00130 } 00131 } 00132 } 00133 00142 public ArrayList getColumns() 00143 { 00144 return columns; 00145 } 00146 00154 public CacheDatabaseColumn getColumn(String columnName) 00155 { 00156 for (Iterator i = columns.iterator(); i.hasNext();) 00157 { 00158 CacheDatabaseColumn c = (CacheDatabaseColumn) i.next(); 00159 if (columnName.compareToIgnoreCase(c.getName()) == 0) 00160 return c; 00161 } 00162 return null; 00163 } 00164 00172 public boolean equals(Object other) 00173 { 00174 if (!(other instanceof CacheDatabaseTable)) 00175 return false; 00176 00177 CacheDatabaseTable t = (CacheDatabaseTable) other; 00178 return t.getName().equals(name) && t.getColumns().equals(columns); 00179 } 00180 00187 public synchronized void addCacheEntry(CacheEntry ce) 00188 { 00189 cacheEntries.add(ce); 00190 } 00191 00198 public void addPkCacheEntry(String pk, CacheEntry ce) 00199 { 00200 synchronized (pkCacheEntries) 00201 { 00202 pkCacheEntries.put(pk, ce); 00203 } 00204 } 00205 00212 public ResultCacheEntry getPkResultCacheEntry(String pk) 00213 { 00214 if (pk == null) 00215 return null; 00216 synchronized (pkCacheEntries) 00217 { 00218 return (ResultCacheEntry) pkCacheEntries.get(pk); 00219 } 00220 } 00221 00227 public void removePkResultCacheEntry(Object pk) 00228 { 00229 synchronized (pkCacheEntries) 00230 { 00231 ResultCacheEntry rce = (ResultCacheEntry) pkCacheEntries.remove(pk); 00232 rce.invalidate(); 00233 } 00234 } 00235 00240 public void invalidateAll() 00241 { 00242 synchronized (this) 00243 { 00244 for (Iterator i = cacheEntries.iterator(); i.hasNext();) 00245 ((ResultCacheEntry) i.next()).invalidate(); 00246 cacheEntries.clear(); 00247 00248 for (int i = 0; i < columns.size(); i++) 00249 ((CacheDatabaseColumn) columns.get(i)).invalidateAll(); 00250 } 00251 synchronized (pkCacheEntries) 00252 { // All pk cache entries have been invalidated as a side effect by the 00253 // above loop. 00254 pkCacheEntries.clear(); 00255 } 00256 } 00257 00262 public synchronized void invalidateAllExceptPk() 00263 { 00264 for (Iterator i = cacheEntries.iterator(); i.hasNext();) 00265 { 00266 ResultCacheEntry qce = (ResultCacheEntry) i.next(); 00267 if (qce.getRequest().getCacheAbility() != RequestType.UNIQUE_CACHEABLE) 00268 qce.invalidate(); 00269 } 00270 cacheEntries.clear(); 00271 } 00272 00279 public String getInformation(boolean longFormat) 00280 { 00281 String result = "Table " + name + ": "; 00282 int size = columns.size(); 00283 for (int i = 0; i < size; i++) 00284 { 00285 CacheDatabaseColumn c = (CacheDatabaseColumn) columns.get(i); 00286 if (longFormat) 00287 result += "\n"; 00288 result += c.getInformation(); 00289 if (!longFormat && (i < size - 1)) 00290 result += ","; 00291 } 00292 return result; 00293 } 00294 }

CJDBCversion1.0.4に対してTue Oct 12 15:16:00 2004に生成されました。 doxygen 1.3.8