00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 package org.objectweb.cjdbc.controller.cache.result.schema;
00026
00027 import java.io.Serializable;
00028 import java.util.ArrayList;
00029 import java.util.Hashtable;
00030 import java.util.Iterator;
00031
00032 import org.objectweb.cjdbc.common.sql.RequestType;
00033 import org.objectweb.cjdbc.common.sql.SelectRequest;
00034 import org.objectweb.cjdbc.controller.cache.result.entries.CacheEntry;
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 public class CacheDatabaseColumn implements Serializable
00047 {
00048 private String name;
00049 private ArrayList cacheEntries;
00050
00051
00052
00053
00054
00055
00056 public CacheDatabaseColumn(String name)
00057 {
00058 this.name = name;
00059 cacheEntries = new ArrayList();
00060 }
00061
00062
00063
00064
00065
00066
00067 public String getName()
00068 {
00069 return name;
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079 public boolean equals(Object other)
00080 {
00081 if (!(other instanceof CacheDatabaseColumn))
00082 return false;
00083
00084 return name.equals(((CacheDatabaseColumn) other).getName());
00085 }
00086
00087
00088
00089
00090
00091
00092
00093 public synchronized void addCacheEntry(CacheEntry ce)
00094 {
00095 cacheEntries.add(ce);
00096 }
00097
00098
00099
00100
00101
00102 public synchronized void markDirtyAllNonUnique()
00103 {
00104
00105
00106 for (int i = 0; i < cacheEntries.size(); i++)
00107 {
00108 CacheEntry ce = (CacheEntry) cacheEntries.get(i);
00109 if ((ce.getRequest().getCacheAbility() != RequestType.UNIQUE_CACHEABLE)
00110 && ce.isValid())
00111 ce.markDirty();
00112 }
00113 }
00114
00115
00116
00117
00118 public synchronized void invalidateAll()
00119 {
00120 for (Iterator i = cacheEntries.iterator(); i.hasNext();)
00121 {
00122 CacheEntry entry = (CacheEntry) i.next();
00123 entry.invalidate();
00124 }
00125 cacheEntries.clear();
00126 }
00127
00128
00129
00130
00131 public synchronized void invalidateAllNonUnique()
00132 {
00133
00134
00135 for (int i = 0; i < cacheEntries.size();)
00136 {
00137 CacheEntry ce = (CacheEntry) cacheEntries.get(i);
00138 if (ce.getRequest().getCacheAbility() != RequestType.UNIQUE_CACHEABLE)
00139 {
00140 ce.invalidate();
00141 cacheEntries.remove(i);
00142 }
00143 else
00144 {
00145 i++;
00146 }
00147 }
00148 }
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160 public synchronized void invalidateAllUniqueWithValuesAndAllNonUnique(
00161 String val,
00162 ArrayList columns,
00163 ArrayList values)
00164 {
00165
00166
00167 for (int i = 0; i < cacheEntries.size();)
00168 {
00169 CacheEntry ce = (CacheEntry) cacheEntries.get(i);
00170 if (ce.getRequest().getCacheAbility() == RequestType.UNIQUE_CACHEABLE)
00171 {
00172 Hashtable queryValues;
00173 String value, v;
00174 SelectRequest query;
00175 int size, j;
00176
00177 query = ce.getRequest();
00178 queryValues = query.getWhereValues();
00179
00180 value = (String) queryValues.get(this.name);
00181 if (value.compareToIgnoreCase(val) == 0)
00182 {
00183
00184
00185
00186 size = values.size();
00187 j = 0;
00188 for (Iterator it = columns.iterator();
00189 it.hasNext() && (j < size);
00190 j++)
00191 {
00192 CacheDatabaseColumn cdc = (CacheDatabaseColumn) it.next();
00193 if (!this.equals(cdc))
00194 {
00195 v = (String) values.get(j);
00196 value = (String) queryValues.get(cdc.getName());
00197 if (value.compareToIgnoreCase(v) != 0)
00198 {
00199
00200
00201 return;
00202 }
00203 }
00204 }
00205
00206
00207 ce.invalidate();
00208 cacheEntries.remove(i);
00209 }
00210 else
00211 {
00212
00213
00214 i++;
00215 }
00216 }
00217 else
00218 {
00219
00220
00221 ce.invalidate();
00222 cacheEntries.remove(i);
00223 }
00224 }
00225 }
00226
00227
00228
00229
00230
00231 public synchronized void invalidateAllNonUniqueAndMarkDirtyUnique()
00232 {
00233
00234
00235 for (int i = 0; i < cacheEntries.size(); i++)
00236 {
00237 CacheEntry ce = (CacheEntry) cacheEntries.get(i);
00238 if ((ce.getRequest().getCacheAbility() != RequestType.UNIQUE_CACHEABLE)
00239 && ce.isValid())
00240 ce.markDirty();
00241 else
00242 {
00243 ce.invalidate();
00244 cacheEntries.remove(i);
00245 }
00246 }
00247 }
00248
00249
00250
00251
00252
00253
00254 public String getInformation()
00255 {
00256 return name;
00257 }
00258 }