1   
2   
3   
4   
5   
6   
7   package com.octo.captcha.engine.image;
8   
9   import java.util.Arrays;
10  
11  import com.octo.captcha.CaptchaException;
12  
13  /***
14   * <p>This engine is based on a java.util.List of factories. It has a default constructor. Sub class must implements the
15   * buildInitialFactories() method that should build an initial set of factories.</p>
16   *
17   * @author <a href="mailto:mag@jcaptcha.net">Marc-Antoine Garrigue</a>
18   * @version 1.0
19   */
20  public abstract class ListImageCaptchaEngine
21          extends com.octo.captcha.engine.image.ImageCaptchaEngine {    
22  
23      public ListImageCaptchaEngine() {
24          buildInitialFactories();
25          checkFactoriesSize();
26      }
27  
28      /***
29       * this method should be implemented as folow : <ul> <li>First construct all the factories you want to initialize
30       * the gimpy with</li> <li>then call the this.addFactoriy method for each factory</li> </ul>
31       */
32      protected abstract void buildInitialFactories();
33  
34      /***
35       * Add a factory to the gimpy list
36       *
37       * @return true if added false otherwise
38       */
39      public boolean addFactory(
40              com.octo.captcha.image.ImageCaptchaFactory factory) {
41          return factory != null && this.factories.add(factory);
42      }
43  
44      /***
45       * Add an array of factories to the gimpy list
46       */
47      public void addFactories(
48              com.octo.captcha.image.ImageCaptchaFactory[] factories) {
49          checkNotNullOrEmpty(factories);
50          this.factories.addAll(Arrays.asList(factories));
51      }
52  
53      private void checkFactoriesSize() {
54          if (factories.size() == 0)
55              throw new CaptchaException(
56                      "This gimpy has no factories. Please initialize it "
57                              + "properly with the buildInitialFactory() called by "
58                              + "the constructor or the addFactory() mehtod later!");
59      }
60  
61  }