001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/portal/context/StyleList.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004    This file is part of deegree.
005    Copyright (C) 2001-2007 by:
006    EXSE, Department of Geography, University of Bonn
007    http://www.giub.uni-bonn.de/deegree/
008    lat/lon GmbH
009    http://www.lat-lon.de
010    
011    This library is free software; you can redistribute it and/or
012    modify it under the terms of the GNU Lesser General Public
013    License as published by the Free Software Foundation; either
014    version 2.1 of the License, or (at your option) any later version.
015    
016    This library is distributed in the hope that it will be useful,
017    but WITHOUT ANY WARRANTY; without even the implied warranty of
018    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
019    Lesser General Public License for more details.
020    
021    You should have received a copy of the GNU Lesser General Public
022    License along with this library; if not, write to the Free Software
023    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
024    
025    Contact:
026    
027    Andreas Poth
028    lat/lon GmbH
029    Aennchenstr. 19
030    53115 Bonn
031    Germany
032    E-Mail: poth@lat-lon.de
033    
034    Prof. Dr. Klaus Greve
035    Department of Geography
036    University of Bonn
037    Meckenheimer Allee 166
038    53115 Bonn
039    Germany
040    E-Mail: greve@giub.uni-bonn.de
041    
042                     
043     ---------------------------------------------------------------------------*/
044    package org.deegree.portal.context;
045    
046    import java.util.HashMap;
047    
048    
049    /**
050     * encapsulates a StyleList as defined by the OGC Web Map Context specification
051     *
052     * @version $Revision: 6962 $
053     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
054     */
055    public class StyleList {
056        private HashMap<String,Style> styles = new HashMap<String,Style>();
057        private Style current = null;
058    
059        /**
060         * Creates a new StyleList object.
061         *
062         * @param styles 
063         */
064        public StyleList( Style[] styles ) throws ContextException {
065            setStyles( styles );
066        }
067    
068        /**
069         * returns an array of all styles known by a layer
070         *
071         * @return all styles
072         */
073        public Style[] getStyles() {
074            Style[] fr = new Style[styles.size()];
075            return styles.values().toArray( fr );
076        }
077    
078        /**
079         * sets alla styles known by a layer
080         *
081         * @param styles 
082         *
083         * @throws ContextException 
084         */
085        public void setStyles( Style[] styles ) throws ContextException {
086            if ( ( styles == null ) || ( styles.length == 0 ) ) {
087                throw new ContextException( "at least one style must be defined for a layer" );
088            }
089    
090            this.styles.clear();
091    
092            for ( int i = 0; i < styles.length; i++ ) {
093                if ( styles[i].isCurrent() ) {
094                    current = styles[i];
095                }
096                this.styles.put( styles[i].getName(), styles[i] );
097            }
098        }
099        
100        /**
101         * returns the current style
102         *
103         * @return  current style
104         */
105        public Style getCurrentStyle() {
106            return current;
107        }
108        
109    
110        /**
111         *
112         *
113         * @param name 
114         *
115         * @return named style
116         */
117        public Style getStyle( String name ) {
118            return styles.get( name );
119        }
120    
121        /**
122         *
123         *
124         * @param style 
125         */
126        public void addStyle( Style style ) {
127            if ( style.isCurrent() ) {
128                current.setCurrent( false );
129                current = style;
130            }
131            styles.put( style.getName(), style );
132        }
133    
134        /**
135         *
136         *
137         * @param name 
138         *
139         * @return removed style 
140         */
141        public Style removeStyle( String name ) {
142            return styles.remove( name );
143        }
144    
145        /**
146         *
147         */
148        public void clear() {
149            styles.clear();
150        }
151        
152      
153    }