001    // GraphLab Project: http://graphlab.sharif.edu
002    // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
003    // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
004    package graphlab.platform.preferences;
005    
006    import graphlab.platform.attribute.AttributeListener;
007    import graphlab.platform.attribute.NotifiableAttributeSetImpl;
008    import graphlab.platform.lang.ArrayX;
009    
010    import java.util.HashMap;
011    
012    /**
013     * @author Rouzbeh
014     */
015    public abstract class AbstractPreference {
016        public String preferenceName;
017        public String displayName;
018        public String category;
019    
020    
021        public AbstractPreference(String name, Preferences pref, String category) {
022            this.preferenceName = name;
023            this.category = category;
024    
025            pref.putNewSetOfAttributes(this);
026            defineAttributes(new HashMap<Object, ArrayX>());
027    
028        }
029    
030        public NotifiableAttributeSetImpl attributeSet = new NotifiableAttributeSetImpl();
031    
032        protected void putAttribute(String name, ArrayX values) {
033            attributeSet.put(name, values);
034        }
035    
036        protected void putAttribute(String name, Object value) {
037            attributeSet.put(name, value);
038    
039        }
040    
041        protected <T> T getAttribute(String name) {
042            return (T) attributeSet.get(name);
043    
044        }
045    
046    
047        public abstract void defineAttributes(HashMap<Object, ArrayX> objectValues);
048    
049    
050        public abstract void defineListeners(AttributeListener al);
051    }