diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/PropertiesfileCache.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/PropertiesfileCache.java | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/PropertiesfileCache.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/PropertiesfileCache.java new file mode 100644 index 00000000..1446e890 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/PropertiesfileCache.java @@ -0,0 +1,236 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.types.selectors.modifiedselector; + + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.Properties; +import java.util.Vector; + + +/** + * Use java.util.Properties for storing the values. + * The use of this Cache-implementation requires the use of the parameter + * <param name="cache.cachefile" .../> for defining, where to store the + * properties file. + * + * The ModifiedSelector sets the <i>cachefile</i> to the default value + * <i>cache.properties</i>. + * + * Supported <param>s are: + * <table> + * <tr> + * <th>name</th><th>values</th><th>description</th><th>required</th> + * </tr> + * <tr> + * <td> cache.cachefile </td> + * <td> <i>path to file</i> </td> + * <td> the name of the properties file </td> + * <td> yes </td> + * </tr> + * </table> + * + * @version 2003-09-13 + * @since Ant 1.6 + */ +public class PropertiesfileCache implements Cache { + + + // ----- member variables - configuration ----- + + + /** Where to store the properties? */ + private File cachefile = null; + + /** Object for storing the key-value-pairs. */ + private Properties cache = new Properties(); + + + // ----- member variables - internal use ----- + + + /** Is the cache already loaded? Prevents from multiple load operations. */ + private boolean cacheLoaded = false; + + /** Must the cache be saved? Prevents from multiple save operations. */ + private boolean cacheDirty = true; + + + // ----- Constructors ----- + + + /** Bean-Constructor. */ + public PropertiesfileCache() { + } + + /** + * Constructor. + * @param cachefile set the cachefile + */ + public PropertiesfileCache(File cachefile) { + this.cachefile = cachefile; + } + + + // ----- Cache-Configuration ----- + + + /** + * Setter. + * @param file new value + */ + public void setCachefile(File file) { + cachefile = file; + } + + + /** + * Getter. + * @return the cachefile + */ + public File getCachefile() { + return cachefile; + } + + /** + * This cache is valid if the cachefile is set. + * @return true if all is ok false otherwise + */ + public boolean isValid() { + return (cachefile != null); + } + + + // ----- Data Access + + + /** + * Load the cache from underlying properties file. + */ + public void load() { + if ((cachefile != null) && cachefile.isFile() && cachefile.canRead()) { + try { + BufferedInputStream bis = new BufferedInputStream( + new FileInputStream(cachefile)); + cache.load(bis); + bis.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + // after loading the cache is up to date with the file + cacheLoaded = true; + cacheDirty = false; + } + + /** + * Saves modification of the cache. + * Cache is only saved if there is one ore more entries. + * Because entries can not be deleted by this API, this Cache + * implementation checks the existence of entries before creating the file + * for performance optimisation. + */ + public void save() { + if (!cacheDirty) { + return; + } + if ((cachefile != null) && cache.propertyNames().hasMoreElements()) { + try { + BufferedOutputStream bos = new BufferedOutputStream( + new FileOutputStream(cachefile)); + cache.store(bos, null); + bos.flush(); + bos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + cacheDirty = false; + } + + /** Deletes the cache and its underlying file. */ + public void delete() { + cache = new Properties(); + cachefile.delete(); + cacheLoaded = true; + cacheDirty = false; + } + + /** + * Returns a value for a given key from the cache. + * @param key the key + * @return the stored value + */ + public Object get(Object key) { + if (!cacheLoaded) { + load(); + } + try { + return cache.getProperty(String.valueOf(key)); + } catch (ClassCastException e) { + return null; + } + } + + /** + * Saves a key-value-pair in the cache. + * @param key the key + * @param value the value + */ + public void put(Object key, Object value) { + cache.put(String.valueOf(key), String.valueOf(value)); + cacheDirty = true; + } + + /** + * Returns an iterator over the keys in the cache. + * @return An iterator over the keys. + */ + public Iterator<String> iterator() { + Vector<String> v = new Vector<String>(); + Enumeration<?> en = cache.propertyNames(); + while (en.hasMoreElements()) { + v.add(en.nextElement().toString()); + } + return v.iterator(); + } + + + // ----- additional ----- + + + /** + * Override Object.toString(). + * @return information about this cache + */ + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("<PropertiesfileCache:"); + buf.append("cachefile=").append(cachefile); + buf.append(";noOfEntries=").append(cache.size()); + buf.append(">"); + return buf.toString(); + } +} |