// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.platform.lang;
import graphtea.platform.StaticUtils;
import graphtea.platform.attribute.AtomAttribute;
import java.util.Vector;
/**
* an eXtended data type that you can set it and also get it,
* only if your value is in the predefined set.
*
* @see graphtea.platform.lang.SetValidator
* @see graphtea.platform.attribute.AtomAttribute
*
* @author Azin Azadi
*/
public class ArrayX<T> extends SetValidator<T> implements AtomAttribute<T> {
public ArrayX(T initVal, T... x) {
super.addValidValues(x);
super.addValidValue(initVal);
setValue(initVal);
}
private T value;
public boolean setValue(T t) {
if (isValid(t)) {
value = t;
return true;
}
return false;
}
public T getValue() {
return value;
}
public String toString() {
return super.toString() + " #$%# " + value.getClass().getName() + " #$%# " + value;
}
// test for the fromString
// public static void main(String[] args) {
// ArrayX o = new ArrayX("a", "s", "d");
// String x = o.toString();
// System.out.println(x);
//
// for (Object oo : fromString(x).getValidValues()) {
// System.out.println(oo);
// }
// }
public static ArrayX fromString(String s) {
String[] ss = s.split(" #\\$%# ");
Object last = null;
Vector set = new Vector();
int i = 0;
while (i < ss.length) {
last = StaticUtils.fromString(ss[i++], ss[i++]);
set.add(last);
}
return new ArrayX(last, set.toArray());
}
}