Changeset 18911


Ignore:
Timestamp:
2009-04-08T13:27:32+12:00 (12 years ago)
Author:
kjdon
Message:

added support for new plugin option type: enumstring, which has a list of predefined values, but can actually take any value - an editbale combobox in gli

Location:
gli/trunk/src/org/greenstone/gatherer
Files:
3 edited

Legend:

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

    r17826 r18911  
    7272    /** An element of the argument type enumeration specifying a metadata set combobox control. */
    7373    static final public byte METADATA_SET_NAMESPACE = 9;
    74 
    75     ///////////kk added the number was 9, I changed it to 10//////////////
    7674    /** An element of the argument type enumeration specifying a text field. */
    7775    static final public byte URL = 10;
     76  /** An editable combo box */
     77  static final public byte ENUM_STRING = 11;
     78
    7879    /////////////////////////////////////////////////////////////////
    7980
     
    9495    /** The DOM element this argument is built around, if any. */
    9596    private Element element;
    96     /** If the argument is of type ENUM then this map holds all the various options. Each entry is an <option value> -> <description> mapping. */
     97    /** If the argument is of type ENUM or ENUM_STRING then this map holds all the various options. Each entry is an <option value> -> <description> mapping. */
    9798    private ArrayList option_list = null;
    9899    /** A default value for parameter-type arguments. May be a Perl pattern. */
     
    123124     */
    124125    public void addOption(String name, String desc) {
    125         if(type == ENUM && name != null) {
     126      if((type == ENUM || type == ENUM_STRING) && name != null) {
    126127            if(desc == null) {
    127128                desc = "";
     
    412413        if(new_type.equalsIgnoreCase(StaticStrings.ENUM_STR)) {
    413414            this.type = ENUM;
     415            option_list = new ArrayList();
     416        }
     417        else if(new_type.equalsIgnoreCase(StaticStrings.ENUM_STRING_STR)) {
     418            this.type = ENUM_STRING;
    414419            option_list = new ArrayList();
    415420        }
  • gli/trunk/src/org/greenstone/gatherer/cdm/ArgumentControl.java

    r18910 r18911  
    9292
    9393    switch(argument.getType()) {
     94    case Argument.ENUM_STRING:
    9495    case Argument.ENUM:
    9596      ArrayList option_list = argument.getOptions();
    96       value_control = new GComboBox(option_list.toArray(), false, false);
     97      boolean editable = false;
     98      if (argument.getType() == Argument.ENUM_STRING) {
     99    editable = true;
     100      }
     101      value_control = new GComboBox(option_list.toArray(), editable, false);
    97102      value_control.setComponentOrientation(Dictionary.getOrientation());
    98103           
    99       selectValue((JComboBox)value_control, initial_value); // also sets the tooltip
     104      boolean found = selectValue((JComboBox)value_control, initial_value); // also sets the tooltip
     105      if (!found && argument.getType() == Argument.ENUM_STRING) {
     106    // Its a custom item
     107    ((JComboBox) value_control).addItem(initial_value);
     108    ((JComboBox) value_control).setSelectedItem(initial_value);
     109      }
     110
    100111      ((JComboBox)value_control).addActionListener(new ToolTipUpdater());
    101112      break;
     
    158169      }
    159170      if (existing_value != null && existing_value.length() > 0) {
    160     boolean found = selectValue((JComboBox) value_control, existing_value);
     171    found = selectValue((JComboBox) value_control, existing_value);
    161172    // It's possible that this is a custom value and so doesn't exist in the combobox
    162173    if (!found) {
     
    244255    // Listener
    245256    if(value_control != null) {
    246       if (argument.getType() != Argument.ENUM) {
     257      if (argument.getType() != Argument.ENUM && argument.getType() != Argument.ENUM_STRING) {
    247258    // enums have already set tooltips based on option value
    248259    value_control.setToolTipText(tip);
     
    325336      case Argument.ENUM:
    326337    Argument.ArgumentOption option = (Argument.ArgumentOption)((JComboBox)value_control).getSelectedItem();
    327     if(option != null && option.name.length() > 0) {
    328       argument.setValue(option.name);
    329     }
    330     else {
    331       String args[] = new String[1];
    332       args[0] = argument.getName();
    333       if(argument.isRequired()) {
    334         JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.Required_Argument", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
    335       }
    336       // They've left the field blank
    337       else {
    338         JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.No_Value", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
    339         argument.setValue(null);
    340       }
    341       args = null;
    342       return false;
    343     }
     338    // its impossible not to choose an entry
     339    argument.setValue(option.name);
    344340    argument.setAssigned(true);
    345341    return true;
    346       case Argument.FLAG:
    347     // Should have already been handled above.
    348     argument.setAssigned(true);
    349     return true;
    350       case Argument.INTEGER:
    351     result = ((JSpinner)value_control).getValue().toString();
    352     if(result.length() > 0) {
    353       // Test if the value entered is a valid int.
    354       try {
    355         int x = Integer.parseInt(result);
    356       }
    357       catch(NumberFormatException nfe) {
    358         String args[] = new String[2];
    359         args[0] = argument.getName();
    360         args[1] = result;
    361         JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.Bad_Integer", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
    362         args = null;
    363         return false;
    364       }
    365       argument.setValue(result);
    366     }
    367     else {
    368       String args[] = new String[1];
    369       args[0] = argument.getName();
    370       if(argument.isRequired()) {
    371         JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.Required_Argument", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
    372       }
    373       // They've left the field blank
    374       else {
    375         JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.No_Value", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
    376         argument.setValue(null);
    377       }
    378       args = null;
    379       return false;
    380     }
    381     argument.setAssigned(true);
    382     return true;
    383       case Argument.LANGUAGE:
    384     String language = (((JComboBox)value_control).getSelectedItem()).toString();
    385     argument.setValue(language);
    386     // Kinda lucked out here. Its impossible not to choose an entry from these comboboxes as they are restricted.
    387     argument.setAssigned(true);
    388     return true;
    389       case Argument.METADATUM:
    390       case Argument.METADATA:
    391     Object new_value_raw = ((JComboBox) value_control).getSelectedItem();
    392     if (new_value_raw instanceof MetadataElement) {
    393       argument.setValue(((MetadataElement) new_value_raw).getFullName());
    394     }
    395     else {
    396       // But we have to be careful as an arbitary string object could be zero length
     342      case Argument.ENUM_STRING:
     343    Object new_value_raw = ((JComboBox)value_control).getSelectedItem();
     344    if (new_value_raw instanceof Argument.ArgumentOption) {
     345      argument.setValue(((Argument.ArgumentOption)new_value_raw).name);
     346    } else {
     347      // have entered a new string
    397348      String new_value = new_value_raw.toString();
    398       ///ystem.err.println("The current value is: " + new_value);
    399       if(new_value.length() > 0) {
     349      if (new_value.length() > 0) {
    400350        argument.setValue(new_value);
    401351      }
     
    417367    argument.setAssigned(true);
    418368    return true;
     369      case Argument.FLAG:
     370    // Should have already been handled above.
     371    argument.setAssigned(true);
     372    return true;
     373      case Argument.INTEGER:
     374    result = ((JSpinner)value_control).getValue().toString();
     375    if(result.length() > 0) {
     376      // Test if the value entered is a valid int.
     377      try {
     378        int x = Integer.parseInt(result);
     379      }
     380      catch(NumberFormatException nfe) {
     381        String args[] = new String[2];
     382        args[0] = argument.getName();
     383        args[1] = result;
     384        JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.Bad_Integer", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
     385        args = null;
     386        return false;
     387      }
     388      argument.setValue(result);
     389    }
     390    else {
     391      String args[] = new String[1];
     392      args[0] = argument.getName();
     393      if(argument.isRequired()) {
     394        JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.Required_Argument", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
     395      }
     396      // They've left the field blank
     397      else {
     398        JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.No_Value", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
     399        argument.setValue(null);
     400      }
     401      args = null;
     402      return false;
     403    }
     404    argument.setAssigned(true);
     405    return true;
     406      case Argument.LANGUAGE:
     407    String language = (((JComboBox)value_control).getSelectedItem()).toString();
     408    argument.setValue(language);
     409    // Kinda lucked out here. Its impossible not to choose an entry from these comboboxes as they are restricted.
     410    argument.setAssigned(true);
     411    return true;
     412      case Argument.METADATUM:
     413      case Argument.METADATA:
     414    new_value_raw = ((JComboBox) value_control).getSelectedItem();
     415    if (new_value_raw instanceof MetadataElement) {
     416      argument.setValue(((MetadataElement) new_value_raw).getFullName());
     417    }
     418    else {
     419      // But we have to be careful as an arbitary string object could be zero length
     420      String new_value = new_value_raw.toString();
     421      ///ystem.err.println("The current value is: " + new_value);
     422      if(new_value.length() > 0) {
     423        argument.setValue(new_value);
     424      }
     425      else {
     426        String args[] = new String[1];
     427        args[0] = argument.getName();
     428        if(argument.isRequired()) {
     429          JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.Required_Argument", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
     430        }
     431        // They've left the field blank
     432        else {
     433          JOptionPane.showMessageDialog(this, Dictionary.get("CDM.ArgumentConfiguration.No_Value", args), Dictionary.get("CDM.ArgumentConfiguration.Error_Title"), JOptionPane.ERROR_MESSAGE);
     434          argument.setValue(null);
     435        }
     436        args = null;
     437        return false;
     438      }
     439    }
     440    argument.setAssigned(true);
     441    return true;
    419442      case Argument.REGEXP:
    420443      case Argument.STRING:
  • gli/trunk/src/org/greenstone/gatherer/util/StaticStrings.java

    r18685 r18911  
    9999    static final public String ENTRY_ELEMENT = "Entry";
    100100    static final public String ENUM_STR = "enum";
     101    static final public String ENUM_STRING_STR = "enumstring";
    101102    static final public String EQUALS_CHARACTER = "=";
    102103    static final public String EXCLAMATION_CHARACTER = "!";
Note: See TracChangeset for help on using the changeset viewer.