Mercurial > hg > blitz_stable
diff src/org/dancres/blitz/config/EntryConstraints.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/dancres/blitz/config/EntryConstraints.java Sat Mar 21 11:00:06 2009 +0000 @@ -0,0 +1,118 @@ +package org.dancres.blitz.config; + +import java.util.HashMap; + +import java.util.logging.Level; + +import net.jini.config.ConfigurationException; + +import org.dancres.blitz.config.*; + +/** + * @todo Move this into the config package and add a factory to track all + * of them. Also define a MINIMAL_CONSTRAINTS static which is an instance of + * this class created via the null constructor. + */ +public class EntryConstraints { + + public static final EntryConstraints MINIMUM = + new EntryConstraints(); + + private static int DEFAULT_CACHE_SIZE; + private static int DEFAULT_READ_AHEAD; + + static { + try { + DEFAULT_CACHE_SIZE = + ((Integer) + ConfigurationFactory.getEntry("entryReposCacheSize", + int.class, + new Integer(200))).intValue(); + + ConfigurationFactory.theLogger.log(Level.INFO, + "Cache size: " + DEFAULT_CACHE_SIZE); + + DEFAULT_READ_AHEAD = + ((Integer) + ConfigurationFactory.getEntry("entryReposReadahead", + int.class, + new Integer(0))).intValue(); + + ConfigurationFactory.theLogger.log(Level.INFO, + "Read ahead: " + DEFAULT_READ_AHEAD); + } catch (ConfigurationException aCE) { + } + } + + private static HashMap theAllConstraints = new HashMap(); + + private HashMap theConstraints = new HashMap(); + private String theType; + + public static EntryConstraints getConstraints(String aType) + throws ConfigurationException { + synchronized(theAllConstraints) { + EntryConstraints myConstraints = + (EntryConstraints) theAllConstraints.get(aType); + + if (myConstraints == null) { + myConstraints = new EntryConstraints(aType); + + theAllConstraints.put(aType, myConstraints); + } + + return myConstraints; + } + } + + /** + Create an instance of EntryConstraints with no settings loaded from + config and a minimal set of useful constraints. + */ + private EntryConstraints() { + theConstraints.put(CacheSize.class, new CacheSize(1)); + } + + private EntryConstraints(String aType) throws ConfigurationException { + theType = aType; + + init(); + } + + private void init() throws ConfigurationException { + String myConfigName = theType.replaceAll("\\.", "_"); + myConfigName = myConfigName.replaceAll("\\$", "_"); + + EntryConstraint[] myConstraints = (EntryConstraint[]) + ConfigurationFactory.getEntry(myConfigName, + EntryConstraint[].class, + new EntryConstraint[0]); + + for (int i = 0; i < myConstraints.length; i++) { + theConstraints.put(myConstraints[i].getClass(), myConstraints[i]); + } + + if (theConstraints.get(CacheSize.class) == null) { + theConstraints.put(CacheSize.class, + new CacheSize(DEFAULT_CACHE_SIZE)); + } + + // If FIFO is enabled, force read ahead to zero + // + if (theConstraints.get(Fifo.class) != null) { + theConstraints.put(ReadAhead.class, new ReadAhead(0)); + } else { + if (theConstraints.get(ReadAhead.class) == null) { + theConstraints.put(ReadAhead.class, + new ReadAhead(DEFAULT_READ_AHEAD)); + } + } + } + + public EntryConstraint get(Class aConstraint) { + EntryConstraint myResult = + (EntryConstraint) theConstraints.get(aConstraint); + + return myResult; + } +} \ No newline at end of file