StringSet.java
001 package gate.creole.morph;
002 
003 import java.util.ArrayList;
004 import java.util.List;
005 
006 /**
007  <p>Title: StringSet </p>
008  <p>Description: This is one of the variable types that is allowed to define.
009  * It stores different possible strings for this variable
010  * The format of the value of this variable should be </p>
011  <p> "string1" OR "string2" OR "string3" ... </p>
012  */
013 
014 public class StringSet extends Variable {
015 
016   private String varName;
017   private List<String> variables;
018 
019   /**
020    * Constructor
021    */
022   public StringSet() {
023     variables = new ArrayList<String>();
024   }
025 
026   /**
027    * Tells if any value available which can be retrieved
028    @return true if value available, false otherwise
029    */
030   @Override
031   public boolean hasNext() {
032     if(pointer<variables.size()) {
033       return true;
034     else {
035       return false;
036     }
037   }
038 
039   /**
040    * Returns the next available value for this variable
041    @return value of the variable in the String format
042    */
043   @Override
044   public String next() {
045     if(pointer<variables.size()) {
046       pointer++;
047       return variables.get(pointer-1);
048     else {
049       return null;
050     }
051   }
052 
053   /**
054    * Process the provided value and stores in the underlying data structure
055    @param varName name of the variable
056    @param varValue String that contains possible different values
057    @return true if successfully stored, false otherwise (means some syntax error)
058    */
059   @Override
060   public boolean set(String varName, String varValue) {
061     this.varName = varName;
062     this.varValue = "";
063     // now we need to process the varValue
064     // lets first split between the | sign
065 
066     String [] values = varValue.split(" OR ");
067     //check for its syntax
068     for(int i=0;i<values.length;i++) {
069 
070       // remove all extra spaces
071       values[i= values[i].trim();
072 
073       // now check if it has been qouted properly
074       if(values[i].length()<|| !(values[i].charAt(0)=='\"'|| !(values[i].charAt(values[i].length()-1)=='\"')) {
075         return false;
076       else {
077         values[i= values[i].substring(1,values[i].length()-1);
078       }
079     }
080 
081     // store each value in the arrayList
082     for(int i=0;i<values.length;i++) {
083       variables.add(values[i]);
084       this.varValue = this.varValue + "("+values[i]+")";
085       if ((i+1!= values.length) {
086         this.varValue = this.varValue + "|";
087       }
088     }
089     return true;
090   }
091 
092   /**
093    * A method that tells if value is available in the StringSet
094    @param value String that is to be searched in the String set
095    @return true if value found in the StringSet, false otherwise
096    */
097   @Override
098   public boolean contains(String value) {
099     return variables.contains(value);
100   }
101   
102   public String getVariableName() {
103     return varName;
104   }
105 }