Changeset 18912


Ignore:
Timestamp:
2009-04-08T13:29:11+12:00 (15 years ago)
Author:
kjdon
Message:

reindented the file - it had horrible huge indentation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gli/trunk/src/org/greenstone/gatherer/cdm/Argument.java

    r18911 r18912  
    5151 */
    5252public class Argument
    53 implements Comparable, Serializable {
    54     /** An element of the argument type enumeration specifying a combobox control. */
    55     static final public byte ENUM = 0;
    56     /** An element of the argument type enumeration specifying a checkbox control. */
    57     static final public byte FLAG = 1;
    58     /** An element of the argument type enumeration specifying a tree control. */
    59     static final public byte HIERARCHY = 2;
    60     /** An element of the argument type enumeration specifying a spinner control. */
    61     static final public byte INTEGER = 3;
    62     /** An element of the argument type enumeration specifying a language combobox control. */
    63     static final public byte LANGUAGE = 4;
    64     /** An element of the argument type enumeration specifying a list control. */
    65     static final public byte METADATA = 5;
    66     /** An element of the argument type enumeration specifying a metadata combobox control. */
    67     static final public byte METADATUM = 6;
    68     /** An element of the argument type enumeration specifying a text field. */
    69     static final public byte STRING = 7;
    70     /** An element of the argument type enumeration specifying a regular expression text field. */
    71     static final public byte REGEXP = 8;
    72     /** An element of the argument type enumeration specifying a metadata set combobox control. */
    73     static final public byte METADATA_SET_NAMESPACE = 9;
    74     /** An element of the argument type enumeration specifying a text field. */
    75     static final public byte URL = 10;
     53  implements Comparable, Serializable {
     54  /** An element of the argument type enumeration specifying a combobox control. */
     55  static final public byte ENUM = 0;
     56  /** An element of the argument type enumeration specifying a checkbox control. */
     57  static final public byte FLAG = 1;
     58  /** An element of the argument type enumeration specifying a tree control. */
     59  static final public byte HIERARCHY = 2;
     60  /** An element of the argument type enumeration specifying a spinner control. */
     61  static final public byte INTEGER = 3;
     62  /** An element of the argument type enumeration specifying a language combobox control. */
     63  static final public byte LANGUAGE = 4;
     64  /** An element of the argument type enumeration specifying a list control. */
     65  static final public byte METADATA = 5;
     66  /** An element of the argument type enumeration specifying a metadata combobox control. */
     67  static final public byte METADATUM = 6;
     68  /** An element of the argument type enumeration specifying a text field. */
     69  static final public byte STRING = 7;
     70  /** An element of the argument type enumeration specifying a regular expression text field. */
     71  static final public byte REGEXP = 8;
     72  /** An element of the argument type enumeration specifying a metadata set combobox control. */
     73  static final public byte METADATA_SET_NAMESPACE = 9;
     74  /** An element of the argument type enumeration specifying a text field. */
     75  static final public byte URL = 10;
    7676  /** An editable combo box */
    7777  static final public byte ENUM_STRING = 11;
    7878
    79     /////////////////////////////////////////////////////////////////
    80 
    81     /** true if this argument should actually be hidden within the GLI. This is important for arguments such as import dir or other location critical arguments. */
    82     private boolean hidden_gli = false;
    83     /** <i>true</i> if this argument is required for the applicable script to work properly, <i>false</i> otherwise. */
    84     private boolean required = false;
    85     /** The type of this argument. Used to be an int, but bytes are cheaper. */
    86     private byte type = STRING;
    87     /** The maximum value an integer based control can have. */
    88     private int maximum = Integer.MAX_VALUE;
    89     /** The minimum value an integer based control can have. */
    90     private int minimum = Integer.MIN_VALUE;
    91     /** Every argument has a detail mode level at which it becomes available to the user to edit.
    92      * @see org.greenstone.gatherer.Configuration
    93      */
    94     private int mode_level = Configuration.LIBRARIAN_MODE;
    95     /** The DOM element this argument is built around, if any. */
    96     private Element element;
    97     /** If the argument is of type ENUM or ENUM_STRING then this map holds all the various options. Each entry is an &lt;option value&gt; -&gt; &lt;description&gt; mapping. */
    98     private ArrayList option_list = null;
    99     /** A default value for parameter-type arguments. May be a Perl pattern. */
    100     private String default_value = null;
    101     /** The text description of this argument parsed from the pluginfo output. */
    102     private String description = null;
    103     /** The argument flag as it appears in the command. Also used as the unique identifier of an argument. */
    104     private String name = null;
    105     /** The plugin that owns this argument, for the purposes of visualising inheritance. */
    106     private String owner = null;
    107 
    108     private String display_name = null;
    109 
    110     /** Default Constructor. */
    111     public Argument() {
     79  /////////////////////////////////////////////////////////////////
     80
     81  /** true if this argument should actually be hidden within the GLI. This is important for arguments such as import dir or other location critical arguments. */
     82  private boolean hidden_gli = false;
     83  /** <i>true</i> if this argument is required for the applicable script to work properly, <i>false</i> otherwise. */
     84  private boolean required = false;
     85  /** The type of this argument. Used to be an int, but bytes are cheaper. */
     86  private byte type = STRING;
     87  /** The maximum value an integer based control can have. */
     88  private int maximum = Integer.MAX_VALUE;
     89  /** The minimum value an integer based control can have. */
     90  private int minimum = Integer.MIN_VALUE;
     91  /** Every argument has a detail mode level at which it becomes available to the user to edit.
     92   * @see org.greenstone.gatherer.Configuration
     93   */
     94  private int mode_level = Configuration.LIBRARIAN_MODE;
     95  /** The DOM element this argument is built around, if any. */
     96  private Element element;
     97  /** If the argument is of type ENUM or ENUM_STRING then this map holds all the various options. Each entry is an &lt;option value&gt; -&gt; &lt;description&gt; mapping. */
     98  private ArrayList option_list = null;
     99  /** A default value for parameter-type arguments. May be a Perl pattern. */
     100  private String default_value = null;
     101  /** The text description of this argument parsed from the pluginfo output. */
     102  private String description = null;
     103  /** The argument flag as it appears in the command. Also used as the unique identifier of an argument. */
     104  private String name = null;
     105  /** The plugin that owns this argument, for the purposes of visualising inheritance. */
     106  private String owner = null;
     107
     108  private String display_name = null;
     109
     110  /** Default Constructor. */
     111  public Argument() {
     112  }
     113
     114  /** Another constructor but this one is a little more interesting as it takes a DOM element.
     115   * @param element the Element this argument is based around
     116   */
     117  public Argument(Element element) {
     118    this.element = element;
     119  }
     120
     121  /** Method to add an element to the option_list.
     122   * @param name the name value of the option as a String
     123   * @param desc the description of this options as a String
     124   */
     125  public void addOption(String name, String desc) {
     126    if((type == ENUM || type == ENUM_STRING) && name != null) {
     127      if(desc == null) {
     128    desc = "";
     129      }
     130      if(option_list == null) {
     131    option_list = new ArrayList();
     132      }
     133      option_list.add(new ArgumentOption(name, desc));
     134    }
     135  }
     136
     137  /** Method to compare two arguments for ordering.
     138   * @param object the argument we are comparing to, as an Object
     139   * @return an int specifying the argument order, using values as set out in String
     140   * @see org.greenstone.gatherer.cdm.Argument
     141   */
     142  public int compareTo(Object object) {
     143    if(object instanceof Argument) {
     144      return getName().compareTo(((Argument)object).getName());
     145    }
     146    else {
     147      return toString().compareTo(object.toString());
     148    }
     149  }
     150
     151  /** Create a copy of this argument.
     152   * @return a newly created Argument with the same details as this one
     153   */
     154  public Argument copy() {
     155    Argument copy = new Argument();
     156    copy.setDefaultValue(default_value);
     157    copy.setDescription(description);
     158    copy.setOptions(option_list);
     159    copy.setOwner(owner);
     160    copy.setName(name);     
     161    copy.setDisplayName(display_name);
     162    copy.setRequired(required);
     163    copy.setType(type);
     164    copy.setMinimum(minimum);
     165    copy.setMaximum(maximum);
     166    copy.setModeLevel(mode_level);
     167    copy.setHiddenGLI(hidden_gli);
     168    return copy;
     169  }
     170
     171  /** Method to determine if two arguments are equal.
     172   * @param object the argument to test against, as an Object
     173   * @return true if the arguments names match, false otherwise
     174   */
     175  public boolean equals(Object object) {
     176    return (compareTo(object) == 0);
     177  }
     178
     179  /** Method to retrieve the value of default_value.
     180   * @return a String containing the default value
     181   */
     182  public String getDefaultValue() {
     183    return default_value;
     184  }
     185
     186  /** Method to retrieve this arguments description.
     187   * @return a String containing the description
     188   */
     189  public String getDescription() {
     190    return description;
     191  }
     192
     193  public Element getElement() {
     194    return element;
     195  }
     196  /** Retrieve the upper bound of a range based argument.
     197   * @return the maximum as an int
     198   */
     199  public int getMaximum() {
     200    return maximum;
     201  }
     202
     203  /** Retrieve the lower bound of a range based argument.
     204   * @return the minimum as an int
     205   */
     206  public int getMinimum() {
     207    return minimum;
     208  }
     209
     210  /** Retrieves the mode level at which this argument should become available. Any higher levels should also see this argument.
     211   * @return the mode level as an int
     212   */
     213  public int getModeLevel() {
     214    return mode_level;
     215  }
     216
     217  /** Method to retrieve the value of name.
     218   * @return a String containing the argument name
     219   * @see org.greenstone.gatherer.util.StaticStrings#NAME_ATTRIBUTE
     220   */
     221  public String getName() {
     222    if(name == null && element != null) {
     223      name = element.getAttribute(StaticStrings.NAME_ATTRIBUTE);
     224    }
     225    return name;
     226  }
     227
     228  public String getDisplayName() {
     229    if(display_name==null)
     230      return "";
     231    return display_name;
     232  }
     233
     234  /** Method to retrieve the option list for this argument.
     235   * @return a HashMap containing &lt;option value&gt; -&gt; &lt;description&gt; entries
     236   */
     237  public ArrayList getOptions() {
     238    return option_list;
     239  }
     240
     241  /** Retrieve the name of the owner of this argument.
     242   * @return the owners name as a String
     243   */
     244  public String getOwner() {
     245    return owner;
     246  }
     247
     248  /** Method to determine the type of this argument.
     249   * @return a byte specifying the type
     250   */
     251  public byte getType() {
     252    return type;
     253  }
     254
     255  /** Method to retrieve the value of value.
     256   * @return the value of value as a String
     257   * @see org.greenstone.gatherer.Gatherer#c_man
     258   * @see org.greenstone.gatherer.collection.CollectionManager#getCollection
     259   */
     260  public String getValue()
     261  {
     262    // Only assigned arguments have values.
     263    if (element == null) {
     264      return null;
     265    }
     266
     267    return XMLTools.getValue(element);
     268  }
     269
     270
     271  /** Method to determine if this argument has been assigned.
     272   * @return true if it has, false otherwise
     273   * @see org.greenstone.gatherer.util.StaticStrings#ASSIGNED_ATTRIBUTE
     274   * @see org.greenstone.gatherer.util.StaticStrings#TRUE_STR
     275   */
     276  public boolean isAssigned() {
     277    return (element != null && element.getAttribute(StaticStrings.ASSIGNED_ATTRIBUTE).equals(StaticStrings.TRUE_STR));
     278  }
     279
     280  /** Determine if this is a custom argument ie one that has been parsed from the config file but doesn't have a matching entry in the argument library.
     281   * @return true if this argument is a custom, false otherwise
     282   * @see org.greenstone.gatherer.util.StaticStrings#CUSTOM_ATTRIBUTE
     283   * @see org.greenstone.gatherer.util.StaticStrings#TRUE_STR
     284   */
     285  public boolean isCustomArgument() {
     286    return (element != null && element.getAttribute(StaticStrings.CUSTOM_ATTRIBUTE).equals(StaticStrings.TRUE_STR));
     287  }
     288
     289  /** Determine if this argument is hidden in GLI
     290   * @return true if the argument is hidden, false otherwise
     291   */
     292  public boolean isHiddenGLI() {
     293    return hidden_gli;
     294  }
     295
     296  /** Method to determine of this argument is required for the associated script to work.
     297   * @return true if this argument is required, false otherwise
     298   */
     299  public boolean isRequired() {
     300    return required;
     301  }
     302
     303  /** Method to allow for the activation of arguments that might never have their setValue() method called.
     304   * @param assigned the desired state as a boolean
     305   * @see org.greenstone.gatherer.util.StaticStrings#ASSIGNED_ATTRIBUTE
     306   * @see org.greenstone.gatherer.util.StaticStrings#FALSE_STR
     307   * @see org.greenstone.gatherer.util.StaticStrings#TRUE_STR
     308   */
     309  public void setAssigned(boolean assigned) {
     310    if(element != null) {
     311      element.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, (assigned ? StaticStrings.TRUE_STR : StaticStrings.FALSE_STR));
     312    }
     313  }
     314
     315  /** Sets the value of default_value.
     316   * @param default_value The new value for default_value as a <strong>String</strong>.
     317   */
     318  public void setDefaultValue(String default_value) {
     319    this.default_value = default_value;
     320  }
     321
     322  /** Set the value of desc.
     323   * @param description the new value of desc as a String
     324   */
     325  public void setDescription(String description) {
     326    this.description = description;
     327  }
     328
     329  /** Set the element this argument should be based upon.
     330   * @param element the Element
     331   */
     332  public void setElement(Element element) {
     333    this.element = element;
     334  }
     335
     336  /** Mark this argument as being hidden in GLI. */
     337  public void setHiddenGLI(boolean hidden) {
     338    this.hidden_gli = hidden;
     339  }
     340
     341  /** Set the upper bound for a range type argument.
     342   * @param maximum the maximum as an int
     343   */
     344  public void setMaximum(int maximum) {
     345    this.maximum = maximum;
     346  }
     347
     348  /** Set the lower bound for a range type argument.
     349   * @param minimum the minimum as an int
     350   */
     351  public void setMinimum(int minimum) {
     352    this.minimum = minimum;
     353  }
     354
     355  /** Set the detail mode level where this argument will become available.
     356   * @param mode_level the mode level as an int
     357   */
     358  public void setModeLevel(int mode_level) {
     359    this.mode_level = mode_level;
     360  }
     361
     362  /** Set the value of name.
     363   * @param name the new value of name as a String
     364   */
     365  public void setName(String name) {
     366    this.name = name;
     367  }
     368   
     369  public void setDisplayName(String name) {     
     370    this.display_name = name;
     371  }
     372
     373  /** Sets the value of the options list.
     374   * @param list the new options list as a HashMap
     375   */
     376  public void setOptions(ArrayList list) {
     377    this.option_list = list;
     378  }
     379
     380  /** Set the owner of this argument.
     381   * @param owner the name of the owner of this argument as a String
     382   */
     383  public void setOwner(String owner) {
     384    this.owner = owner;
     385  }
     386
     387  /** Set the value of required.
     388   * @param required the new value of required as a boolean
     389   */
     390  public void setRequired(boolean required) {
     391    this.required = required;
     392  }
     393
     394  /** Set the value of type.
     395   * @param type the new value of type as an byte
     396   */
     397  public void setType(byte type) {
     398    this.type = type;
     399  }
     400
     401  /** Set the value of type, by matching a type to the given string.
     402   * @param new_type a String which contains the name of a certain argument type
     403   * @see org.greenstone.gatherer.util.StaticStrings#ENUM_STR
     404   * @see org.greenstone.gatherer.util.StaticStrings#FLAG_STR
     405   * @see org.greenstone.gatherer.util.StaticStrings#HIERARCHY_STR
     406   * @see org.greenstone.gatherer.util.StaticStrings#INT_STR
     407   * @see org.greenstone.gatherer.util.StaticStrings#LANGUAGE_STR
     408   * @see org.greenstone.gatherer.util.StaticStrings#METADATA_TYPE_STR
     409   * @see org.greenstone.gatherer.util.StaticStrings#METADATUM_TYPE_STR
     410   * @see org.greenstone.gatherer.util.StaticStrings#REGEXP_STR
     411   */
     412  public void setType(String new_type) {
     413    if(new_type.equalsIgnoreCase(StaticStrings.ENUM_STR)) {
     414      this.type = ENUM;
     415      option_list = new ArrayList();
     416    }
     417    else if(new_type.equalsIgnoreCase(StaticStrings.ENUM_STRING_STR)) {
     418      this.type = ENUM_STRING;
     419      option_list = new ArrayList();
     420    }
     421    else if(new_type.equalsIgnoreCase(StaticStrings.FLAG_STR)) {
     422      this.type = FLAG;
     423    }
     424    else if(new_type.equalsIgnoreCase(StaticStrings.HIERARCHY_STR)) {
     425      this.type = HIERARCHY;
     426    }
     427    else if(new_type.equalsIgnoreCase(StaticStrings.INT_STR)) {
     428      this.type = INTEGER;
     429    }
     430    else if(new_type.equalsIgnoreCase(StaticStrings.LANGUAGE_STR)) {
     431      this.type = LANGUAGE;
     432    }
     433    else if(new_type.equalsIgnoreCase(StaticStrings.METADATA_TYPE_STR)) {
     434      this.type = METADATA;
     435    }
     436    else if(new_type.equalsIgnoreCase(StaticStrings.METADATUM_TYPE_STR)) {
     437      this.type = METADATUM;
     438    }
     439    else if(new_type.equalsIgnoreCase(StaticStrings.REGEXP_STR)) {
     440      this.type = REGEXP;
     441    }
     442    else {
     443      this.type = STRING;
     444    }
     445  }
     446
     447  /** Method to set the value of this argument.
     448   * @param value the new value for the argument
     449   * @see org.greenstone.gatherer.Gatherer#println
     450   */
     451  public void setValue(String value) {
     452    if(element != null) {
     453      XMLTools.setValue(element, value);
     454    }
     455    else {
     456      DebugStream.println("Argument.setValue(" + value + ") called on a base Argument.");
     457    }
     458  }
     459
     460  /** Set the values vector to the given values. Currently I just assign the new values, whereas I may later want to implement a deep clone.
     461   * @param values an ArrayList of values
     462   * @see org.greenstone.gatherer.Gatherer#println
     463   */
     464  public void setValues(ArrayList values) {
     465    if(element != null) {
     466      StringBuffer value = new StringBuffer();
     467      int value_length = values.size();
     468      for(int i = 0; i < value_length; i++) {
     469    value.append(values.get(i));
     470    value.append(StaticStrings.COMMA_CHARACTER);
     471      }
     472      value.deleteCharAt(value.length() - 1); // Remove last ','
     473      XMLTools.setValue(element, value.toString());
     474    }
     475    else {
     476      DebugStream.println("Argument.setValues([" + values.size() + " items]) called on a base Argument.");
     477    }
     478  }
     479
     480  /** Method for translating the data of this class into a string.
     481   * @return a String containing a fragment of the total arguments string
     482   * @see org.greenstone.gatherer.Gatherer#c_man
     483   * @see org.greenstone.gatherer.collection.CollectionManager#getCollection
     484   * @see org.greenstone.gatherer.util.StaticStrings#COMMA_CHARACTER
     485   * @see org.greenstone.gatherer.util.StaticStrings#NAME_ATTRIBUTE
     486   * @see org.greenstone.gatherer.util.StaticStrings#SPACE_CHARACTER
     487   * @see org.greenstone.gatherer.util.StaticStrings#SPEECH_CHARACTER
     488   */
     489  public String toString()
     490  {
     491    StringBuffer text = new StringBuffer("-");
     492
     493    if (element == null) {
     494      return text.toString();
     495    }
     496
     497    if (name == null) {
     498      name = element.getAttribute(StaticStrings.NAME_ATTRIBUTE);
     499    }
     500    text.append(name);
     501
     502    String value = XMLTools.getValue(element);
     503    if (value.length() == 0) {
     504      return text.toString();
     505    }
     506
     507    text.append(StaticStrings.SPACE_CHARACTER);
     508
     509    //      // Handle metadata elements specially
     510    //      if (type == METADATA || type == METADATUM) {
     511    //      // Tokenize the string
     512    //      StringTokenizer tokenizer = new StringTokenizer(value, ",");
     513    //      while (tokenizer.hasMoreTokens()) {
     514    //      String token = tokenizer.nextToken();
     515
     516    //      MetadataElement metadata_element = MetadataTools.getMetadataElementWithDisplayName(token);
     517    //      if (metadata_element != null) {
     518    //      text.append(metadata_element.getFullName());
     519    //      }
     520    //      else {
     521    //      text.append(token);
     522    //      }
     523
     524    //      if (tokenizer.hasMoreTokens()) {
     525    //      text.append(StaticStrings.COMMA_CHARACTER);
     526    //      }
     527    //      }
     528    //      return text.toString();
     529    //      }
     530
     531    // If the value contains a space, add speech marks
     532    //   (Except for metadata elements, which won't have spaces when written out to collect.cfg)
     533    if (value.indexOf(StaticStrings.SPACE_CHARACTER) != -1 && !(type == METADATUM || type == METADATA)) {
     534      value = StaticStrings.SPEECH_CHARACTER + value + StaticStrings.SPEECH_CHARACTER;
     535    }
     536
     537    text.append(value);
     538    return text.toString();
     539  }
     540
     541  /** parse the <Option> XML from eg import.pl -xml or pluginfo.pl -xml */
     542  public void parseXML(Element option) {
     543
     544    for(Node node = option.getFirstChild(); node != null; node = node.getNextSibling()) {
     545      String node_name = node.getNodeName();
     546      if(node_name.equals("Name")) {
     547    setName(XMLTools.getValue(node));
     548      }
     549      else if(node_name.equals("DisplayName")) {
     550    setDisplayName(XMLTools.getValue(node));
     551      }
     552      else if(node_name.equals("Desc")) {
     553    setDescription(XMLTools.getValue(node));
     554      }
     555      else if(node_name.equals("Type")) {
     556    setType(XMLTools.getValue(node));
     557      }
     558      else if(node_name.equals("Default")) {
     559    setDefaultValue(XMLTools.getValue(node));
     560      }
     561      else if(node_name.equals("Required")) {
     562    String v = XMLTools.getValue(node);
     563    if(v != null && v.equals("yes")) {
     564      setRequired(true);
    112565    }
    113 
    114     /** Another constructor but this one is a little more interesting as it takes a DOM element.
    115      * @param element the Element this argument is based around
    116      */
    117     public Argument(Element element) {
    118         this.element = element;
     566      }
     567      else if(node_name.equals("List")) {
     568    // Two final loops are required to parse lists.
     569    for(Node value = node.getFirstChild(); value != null; value = value.getNextSibling()) {
     570      if(value.getNodeName().equals("Value")) {
     571        String key = null;
     572        String desc = "";
     573        for(Node subvalue = value.getFirstChild(); subvalue != null; subvalue = subvalue.getNextSibling()) {
     574          node_name = subvalue.getNodeName();
     575          if(node_name.equals("Name")) {
     576        key = XMLTools.getValue(subvalue);
     577          }
     578          else if(node_name.equals("Desc")) {
     579        desc = XMLTools.getValue(subvalue);
     580          }
     581        }
     582        if(key != null) {
     583          addOption(key, desc);
     584        }
     585      }
    119586    }
    120 
    121     /** Method to add an element to the option_list.
    122      * @param name the name value of the option as a String
    123      * @param desc the description of this options as a String
    124      */
    125     public void addOption(String name, String desc) {
    126       if((type == ENUM || type == ENUM_STRING) && name != null) {
    127             if(desc == null) {
    128                 desc = "";
    129             }
    130             if(option_list == null) {
    131                 option_list = new ArrayList();
    132             }
    133             option_list.add(new ArgumentOption(name, desc));
    134         }
     587      }
     588      else if(node_name.equals("Range")) {
     589    String range_raw = XMLTools.getValue(node);
     590    int index = -1;
     591    if((index = range_raw.indexOf(StaticStrings.COMMA_CHARACTER)) != -1) {
     592      if(index > 0) {
     593        try {
     594          String first_number = range_raw.substring(0, index);
     595          setMinimum(Integer.parseInt(first_number));
     596          first_number = null;
     597        }
     598        catch(Exception exception) {
     599        }
     600      }
     601
     602      if(index + 1 < range_raw.length()) {
     603        try {
     604          String second_number = range_raw.substring(index + 1);
     605          setMaximum(Integer.parseInt(second_number));
     606          second_number = null;   
     607        }
     608        catch(Exception exception) {
     609        }
     610      }
    135611    }
    136 
    137     /** Method to compare two arguments for ordering.
    138      * @param object the argument we are comparing to, as an Object
    139      * @return an int specifying the argument order, using values as set out in String
    140      * @see org.greenstone.gatherer.cdm.Argument
    141      */
    142     public int compareTo(Object object) {
    143         if(object instanceof Argument) {
    144             return getName().compareTo(((Argument)object).getName());
    145         }
    146         else {
    147             return toString().compareTo(object.toString());
    148         }
     612    // Else it wasn't a valid range anyway, so ignore it
     613      }
     614      else if(node_name.equals("HiddenGLI")) {
     615    setHiddenGLI(true);
     616      }
     617      else if(node_name.equals("ModeGLI")) {
     618    String mode_level_str = XMLTools.getValue(node);
     619    try {
     620      int mode_level = Integer.parseInt(mode_level_str);
     621      setModeLevel(mode_level);
    149622    }
    150 
    151     /** Create a copy of this argument.
    152      * @return a newly created Argument with the same details as this one
    153      */
    154     public Argument copy() {
    155         Argument copy = new Argument();
    156         copy.setDefaultValue(default_value);
    157         copy.setDescription(description);
    158         copy.setOptions(option_list);
    159         copy.setOwner(owner);
    160         copy.setName(name);     
    161         copy.setDisplayName(display_name);
    162         copy.setRequired(required);
    163         copy.setType(type);
    164         copy.setMinimum(minimum);
    165         copy.setMaximum(maximum);
    166         copy.setModeLevel(mode_level);
    167         copy.setHiddenGLI(hidden_gli);
    168         return copy;
     623    catch(Exception exception) {
     624      DebugStream.println("Exception in Argument.parseXML() - Unexpected but non-fatal");
     625      DebugStream.printStackTrace(exception);
    169626    }
    170 
    171     /** Method to determine if two arguments are equal.
    172      * @param object the argument to test against, as an Object
    173      * @return true if the arguments names match, false otherwise
    174      */
    175     public boolean equals(Object object) {
    176         return (compareTo(object) == 0);
    177     }
    178 
    179     /** Method to retrieve the value of default_value.
    180      * @return a String containing the default value
    181      */
    182     public String getDefaultValue() {
    183         return default_value;
    184     }
    185 
    186     /** Method to retrieve this arguments description.
    187      * @return a String containing the description
    188      */
    189     public String getDescription() {
    190         return description;
    191     }
    192 
    193     public Element getElement() {
    194         return element;
    195     }
    196     /** Retrieve the upper bound of a range based argument.
    197      * @return the maximum as an int
    198      */
    199     public int getMaximum() {
    200         return maximum;
    201     }
    202 
    203     /** Retrieve the lower bound of a range based argument.
    204      * @return the minimum as an int
    205      */
    206     public int getMinimum() {
    207         return minimum;
    208     }
    209 
    210     /** Retrieves the mode level at which this argument should become available. Any higher levels should also see this argument.
    211      * @return the mode level as an int
    212      */
    213     public int getModeLevel() {
    214         return mode_level;
    215     }
    216 
    217     /** Method to retrieve the value of name.
    218      * @return a String containing the argument name
    219      * @see org.greenstone.gatherer.util.StaticStrings#NAME_ATTRIBUTE
    220      */
    221     public String getName() {
    222         if(name == null && element != null) {
    223             name = element.getAttribute(StaticStrings.NAME_ATTRIBUTE);
    224         }
    225         return name;
    226     }
    227 
    228     public String getDisplayName() {
    229         if(display_name==null)
    230             return "";
    231         return display_name;
    232     }
    233 
    234     /** Method to retrieve the option list for this argument.
    235      * @return a HashMap containing &lt;option value&gt; -&gt; &lt;description&gt; entries
    236      */
    237     public ArrayList getOptions() {
    238         return option_list;
    239     }
    240 
    241     /** Retrieve the name of the owner of this argument.
    242      * @return the owners name as a String
    243      */
    244     public String getOwner() {
    245         return owner;
    246     }
    247 
    248     /** Method to determine the type of this argument.
    249      * @return a byte specifying the type
    250      */
    251     public byte getType() {
    252         return type;
    253     }
    254 
    255     /** Method to retrieve the value of value.
    256      * @return the value of value as a String
    257      * @see org.greenstone.gatherer.Gatherer#c_man
    258      * @see org.greenstone.gatherer.collection.CollectionManager#getCollection
    259      */
    260     public String getValue()
    261     {
    262         // Only assigned arguments have values.
    263         if (element == null) {
    264             return null;
    265         }
    266 
    267         return XMLTools.getValue(element);
    268     }
    269 
    270 
    271     /** Method to determine if this argument has been assigned.
    272      * @return true if it has, false otherwise
    273      * @see org.greenstone.gatherer.util.StaticStrings#ASSIGNED_ATTRIBUTE
    274      * @see org.greenstone.gatherer.util.StaticStrings#TRUE_STR
    275      */
    276     public boolean isAssigned() {
    277         return (element != null && element.getAttribute(StaticStrings.ASSIGNED_ATTRIBUTE).equals(StaticStrings.TRUE_STR));
    278     }
    279 
    280     /** Determine if this is a custom argument ie one that has been parsed from the config file but doesn't have a matching entry in the argument library.
    281      * @return true if this argument is a custom, false otherwise
    282      * @see org.greenstone.gatherer.util.StaticStrings#CUSTOM_ATTRIBUTE
    283      * @see org.greenstone.gatherer.util.StaticStrings#TRUE_STR
    284      */
    285     public boolean isCustomArgument() {
    286         return (element != null && element.getAttribute(StaticStrings.CUSTOM_ATTRIBUTE).equals(StaticStrings.TRUE_STR));
    287     }
    288 
    289     /** Determine if this argument is hidden in GLI
    290      * @return true if the argument is hidden, false otherwise
    291      */
    292     public boolean isHiddenGLI() {
    293         return hidden_gli;
    294     }
    295 
    296     /** Method to determine of this argument is required for the associated script to work.
    297      * @return true if this argument is required, false otherwise
    298      */
    299     public boolean isRequired() {
    300         return required;
    301     }
    302 
    303     /** Method to allow for the activation of arguments that might never have their setValue() method called.
    304      * @param assigned the desired state as a boolean
    305      * @see org.greenstone.gatherer.util.StaticStrings#ASSIGNED_ATTRIBUTE
    306      * @see org.greenstone.gatherer.util.StaticStrings#FALSE_STR
    307      * @see org.greenstone.gatherer.util.StaticStrings#TRUE_STR
    308      */
    309     public void setAssigned(boolean assigned) {
    310         if(element != null) {
    311             element.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, (assigned ? StaticStrings.TRUE_STR : StaticStrings.FALSE_STR));
    312         }
    313     }
    314 
    315     /** Sets the value of default_value.
    316      * @param default_value The new value for default_value as a <strong>String</strong>.
    317      */
    318     public void setDefaultValue(String default_value) {
    319         this.default_value = default_value;
    320     }
    321 
    322     /** Set the value of desc.
    323      * @param description the new value of desc as a String
    324      */
    325     public void setDescription(String description) {
    326         this.description = description;
    327     }
    328 
    329     /** Set the element this argument should be based upon.
    330      * @param element the Element
    331      */
    332     public void setElement(Element element) {
    333         this.element = element;
    334     }
    335 
    336     /** Mark this argument as being hidden in GLI. */
    337     public void setHiddenGLI(boolean hidden) {
    338         this.hidden_gli = hidden;
    339     }
    340 
    341     /** Set the upper bound for a range type argument.
    342      * @param maximum the maximum as an int
    343      */
    344     public void setMaximum(int maximum) {
    345         this.maximum = maximum;
    346     }
    347 
    348     /** Set the lower bound for a range type argument.
    349      * @param minimum the minimum as an int
    350      */
    351     public void setMinimum(int minimum) {
    352         this.minimum = minimum;
    353     }
    354 
    355     /** Set the detail mode level where this argument will become available.
    356      * @param mode_level the mode level as an int
    357      */
    358     public void setModeLevel(int mode_level) {
    359         this.mode_level = mode_level;
    360     }
    361 
    362     /** Set the value of name.
    363      * @param name the new value of name as a String
    364      */
    365     public void setName(String name) {
    366         this.name = name;
    367     }
    368    
    369     public void setDisplayName(String name) {       
    370         this.display_name = name;
    371     }   
    372 
    373     /** Sets the value of the options list.
    374      * @param list the new options list as a HashMap
    375      */
    376     public void setOptions(ArrayList list) {
    377         this.option_list = list;
    378     }
    379 
    380     /** Set the owner of this argument.
    381      * @param owner the name of the owner of this argument as a String
    382      */
    383     public void setOwner(String owner) {
    384         this.owner = owner;
    385     }
    386 
    387     /** Set the value of required.
    388      * @param required the new value of required as a boolean
    389      */
    390     public void setRequired(boolean required) {
    391         this.required = required;
    392     }
    393 
    394     /** Set the value of type.
    395      * @param type the new value of type as an byte
    396      */
    397     public void setType(byte type) {
    398         this.type = type;
    399     }
    400 
    401     /** Set the value of type, by matching a type to the given string.
    402      * @param new_type a String which contains the name of a certain argument type
    403      * @see org.greenstone.gatherer.util.StaticStrings#ENUM_STR
    404      * @see org.greenstone.gatherer.util.StaticStrings#FLAG_STR
    405      * @see org.greenstone.gatherer.util.StaticStrings#HIERARCHY_STR
    406      * @see org.greenstone.gatherer.util.StaticStrings#INT_STR
    407      * @see org.greenstone.gatherer.util.StaticStrings#LANGUAGE_STR
    408      * @see org.greenstone.gatherer.util.StaticStrings#METADATA_TYPE_STR
    409      * @see org.greenstone.gatherer.util.StaticStrings#METADATUM_TYPE_STR
    410      * @see org.greenstone.gatherer.util.StaticStrings#REGEXP_STR
    411      */
    412     public void setType(String new_type) {
    413         if(new_type.equalsIgnoreCase(StaticStrings.ENUM_STR)) {
    414             this.type = ENUM;
    415             option_list = new ArrayList();
    416         }
    417         else if(new_type.equalsIgnoreCase(StaticStrings.ENUM_STRING_STR)) {
    418             this.type = ENUM_STRING;
    419             option_list = new ArrayList();
    420         }
    421         else if(new_type.equalsIgnoreCase(StaticStrings.FLAG_STR)) {
    422             this.type = FLAG;
    423         }
    424         else if(new_type.equalsIgnoreCase(StaticStrings.HIERARCHY_STR)) {
    425             this.type = HIERARCHY;
    426         }
    427         else if(new_type.equalsIgnoreCase(StaticStrings.INT_STR)) {
    428             this.type = INTEGER;
    429         }
    430         else if(new_type.equalsIgnoreCase(StaticStrings.LANGUAGE_STR)) {
    431             this.type = LANGUAGE;
    432         }
    433         else if(new_type.equalsIgnoreCase(StaticStrings.METADATA_TYPE_STR)) {
    434             this.type = METADATA;
    435         }
    436         else if(new_type.equalsIgnoreCase(StaticStrings.METADATUM_TYPE_STR)) {
    437             this.type = METADATUM;
    438         }
    439         else if(new_type.equalsIgnoreCase(StaticStrings.REGEXP_STR)) {
    440             this.type = REGEXP;
    441         }
    442         else {
    443             this.type = STRING;
    444         }
    445     }
    446 
    447     /** Method to set the value of this argument.
    448      * @param value the new value for the argument
    449      * @see org.greenstone.gatherer.Gatherer#println
    450      */
    451     public void setValue(String value) {
    452         if(element != null) {
    453             XMLTools.setValue(element, value);
    454         }
    455         else {
    456             DebugStream.println("Argument.setValue(" + value + ") called on a base Argument.");
    457         }
    458     }
    459 
    460     /** Set the values vector to the given values. Currently I just assign the new values, whereas I may later want to implement a deep clone.
    461      * @param values an ArrayList of values
    462      * @see org.greenstone.gatherer.Gatherer#println
    463      */
    464     public void setValues(ArrayList values) {
    465         if(element != null) {
    466             StringBuffer value = new StringBuffer();
    467             int value_length = values.size();
    468             for(int i = 0; i < value_length; i++) {
    469                 value.append(values.get(i));
    470                 value.append(StaticStrings.COMMA_CHARACTER);
    471             }
    472             value.deleteCharAt(value.length() - 1); // Remove last ','
    473             XMLTools.setValue(element, value.toString());
    474         }
    475         else {
    476             DebugStream.println("Argument.setValues([" + values.size() + " items]) called on a base Argument.");
    477         }
    478     }
    479 
    480     /** Method for translating the data of this class into a string.
    481      * @return a String containing a fragment of the total arguments string
    482      * @see org.greenstone.gatherer.Gatherer#c_man
    483      * @see org.greenstone.gatherer.collection.CollectionManager#getCollection
    484      * @see org.greenstone.gatherer.util.StaticStrings#COMMA_CHARACTER
    485      * @see org.greenstone.gatherer.util.StaticStrings#NAME_ATTRIBUTE
    486      * @see org.greenstone.gatherer.util.StaticStrings#SPACE_CHARACTER
    487      * @see org.greenstone.gatherer.util.StaticStrings#SPEECH_CHARACTER
    488      */
    489     public String toString()
    490     {
    491         StringBuffer text = new StringBuffer("-");
    492 
    493         if (element == null) {
    494             return text.toString();
    495         }
    496 
    497         if (name == null) {
    498             name = element.getAttribute(StaticStrings.NAME_ATTRIBUTE);
    499         }
    500         text.append(name);
    501 
    502         String value = XMLTools.getValue(element);
    503         if (value.length() == 0) {
    504             return text.toString();
    505         }
    506 
    507         text.append(StaticStrings.SPACE_CHARACTER);
    508 
    509 //      // Handle metadata elements specially
    510 //      if (type == METADATA || type == METADATUM) {
    511 //      // Tokenize the string
    512 //      StringTokenizer tokenizer = new StringTokenizer(value, ",");
    513 //      while (tokenizer.hasMoreTokens()) {
    514 //      String token = tokenizer.nextToken();
    515 
    516 //      MetadataElement metadata_element = MetadataTools.getMetadataElementWithDisplayName(token);
    517 //      if (metadata_element != null) {
    518 //      text.append(metadata_element.getFullName());
    519 //      }
    520 //      else {
    521 //      text.append(token);
    522 //      }
    523 
    524 //      if (tokenizer.hasMoreTokens()) {
    525 //      text.append(StaticStrings.COMMA_CHARACTER);
    526 //      }
    527 //      }
    528 //      return text.toString();
    529 //      }
    530 
    531         // If the value contains a space, add speech marks
    532         //   (Except for metadata elements, which won't have spaces when written out to collect.cfg)
    533         if (value.indexOf(StaticStrings.SPACE_CHARACTER) != -1 && !(type == METADATUM || type == METADATA)) {
    534             value = StaticStrings.SPEECH_CHARACTER + value + StaticStrings.SPEECH_CHARACTER;
    535         }
    536 
    537         text.append(value);
    538         return text.toString();
    539     }
    540 
    541     /** parse the <Option> XML from eg import.pl -xml or pluginfo.pl -xml */
    542     public void parseXML(Element option) {
    543 
    544         for(Node node = option.getFirstChild(); node != null; node = node.getNextSibling()) {
    545             String node_name = node.getNodeName();
    546             if(node_name.equals("Name")) {
    547                 setName(XMLTools.getValue(node));
    548             }
    549             else if(node_name.equals("DisplayName")) {
    550                 setDisplayName(XMLTools.getValue(node));
    551             }
    552             else if(node_name.equals("Desc")) {
    553                 setDescription(XMLTools.getValue(node));
    554             }
    555             else if(node_name.equals("Type")) {
    556                 setType(XMLTools.getValue(node));
    557             }
    558             else if(node_name.equals("Default")) {
    559                 setDefaultValue(XMLTools.getValue(node));
    560             }
    561             else if(node_name.equals("Required")) {
    562                 String v = XMLTools.getValue(node);
    563                 if(v != null && v.equals("yes")) {
    564                     setRequired(true);
    565                 }
    566             }
    567             else if(node_name.equals("List")) {
    568                 // Two final loops are required to parse lists.
    569                 for(Node value = node.getFirstChild(); value != null; value = value.getNextSibling()) {
    570                     if(value.getNodeName().equals("Value")) {
    571                         String key = null;
    572                         String desc = "";
    573                         for(Node subvalue = value.getFirstChild(); subvalue != null; subvalue = subvalue.getNextSibling()) {
    574                             node_name = subvalue.getNodeName();
    575                             if(node_name.equals("Name")) {
    576                                 key = XMLTools.getValue(subvalue);
    577                             }
    578                             else if(node_name.equals("Desc")) {
    579                                 desc = XMLTools.getValue(subvalue);
    580                             }
    581                         }
    582                         if(key != null) {
    583                             addOption(key, desc);
    584                         }
    585                     }
    586                 }
    587             }
    588             else if(node_name.equals("Range")) {
    589                 String range_raw = XMLTools.getValue(node);
    590                 int index = -1;
    591                 if((index = range_raw.indexOf(StaticStrings.COMMA_CHARACTER)) != -1) {
    592                     if(index > 0) {
    593                         try {
    594                             String first_number = range_raw.substring(0, index);
    595                             setMinimum(Integer.parseInt(first_number));
    596                             first_number = null;
    597                         }
    598                         catch(Exception exception) {
    599                         }
    600                     }
    601 
    602                     if(index + 1 < range_raw.length()) {
    603                         try {
    604                             String second_number = range_raw.substring(index + 1);
    605                             setMaximum(Integer.parseInt(second_number));
    606                             second_number = null;   
    607                         }
    608                         catch(Exception exception) {
    609                         }
    610                     }
    611                 }
    612                 // Else it wasn't a valid range anyway, so ignore it
    613             }
    614             else if(node_name.equals("HiddenGLI")) {
    615                 setHiddenGLI(true);
    616             }
    617             else if(node_name.equals("ModeGLI")) {
    618                 String mode_level_str = XMLTools.getValue(node);
    619                 try {
    620                     int mode_level = Integer.parseInt(mode_level_str);
    621                     setModeLevel(mode_level);
    622                 }
    623                 catch(Exception exception) {
    624                     DebugStream.println("Exception in Argument.parseXML() - Unexpected but non-fatal");
    625                     DebugStream.printStackTrace(exception);
    626                 }
    627             }
    628 
    629         } // for each option
    630 
    631     } // parseXML
    632 
    633     public class ArgumentOption
    634     implements Comparable {
    635         public String name;
    636         public String description;
    637         private String text; // cached version
    638 
    639         public ArgumentOption(String name, String desc) {
    640             this.name = name;
    641             this.description = desc;
    642         }
    643 
    644         public int compareTo(Object obj) {
    645             return toString().compareTo(obj.toString());
    646         }
    647 
    648         public boolean equals(Object obj) {     
    649             return (obj != null && compareTo(obj) == 0);
    650         }
    651 
    652         public String toString() {
    653             return name + " "+ StaticStrings.MINUS_CHARACTER + " "+ description;
    654         }
    655 
    656         public String getToolTip() {
    657             return Utility.formatHTMLWidth(name+": "+description, 80);
    658         }
    659     }
     627      }
     628
     629    } // for each option
     630
     631  } // parseXML
     632
     633  public class ArgumentOption
     634    implements Comparable {
     635    public String name;
     636    public String description;
     637    private String text; // cached version
     638
     639    public ArgumentOption(String name, String desc) {
     640      this.name = name;
     641      this.description = desc;
     642    }
     643
     644    public int compareTo(Object obj) {
     645      return toString().compareTo(obj.toString());
     646    }
     647
     648    public boolean equals(Object obj) {     
     649      return (obj != null && compareTo(obj) == 0);
     650    }
     651
     652    public String toString() {
     653      return name + " "+ StaticStrings.MINUS_CHARACTER + " "+ description;
     654    }
     655
     656    public String getToolTip() {
     657      return Utility.formatHTMLWidth(name+": "+description, 80);
     658    }
     659  }
    660660}
Note: See TracChangeset for help on using the changeset viewer.