package wnlt.morph;
import java.util.ArrayList;
import java.util.List;
/**
* <p>Title: StringSet </p>
* <p>Description: This is one of the variable types that is allowed to define.
* It stores different possible strings for this variable
* The format of the value of this variable should be </p>
* <p> "string1" OR "string2" OR "string3" ... </p>
*/
public class StringSet extends Variable {
private String varName;
private List<String> variables;
/**
* Constructor
*/
public StringSet() {
variables = new ArrayList<String>();
}
/**
* Tells if any value available which can be retrieved
* @return true if value available, false otherwise
*/
@Override
public boolean hasNext() {
if(pointer<variables.size()) {
return true;
} else {
return false;
}
}
/**
* Returns the next available value for this variable
* @return value of the variable in the String format
*/
@Override
public String next() {
if(pointer<variables.size()) {
pointer++;
return variables.get(pointer-1);
} else {
return null;
}
}
/**
* Process the provided value and stores in the underlying data structure
* @param varName name of the variable
* @param varValue String that contains possible different values
* @return true if successfully stored, false otherwise (means some syntax error)
*/
@Override
public boolean set(String varName, String varValue) {
this.varName = varName;
this.varValue = "";
// now we need to process the varValue
// lets first split between the | sign
String [] values = varValue.split(" OR ");
//check for its syntax
for(int i=0;i<values.length;i++) {
// remove all extra spaces
values[i] = values[i].trim();
// now check if it has been qouted properly
if(values[i].length()<3 || !(values[i].charAt(0)=='\"') || !(values[i].charAt(values[i].length()-1)=='\"')) {
return false;
} else {
values[i] = values[i].substring(1,values[i].length()-1);
}
}
// store each value in the arrayList
for(int i=0;i<values.length;i++) {
variables.add(values[i]);
this.varValue = this.varValue + "("+values[i]+")";
if ((i+1) != values.length) {
this.varValue = this.varValue + "|";
}
}
return true;
}
/**
* A method that tells if value is available in the StringSet
* @param value String that is to be searched in the String set
* @return true if value found in the StringSet, false otherwise
*/
@Override
public boolean contains(String value) {
return variables.contains(value);
}
public String getVariableName() {
return varName;
}
}