// 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.preferences;
import graphtea.platform.attribute.AttributeListener;
import graphtea.platform.core.exception.ExceptionHandler;
import graphtea.platform.lang.ArrayX;
import graphtea.platform.preferences.lastsettings.UserModifiableProperty;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.HashSet;
/**
* @author Rouzbeh Ebrahimi
*/
public class GraphPreferences extends AbstractPreference implements AttributeListener {
public Object oneInstance;
public HashSet<Object> oneInstances;
public static Preferences pref;
public GraphPreferences(String name, Object oneInstance, String category) {
super(name, pref, category);
oneInstances = new HashSet<>();
this.oneInstance = oneInstance;
oneInstances.add(oneInstance);
defineListeners(this);
}
public GraphPreferences(String name, HashSet<Object> oneInstances, String category) {
super(name, pref, category);
this.oneInstances = oneInstances;
defineListeners(this);
}
public void defineAttributes(HashMap<Object, ArrayX> objectValues) {
for (Object o : objectValues.keySet()) {
putAttribute(o.toString(), objectValues.get(o));
}
}
public void defineAttributes(HashMap<Object, Object> objectValues, boolean t) {
for (Object o : objectValues.keySet()) {
putAttribute(o.toString(), objectValues.get(o));
}
}
public void defineMultipleAttributes(HashMap<Object, HashMap<Object, ArrayX>> map) {
for (Object o : map.keySet()) {
HashMap<Object, ArrayX> hashMap = map.get(o);
for (Object fields : hashMap.keySet()) {
putAttribute(o.toString() + "*" + fields.toString(), hashMap.get(fields));
}
}
}
public void addObject(Object o) {
oneInstances.add(o);
}
public void defineListeners(AttributeListener al) {
attributeSet.addAttributeListener(al);
}
public void attributeUpdated(String name, Object oldVal, Object newVal) {
for (Object o : oneInstances) {
for (Field f : o.getClass().getFields()) {
UserModifiableProperty anot = f.
getAnnotation(UserModifiableProperty.class);
if (anot != null && (anot.displayName()).equals(name)) {
try {
// o.getClass().getDeclaredField(f.getName()).set(o, newVal);
f.set(o, newVal);
} catch (IllegalAccessException e) {
ExceptionHandler.catchException(e);
}
}
}
}
}
}