1 package net.sourceforge.rpgee.dice; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import net.sourceforge.rpgee.dice.exceptions.InvalidParameterException; 7 import net.sourceforge.rpgee.dice.exceptions.RandomValueException; 8 9 import org.apache.commons.logging.Log; 10 import org.apache.commons.logging.LogFactory; 11 12 public abstract class AbstractGeneratedRandomValue implements GeneratedRandomValue { 13 private static Log log = LogFactory.getLog(AbstractGeneratedRandomValue.class); 14 private List<RandomValue> dieValues = new ArrayList<RandomValue>(); 15 protected List<RandomValueHandler> handlers; 16 private List<Class> validRandomizerClasses = new ArrayList<Class>(); 17 protected Object randomizerElement; 18 protected Object settings; 19 20 public AbstractGeneratedRandomValue() { 21 super(); 22 } 23 24 public void setSettings(Object _settings) { 25 settings = _settings; 26 } 27 28 public RandomValue addRandomValue(Object dieConfig, RandomValueResultMapper mapper) throws InvalidParameterException { 29 RandomValue v = _getRandomValue(dieConfig, mapper); 30 addRandomValue(v); 31 return v; 32 } 33 34 public Object getRandomizerElement() { 35 return randomizerElement; 36 } 37 38 public void setRandomizerElement(Object o) throws InvalidParameterException { 39 for (Class<Object> c : validRandomizerClasses) { 40 if (c.isInterface()) { 41 if (c.isAssignableFrom(o.getClass())) { 42 this.randomizerElement = o; 43 log.debug("Setting randomizer to " + o); 44 return; 45 } 46 } else if (o.getClass().equals(c)) { 47 this.randomizerElement = o; 48 log.debug("Setting randomizer to " + o); 49 return; 50 } 51 } 52 throw new InvalidParameterException("Object " + o + " is not a valid randomizer"); 53 } 54 55 public List<RandomValue> getRandomValues() throws RandomValueException { 56 log.debug("Returning dieValues : " + dieValues); 57 return dieValues; 58 } 59 60 public void addRandomValue(RandomValue v) { 61 log.debug("Adding RandomValue: " + v); 62 this.dieValues.add(v); 63 } 64 65 public void setRandomValueHandlers(List<RandomValueHandler> _handlers) { 66 log.debug("Setting DieHandlers : " + _handlers); 67 this.handlers = _handlers; 68 } 69 70 public void addRandomValueHandler(RandomValueHandler handler) { 71 log.debug("Adding RandomValueHandler : " + handler); 72 this.handlers.add(handler); 73 } 74 75 public List<RandomValue> getHandledValues() throws RandomValueException { 76 List<RandomValue> v = new ArrayList<RandomValue>(getRandomValues().size()); 77 for (RandomValue i : getRandomValues()) { 78 RandomValue j = null; 79 for (RandomValueHandler h : this.handlers) { 80 j = h.transform(i, this); 81 } 82 v.add(j); 83 } 84 return v; 85 } 86 87 88 protected List<Class> getValidRandomizerClasses() { 89 return validRandomizerClasses; 90 } 91 92 /** 93 * Produce a RandomValue for this Roll using dieConfig and everything else we know 94 * 95 * @param dieConfig Generall an Integer of the number of sides, but may be null or a stack of cards or something. Useful as the 96 * synchronization lock for this method call 97 * @param mapper 98 * @return a RandomValue instance 99 * @throws InvalidParameterException 100 */ 101 102 protected abstract RandomValue _getRandomValue(Object dieConfig, RandomValueResultMapper mapper) 103 throws InvalidParameterException; 104 105 }