/*
* Author: tdanford
* Date: Dec 3, 2008
*/
package org.seqcode.ml.bayesnets;
import java.util.*;
import org.seqcode.gseutils.models.Model;
import java.lang.reflect.*;
public class BNVar {
private String name;
private Map<Object,Integer> encoding;
private Map<Integer,Object> decoding;
public BNVar(String n, Set values) {
name = n;
encoding = new HashMap<Object,Integer>();
decoding = new TreeMap<Integer,Object>();
int i = 0;
for(Object v : values) {
encoding.put(v, i);
decoding.put(i, v);
i += 1;
}
}
public Object findValue(Model m) {
try {
Class mc = m.getClass();
Field f = mc.getField(name);
Class type = f.getType();
if(Model.isSubclass(type, Integer.class) || Model.isSubclass(type, String.class)) {
Object value = f.get(m);
return value;
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
public void setValue(Model m, Object value) {
try {
Class mc = m.getClass();
Field f = mc.getField(name);
Class type = f.getType();
if(Model.isSubclass(type, Integer.class) || Model.isSubclass(type, String.class)) {
f.set(m, value);
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public String getName() { return name; }
public int size() { return encoding.size(); }
public Integer encode(Object value) {
return encoding.get(value);
}
public Object decode(Integer i) {
return decoding.get(i);
}
public boolean hasValue(Object v) { return encoding.containsKey(v); }
public String toString() { return name; }
public int hashCode() {
return name.hashCode();
}
public boolean equals(Object o) {
if(!(o instanceof BNVar)) { return false; }
BNVar b = (BNVar)o;
return b.name.equals(name);
}
}