/*
* ListOption.java
* Copyright (C) 2007 University of Waikato, Hamilton, New Zealand
* @author Richard Kirkby (rkirkby@cs.waikato.ac.nz)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package tr.gov.ulakbim.jDenetX.options;
public class ListOption extends AbstractOption {
private static final long serialVersionUID = 1L;
protected Option[] currentList;
protected Option expectedType;
protected Option[] defaultList;
protected char separatorChar;
public ListOption(String name, char cliChar, String purpose,
Option expectedType, Option[] defaultList, char separatorChar) {
super(name, cliChar, purpose);
this.expectedType = expectedType;
this.defaultList = defaultList.clone();
this.separatorChar = separatorChar;
resetToDefault();
}
public void setList(Option[] optList) {
Option[] newArray = new Option[optList.length];
for (int i = 0; i < optList.length; i++) {
newArray[i] = this.expectedType.copy();
newArray[i].setValueViaCLIString(optList[i].getValueAsCLIString());
}
this.currentList = newArray;
}
public Option[] getList() {
return this.currentList.clone();
}
public String getDefaultCLIString() {
return optionArrayToCLIString(this.defaultList, this.separatorChar);
}
public String getValueAsCLIString() {
return optionArrayToCLIString(this.currentList, this.separatorChar);
}
public void setValueViaCLIString(String s) {
this.currentList = cliStringToOptionArray(s, this.separatorChar,
this.expectedType);
}
public static Option[] cliStringToOptionArray(String s, char separator,
Option expectedType) {
if (s.length() < 1) {
return new Option[0];
}
String[] subStrings = s.split(Character.toString(separator));
Option[] options = new Option[subStrings.length];
for (int i = 0; i < options.length; i++) {
options[i] = expectedType.copy();
options[i].setValueViaCLIString(subStrings[i]);
}
return options;
}
public static String optionArrayToCLIString(Option[] os, char separator) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < os.length; i++) {
if (i > 0) {
sb.append(separator);
}
sb.append(os[i].getValueAsCLIString());
}
return sb.toString();
}
}