// 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.attribute.NotifiableAttributeSetImpl;
import graphtea.platform.lang.ArrayX;

import java.util.HashMap;

/**
 * @author Rouzbeh
 */
public abstract class AbstractPreference {
    public String preferenceName;
    public String displayName;
    public String category;


    public AbstractPreference(String name, Preferences pref, String category) {
        this.preferenceName = name;
        this.category = category;

        pref.putNewSetOfAttributes(this);
        defineAttributes(new HashMap<>());

    }

    public NotifiableAttributeSetImpl attributeSet = new NotifiableAttributeSetImpl();

    protected void putAttribute(String name, ArrayX<?> values) {
        attributeSet.put(name, values);
    }

    protected void putAttribute(String name, Object value) {
        attributeSet.put(name, value);

    }

    protected <T> T getAttribute(String name) {
        return (T) attributeSet.get(name);

    }


    public abstract void defineAttributes(HashMap<Object, ArrayX<?>> objectValues);


    public abstract void defineListeners(AttributeListener al);
}
