/[schmitzm]/branches/1.0-gt2-2.6/src/skrueger/geotools/StyledFS.java
ViewVC logotype

Annotation of /branches/1.0-gt2-2.6/src/skrueger/geotools/StyledFS.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 315 - (hide annotations)
Wed Aug 26 11:03:27 2009 UTC (15 years, 6 months ago) by mojays
File size: 7293 byte(s)
Branch created from SCHMITZM 1.0 (rev 313) to switch to gt2-2.6.x.
1 alfonx 244 /*******************************************************************************
2     * Copyright (c) 2009 Martin O. J. Schmitz.
3     *
4     * This file is part of the SCHMITZM library - a collection of utility
5 alfonx 256 * classes based on Java 1.6, focusing (not only) on Java Swing
6 alfonx 244 * and the Geotools library.
7     *
8     * The SCHMITZM project is hosted at:
9     * http://wald.intevation.org/projects/schmitzm/
10     *
11     * This program is free software; you can redistribute it and/or
12     * modify it under the terms of the GNU Lesser General Public License
13     * as published by the Free Software Foundation; either version 3
14     * of the License, or (at your option) any later version.
15     *
16     * This program is distributed in the hope that it will be useful,
17     * but WITHOUT ANY WARRANTY; without even the implied warranty of
18     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19     * GNU General Public License for more details.
20     *
21     * You should have received a copy of the GNU Lesser General Public License (license.txt)
22     * along with this program; if not, write to the Free Software
23     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24     * or try this link: http://www.gnu.org/licenses/lgpl.html
25     *
26     * Contributors:
27     * Martin O. J. Schmitz - initial API and implementation
28     * Stefan A. Krüger - additional utility classes
29     ******************************************************************************/
30     package skrueger.geotools;
31    
32     import java.io.File;
33     import java.io.FileNotFoundException;
34     import java.io.IOException;
35     import java.net.URL;
36     import java.util.Date;
37     import java.util.HashMap;
38     import java.util.Map;
39     import java.util.Random;
40    
41     import javax.swing.ImageIcon;
42     import javax.swing.JPanel;
43    
44     import org.apache.log4j.Logger;
45     import org.geotools.data.FeatureSource;
46     import org.geotools.feature.AttributeType;
47     import org.geotools.feature.FeatureCollection;
48     import org.geotools.styling.Style;
49     import org.opengis.referencing.crs.CoordinateReferenceSystem;
50    
51     import schmitzm.geotools.styling.StylingUtil;
52     import skrueger.AttributeMetaData;
53     import skrueger.i8n.Translation;
54    
55     import com.vividsolutions.jts.geom.Envelope;
56    
57     /**
58     * This class enables a non Atlas context to use the Atlas LayerPanel
59     * {@link JPanel} as a {@link MapContextManagerInterface}
60     *
61     * @author <a href="mailto:[email protected]">Stefan Alfons Kr&uuml;ger</a>
62     */
63     public class StyledFS implements StyledFeatureSourceInterface {
64     private static final Logger LOGGER = Logger.getLogger(StyledFS.class);
65    
66     private final FeatureSource fs;
67    
68     /**
69     * A unique ID which identifies the Layer in the Atlas. It's more important
70     * than it should be ;-)
71     */
72     private String id;
73    
74     private Style style;
75    
76     private Translation title;
77    
78     private Translation desc;
79    
80     private File sldFile;
81    
82     private HashMap<Integer, AttributeMetaData> map;
83    
84     /**
85     * This class enables a non Atlas context to use the Atlas LayerPanel
86     * {@link JPanel} as a {@link MapContextManagerInterface}
87     *
88     * @param fs
89     * {@link FeatureSource} that is beeing styled.
90     *
91     * @param sldFile
92     * may be <code>null</code>. Otherwise the SLD {@link File} to
93     * import and associate with this {@link StyledFS}
94     */
95     public StyledFS(FeatureSource fs, File sldFile) {
96    
97     this.fs = fs;
98     id = StyledFS.class.getSimpleName()
99     + new Random(new Date().getTime()).nextInt(10000000);
100    
101     this.sldFile = sldFile;
102    
103     if ((sldFile != null) && (sldFile.exists())) {
104     try {
105     style = StylingUtil.loadSLD(sldFile)[0];
106     } catch (FileNotFoundException e) {
107     LOGGER
108     .debug("The SLD file passed was empty. Leaving the Style untouched. (We are in the constructor.. so its null");
109     } catch (Exception e) {
110     LOGGER.warn("Reading SLD failed: " + sldFile, e);
111     }
112     }
113     title = new Translation();
114     title.fromOneLine(sldFile.getName());
115    
116     desc = new Translation();
117     desc.fromOneLine(sldFile.getAbsolutePath());
118     }
119    
120     public void dispose() {
121     }
122    
123     /**
124     * Returnes human readable {@link String} of the CRS natively used by this
125     * {@link DpLayer}
126     *
127     * If crs == null, it will call {@link #getGeoObject()}
128     *
129     */
130     public String getCRSString() {
131     if (getCrs() == null)
132     return "CRS?";
133    
134     return getCrs().getName().getCode();
135     }
136    
137     public CoordinateReferenceSystem getCrs() {
138     return fs.getSchema().getDefaultGeometry().getCoordinateSystem();
139     }
140    
141     public Translation getDesc() {
142     return desc;
143     }
144    
145     public Envelope getEnvelope() {
146     try {
147     return fs.getBounds();
148     } catch (IOException e) {
149     e.printStackTrace();
150     return null;
151     }
152     }
153    
154     public FeatureSource getGeoObject() {
155     return fs;
156     }
157    
158     public String getId() {
159     return id;
160     }
161    
162     public ImageIcon getImageIcon() {
163     return null;
164     }
165    
166     public URL getInfoURL() {
167     return null;
168     }
169    
170     public Translation getKeywords() {
171     return null;
172     }
173    
174     public Style getStyle() {
175     return style;
176     }
177    
178     public Translation getTitle() {
179     return title;
180     }
181    
182     public boolean isDisposed() {
183     return false;
184     }
185    
186     /**
187     * If true, this layer will not be shown in the legend. Default = false
188     */
189     /**
190     *
191     * Killed by SK: 6. April 09: Ein Layer soll nicht generell auf
192     * verstecken/nicht verstecken gestellt werden können. Das sind
193     * Eigenschaften der Karte/MapContext, ebenso wie die Reihenfolge der Layer.
194     * Im Atlas verwaltet deshalb nun die Klasse skrueger.atlas.Map welche Layer
195     * nicht in der Legende auftauchen sollen. Meines Wissens hat keiner bisher
196     * die Funktion genutzt.
197     *
198     * // public boolean isHideInLegend() { // return false; // }
199     */
200    
201     public void setDesc(Translation dec) {
202     this.desc = dec;
203     }
204    
205     public void setImageIcon(ImageIcon icon) {
206     }
207    
208     public void setKeywords(Translation keywords) {
209     }
210    
211     public void setStyle(Style style) {
212     this.style = style;
213    
214     }
215    
216     public void setTitle(Translation title) {
217     this.title = title;
218    
219     }
220    
221     public void uncache() {
222     }
223    
224     /**
225     *
226     */
227     public Map<Integer, AttributeMetaData> getAttributeMetaDataMap() {
228     if (map == null) {
229    
230     map = new HashMap<Integer, AttributeMetaData>();
231    
232     // Leaving out the first one, it will be the_geom
233     for (int i = 1; i < fs.getSchema().getAttributeCount(); i++) {
234     AttributeType att = fs.getSchema().getAttributeType(i);
235    
236     AttributeMetaData attMetaData = new AttributeMetaData(i, att
237     .getLocalName());
238     map.put(i, attMetaData);
239     }
240     }
241     return map;
242     }
243    
244     /**
245     * @return The {@link File} where the SLD was loaded from or
246     * <code>null</code> if there didn't exist a {@link File}.
247     *
248     * @author <a href="mailto:[email protected]">Stefan Alfons
249     * Kr&uuml;ger</a>
250     */
251     public File getSldFile() {
252     return sldFile;
253     }
254    
255     public void setSldFile(File sldFile) {
256     this.sldFile = sldFile;
257     }
258    
259     /**
260     * Returns the features of the {@link FeatureSource}.
261     *
262     * @see {@link StyledFeaturesInterface}
263     */
264     @Override
265     public FeatureCollection getFeatureCollection() {
266     FeatureCollection features;
267     try {
268     features = getGeoObject().getFeatures();
269     } catch (IOException e) {
270     throw new RuntimeException(
271     "Error getting the features of the FeatureSource");
272     }
273     return features;
274     }
275    
276     /**
277     * Same as {@link #getGeoObject()} method, but complies to the
278     * {@link StyledFeaturesInterface}
279     *
280     * @see {@link StyledFeaturesInterface}
281     */
282     @Override
283     public FeatureSource getFeatureSource() {
284     return getGeoObject();
285     }
286    
287     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26