001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/graphics/AbstractLayer.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 java.util.ArrayList;
039 import java.util.Collections;
040 import java.util.List;
041
042 import org.deegree.model.crs.CRSFactory;
043 import org.deegree.model.crs.CoordinateSystem;
044 import org.deegree.model.spatialschema.Envelope;
045 import org.deegree.model.spatialschema.GeometryFactory;
046
047 /**
048 * A Layer is a collection of <tt>Feature</tt>s or rasters building a thematic 'unit' waterways or country borders for
049 * example. <tt>Feature</tt>s or raster can be added or removed from the layer. A <tt>Feature</tt> or raster can e
050 * changed by a modul of the application using the layer because only references to <tt>Feature</tt>s or rasters are
051 * stored within a layer.
052 *
053 *
054 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
055 * @version $Revision: 19800 $ $Date: 2009-09-26 12:33:09 +0200 (Sa, 26 Sep 2009) $
056 */
057
058 abstract class AbstractLayer implements Layer {
059
060 /**
061 * Of the layer
062 */
063 protected CoordinateSystem cs = null;
064
065 /**
066 * bbox of the layer
067 */
068 protected Envelope boundingbox = null;
069
070 /**
071 * List of controllers.
072 */
073 protected List<EventController> eventController = Collections.synchronizedList( new ArrayList<EventController>() );
074
075 private String name = null;
076
077 /**
078 * creates a layer with EPSG:4326 as default coordinate system
079 *
080 * @param name
081 * @throws Exception
082 */
083 AbstractLayer( String name ) throws Exception {
084 this.name = name;
085 cs = CRSFactory.create( "EPSG:4326" );
086
087 }
088
089 /**
090 * Creates a new AbstractLayer object.
091 *
092 * @param name
093 * @param crs
094 *
095 * @throws Exception
096 */
097 AbstractLayer( String name, CoordinateSystem crs ) throws Exception {
098 this.name = name;
099
100 cs = crs;
101
102 boundingbox = GeometryFactory.createEnvelope( 9E99, 9E99, -9E99, -9E99, null );
103 }
104
105 /**
106 * returns the name of the layer
107 *
108 * @return the name of the layer
109 */
110 public String getName() {
111 return name;
112 }
113
114 /**
115 * returns the BoundingBox (Envelope) of Layer. This is the BoundingBox of the layers data. The BoundingBox of the
116 * View maybe larger or smaller
117 *
118 * @return the BoundingBox (Envelope) of Layer
119 */
120 public Envelope getBoundingBox() {
121 return boundingbox;
122 }
123
124 /**
125 * returns the coordinate reference system of the MapView
126 *
127 * @return the coordinate reference system of the MapView
128 */
129 public CoordinateSystem getCoordinatesSystem() {
130 return cs;
131 }
132
133 /**
134 * adds an eventcontroller to the MapView that's reponsible for handling events that targets the map. E.g.: zooming,
135 * panning, selecting a feature etc.
136 *
137 * @param obj
138 */
139 public void addEventController( LayerEventController obj ) {
140 eventController.add( obj );
141 obj.addLayer( this );
142 }
143
144 /**
145 * @see org.deegree.graphics.AbstractLayer#addEventController(LayerEventController)
146 * @param obj
147 */
148 public void removeEventController( LayerEventController obj ) {
149 eventController.remove( obj );
150 obj.removeLayer( this );
151 }
152
153 /**
154 * As default the method returns <code>true</code>, but it may be overwritten by extending classes
155 *
156 * @return <code>true</code> if a layer is valid and should be rendered
157 */
158 public boolean isValid() {
159 return true;
160 }
161 }