001/*
002 * Copyright (c) 2003-2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: barseghian $'
006 * '$Date: 2011-02-12 02:25:44 +0000 (Sat, 12 Feb 2011) $' 
007 * '$Revision: 27102 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package org.kepler.reporting.rio;
031
032import java.io.Serializable;
033import java.util.Iterator;
034import java.util.Set;
035import java.util.SortedMap;
036import java.util.TreeMap;
037
038import org.kepler.reporting.rio.DynamicReportItem.DynamicItemProperties;
039
040/**
041 * This class is intended as a very general holder for Item properties.
042 * The intent is that subclassess will provide pertinent property key
043 * (static constant Strings) that are relevant to the particular Item type.
044 * This is in lieu of having an ever-growing number of methods for getting/setting
045 * item properties.
046 * @see DynamicItemProperties
047 * @author leinfelder
048 *
049 */
050public class ItemProperties implements Serializable {
051
052        protected SortedMap<String, String> properties = new TreeMap<String, String>();
053        
054        public String getProperty(String key) {
055                return properties.get(key);
056        }
057        
058        /**
059         * Returns boolean - is this change worthy of marking the TableauFrame modified
060         * @param key
061         * @param value
062         */
063        public boolean setProperty(String key, String value) {
064                String previousValue = properties.put(key, value);
065                // we won't treat initialization as a change
066                if (properties.get(key) != null){
067                        // more caveats:
068                        if ( 
069                                (previousValue == null && value != null && !value.equals("")) || 
070                                (previousValue != null && value != null && !previousValue.equals(value) 
071                                                )){
072                                        return true;
073                        }
074                }
075                return false;
076        }
077        
078        public String getPropertyNameAt(int index) {
079                //System.out.println("ItemProperties getPropertyNameAt("+index+")");
080                return (String) properties.keySet().toArray(new String[0])[index];
081        }
082        
083        /**
084         * Retrieve a list of all the property keys for this ItemProperties object
085         * @return list of keys that can then be used to lookup/set the values
086         */
087        public Set<String> getProperties() {
088                return properties.keySet();
089        }
090        
091        private void usage() {
092                this.setProperty("width", "400");
093                this.setProperty("height", "600");
094        
095                Iterator<String> iter = this.getProperties().iterator();
096                while (iter.hasNext()) {
097                        String key = iter.next();
098                        String value = this.getProperty(key);
099                        //do something
100                }
101                
102                
103        }
104}