1   /**
2    * Distribution License:
3    * JSword is free software; you can redistribute it and/or modify it under
4    * the terms of the GNU Lesser General Public License, version 2.1 as published by
5    * the Free Software Foundation. This program is distributed in the hope
6    * that it will be useful, but WITHOUT ANY WARRANTY; without even the
7    * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8    * See the GNU Lesser General Public License for more details.
9    *
10   * The License is available on the internet at:
11   *       http://www.gnu.org/copyleft/lgpl.html
12   * or by writing to:
13   *      Free Software Foundation, Inc.
14   *      59 Temple Place - Suite 330
15   *      Boston, MA 02111-1307, USA
16   *
17   * Copyright: 2005
18   *     The copyright to this program is held by it's authors.
19   *
20   * ID: $Id: StringOptionsChoice.java 2099 2011-03-07 17:13:00Z dmsmith $
21   */
22  package org.crosswire.common.config;
23  
24  import java.util.ResourceBundle;
25  
26  import org.crosswire.jsword.JSOtherMsg;
27  import org.jdom.Element;
28  
29  /**
30   * A class to convert between strings and objects of a type.
31   * 
32   * @see gnu.lgpl.License for license details.<br>
33   *      The copyright to this program is held by it's authors.
34   * @author Joe Walker [joe at eireneh dot com]
35   */
36  public class StringOptionsChoice extends AbstractReflectedChoice implements MultipleChoice {
37      /*
38       * (non-Javadoc)
39       * 
40       * @see org.crosswire.common.config.Choice#init(org.jdom.Element)
41       */
42      @Override
43      public void init(Element option, ResourceBundle configResources) throws StartupException {
44          super.init(option, configResources);
45          Element map = option.getChild("map");
46          if (map == null) {
47              throw new StartupException(JSOtherMsg.lookupText("Missing {0} element in config.xml", "map"));
48          }
49  
50          String name = map.getAttributeValue("name");
51          array = (String[]) ChoiceFactory.getDataMap().get(name);
52      }
53  
54      /*
55       * (non-Javadoc)
56       * 
57       * @see org.crosswire.common.config.MultipleChoice#getOptions()
58       */
59      public String[] getOptions() {
60          String[] copy = new String[array.length];
61          System.arraycopy(array, 0, copy, 0, array.length);
62          return copy;
63      }
64  
65      /*
66       * (non-Javadoc)
67       * 
68       * @see org.crosswire.common.config.Choice#getConvertionClass()
69       */
70      public Class<String> getConversionClass() {
71          return String.class;
72      }
73  
74      /*
75       * (non-Javadoc)
76       * 
77       * @see
78       * org.crosswire.common.config.AbstractReflectedChoice#convertToString(java
79       * .lang.Object)
80       */
81      @Override
82      public String convertToString(Object orig) {
83          return (String) orig;
84      }
85  
86      /*
87       * (non-Javadoc)
88       * 
89       * @see
90       * org.crosswire.common.config.AbstractReflectedChoice#convertToObject(java
91       * .lang.String)
92       */
93      @Override
94      public Object convertToObject(String orig) {
95          return orig;
96      }
97  
98      /**
99       * The options that we are presenting the user with
100      */
101     private String[] array;
102 }
103