View Javadoc

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 }