001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/graphics/MapFactory.java $
002    /*----------------------------------------------------------------------------
003     This file is part of deegree, http://deegree.org/
004     Copyright (C) 2001-2009 by:
005       Department of Geography, University of Bonn
006     and
007       lat/lon GmbH
008    
009     This library is free software; you can redistribute it and/or modify it under
010     the terms of the GNU Lesser General Public License as published by the Free
011     Software Foundation; either version 2.1 of the License, or (at your option)
012     any later version.
013     This library is distributed in the hope that it will be useful, but WITHOUT
014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016     details.
017     You should have received a copy of the GNU Lesser General Public License
018     along with this library; if not, write to the Free Software Foundation, Inc.,
019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020    
021     Contact information:
022    
023     lat/lon GmbH
024     Aennchenstr. 19, 53177 Bonn
025     Germany
026     http://lat-lon.de/
027    
028     Department of Geography, University of Bonn
029     Prof. Dr. Klaus Greve
030     Postfach 1147, 53001 Bonn
031     Germany
032     http://www.geographie.uni-bonn.de/deegree/
033    
034     e-mail: info@deegree.org
035    ----------------------------------------------------------------------------*/
036    package org.deegree.graphics;
037    
038    import org.deegree.graphics.sld.UserStyle;
039    import org.deegree.model.coverage.grid.GridCoverage;
040    import org.deegree.model.crs.CoordinateSystem;
041    import org.deegree.model.feature.FeatureCollection;
042    import org.deegree.model.spatialschema.Envelope;
043    import org.deegree.ogcwebservices.wms.operation.GetMap;
044    
045    /**
046     * Factory class for creating <tt>MapView</tt>s, <tt>Layer</tt>s and <tt>Theme</tt>s. RB: Is this class really
047     * necessary? it just calls the appropriate constructors.
048     *
049     * <p>
050     * ------------------------------------------------------------------------
051     * </p>
052     *
053     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
054     * @version $Revision: 18195 $ $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
055     */
056    public class MapFactory {
057        /**
058         * creates an empty feature layer with EPSG:4326 as default coordinate reference system. All data that will be added
059         * to the layer will be converted to the EPSG:4326 coordinate reference system if no other CRS is set.
060         *
061         * @param name
062         *            of the layer
063         * @return the layer with epsg:4326 set as crs
064         * @throws Exception
065         */
066        public static synchronized Layer createFeatureLayer( String name )
067                                throws Exception {
068            return new FeatureLayer( name );
069        }
070    
071        /**
072         * creates an empty feature layer. All data that will be added to the layer will be converted to the submitted
073         * coordinate reference system if no other CRS is set.
074         *
075         * @param name
076         *            of the layer
077         * @param crs
078         *            of the crs
079         * @return the feature layer with given crs and name.
080         * @throws Exception
081         */
082        public static synchronized Layer createFeatureLayer( String name, CoordinateSystem crs )
083                                throws Exception {
084            return new FeatureLayer( name, crs );
085        }
086    
087        /**
088         * creates a complete feature layer. If the CRS of the geometries contained within the submitted feature collection
089         * are not the same as the submitted CRS all geometries will be converted to the submitted CRS.
090         *
091         * @param name
092         *            of the feature layer
093         * @param crs
094         *            of the crs of the feature layer
095         * @param fc
096         *            to get the geometries from
097         * @return to the Layer created from given paraemters.
098         * @throws Exception
099         */
100        public static synchronized Layer createFeatureLayer( String name, CoordinateSystem crs, FeatureCollection fc )
101                                throws Exception {
102            return new FeatureLayer( name, crs, fc );
103        }
104    
105        /**
106         * creates a raster layer. The required CRS is contained within the <tt>GC_GridCoverage</tt> object
107         *
108         * @param name
109         *            name of raster layer
110         * @param raster
111         *            the raster to create the layer from.
112         * @return the raster layer.
113         * @throws Exception
114         */
115        public static synchronized Layer createRasterLayer( String name, GridCoverage raster )
116                                throws Exception {
117            return new RasterLayer( name, raster );
118        }
119    
120        /**
121         * @param name
122         * @param raster
123         * @param request
124         * @return the new layer
125         * @throws Exception
126         */
127        public static synchronized Layer createRasterLayer( String name, GridCoverage raster, GetMap request )
128                                throws Exception {
129            return new RasterLayer( name, raster, request );
130        }
131    
132        /**
133         * creates a theme with a name, a Layer containing the themes data and an array of styles to be known by the
134         * <tt>Theme</tt>
135         *
136         * @param name
137         *            of the theme
138         * @param layer
139         *            the layer to create the theme from
140         * @param styles
141         *            the styles to set
142         * @return the created theme from given parameters
143         */
144        public static synchronized Theme createTheme( String name, Layer layer, UserStyle[] styles ) {
145            return new Theme( name, layer, styles );
146        }
147    
148        /**
149         * creates a theme with a name, a Layer containing the themes data and an array of styles to be known by the
150         * <tt>Theme</tt>
151         *
152         * @param name
153         *            of the theme
154         * @param layer
155         *            to use
156         * @return the created theme from given parameters
157         */
158        public static synchronized Theme createTheme( String name, Layer layer ) {
159            return new Theme( name, layer, new UserStyle[] { null } );
160        }
161    
162        /**
163         * creates a <tt>MapView</tt> with a name, a boundingbox describing the area coverd by the <tt>MapView</tt>, a CRS
164         * and n <tt>Theme</tt>s.
165         *
166         * @param name
167         *            of the mapview
168         * @param boundingbox
169         *            of the mapview
170         * @param crs
171         *            of the mapview
172         * @param themes
173         *            of the mapview
174         * @param pixelsize
175         *            used for rendering
176         * @return the mapview created from given parameters
177         * @throws Exception
178         */
179        public static synchronized MapView createMapView( String name, Envelope boundingbox, CoordinateSystem crs,
180                                                          Theme[] themes, double pixelsize )
181                                throws Exception {
182            MapView mv = new MapView( name, boundingbox, crs, pixelsize );
183            for ( int i = 0; i < themes.length; i++ ) {
184                mv.addTheme( themes[i] );
185            }
186    
187            return mv;
188        }
189    
190    }