001    /* 
002     * This file is part of the Echo Web Application Framework (hereinafter "Echo").
003     * Copyright (C) 2002-2005 NextApp, Inc.
004     *
005     * Version: MPL 1.1/GPL 2.0/LGPL 2.1
006     *
007     * The contents of this file are subject to the Mozilla Public License Version
008     * 1.1 (the "License"); you may not use this file except in compliance with
009     * the License. You may obtain a copy of the License at
010     * http://www.mozilla.org/MPL/
011     *
012     * Software distributed under the License is distributed on an "AS IS" basis,
013     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
014     * for the specific language governing rights and limitations under the
015     * License.
016     *
017     * Alternatively, the contents of this file may be used under the terms of
018     * either the GNU General Public License Version 2 or later (the "GPL"), or
019     * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
020     * in which case the provisions of the GPL or the LGPL are applicable instead
021     * of those above. If you wish to allow use of your version of this file only
022     * under the terms of either the GPL or the LGPL, and not to allow others to
023     * use your version of this file under the terms of the MPL, indicate your
024     * decision by deleting the provisions above and replace them with the notice
025     * and other provisions required by the GPL or the LGPL. If you do not delete
026     * the provisions above, a recipient may use your version of this file under
027     * the terms of any one of the MPL, the GPL or the LGPL.
028     */
029    
030    package nextapp.echo2.app;
031    
032    import java.io.Serializable;
033    import java.util.Iterator;
034    
035    /**
036     * A representation of stylistic property information about a single instance 
037     * or type of component.
038     */
039    public interface Style 
040    extends Serializable {
041        
042        /**
043         * Retrieves the value of the specified indexed property.
044         */
045        public Object getIndexedProperty(String propertyName, int index);
046        
047        /**
048         * Retrieves the value of the specified property.
049         */
050        public Object getProperty(String propertyName);
051        
052        /**
053         * Determines which indices of a particular property are set.
054         * 
055         * @return an <code>Iterator</code> that returns the set indices in
056         *         incrementing order as <code>Integer</code>s
057         */
058        public Iterator getPropertyIndices(String propertyName);
059        
060        /**
061         * Retrieves the names of all set properties.
062         * 
063         * @return an <code>Iterator</code> that returns the names of all set 
064         *         properties
065         */
066        public Iterator getPropertyNames();
067        
068        /**
069         * Determines if a particular index of an indexed property is set.
070         * 
071         * @param propertyName the property name
072         * @param index the index
073         * @return true if the index is set
074         */
075        public boolean isIndexedPropertySet(String propertyName, int index);
076        
077        /**
078         * Determines if a particular property is set.
079         * In the case of an indexed property, this method will return true
080         * if any indices are set.
081         * 
082         * @param propertyName the property name
083         * @return true if the property is set
084         */
085        public boolean isPropertySet(String propertyName);
086    }