/[schmitzm]/trunk/src/skrueger/geotools/StyledFS.java
ViewVC logotype

Annotation of /trunk/src/skrueger/geotools/StyledFS.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 422 - (hide annotations)
Fri Oct 2 00:47:48 2009 UTC (15 years, 5 months ago) by alfonx
Original Path: branches/1.0-gt2-2.6/src/skrueger/geotools/StyledFS.java
File size: 7404 byte(s)
* GP-Feature: Improved/unified dialog management moved further.
* GP-Feature: popup menu in MenuTree allows to edit DpEntries and Maps
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.Random;
38    
39     import javax.swing.ImageIcon;
40     import javax.swing.JPanel;
41    
42     import org.apache.log4j.Logger;
43     import org.geotools.data.FeatureSource;
44     import org.geotools.feature.FeatureCollection;
45     import org.geotools.styling.Style;
46 alfonx 336 import org.opengis.feature.simple.SimpleFeature;
47     import org.opengis.feature.simple.SimpleFeatureType;
48 alfonx 332 import org.opengis.feature.type.AttributeDescriptor;
49 alfonx 244 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 alfonx 336 private final FeatureSource<SimpleFeatureType, SimpleFeature> fs;
67 alfonx 244
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 alfonx 420 private AttributeMetadataMap map;
83 alfonx 244
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 alfonx 336 public StyledFS(FeatureSource<SimpleFeatureType, SimpleFeature> fs, File sldFile) {
96 alfonx 244
97     this.fs = fs;
98     id = StyledFS.class.getSimpleName()
99     + new Random(new Date().getTime()).nextInt(10000000);
100    
101     this.sldFile = sldFile;
102    
103 alfonx 336 if (sldFile != null && sldFile.exists()) {
104 alfonx 244 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 alfonx 336 * Returns human readable {@link String} of the CRS natively used by this
125 alfonx 244 * {@link DpLayer}
126     *
127 alfonx 336 * If CRS == null, it will call {@link #getGeoObject()}
128 alfonx 244 *
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 alfonx 336 return fs.getSchema().getCoordinateReferenceSystem();
139 alfonx 244 }
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 alfonx 336 public FeatureSource<SimpleFeatureType, SimpleFeature> getGeoObject() {
155 alfonx 244 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 alfonx 420 public AttributeMetadataMap getAttributeMetaDataMap() {
228 alfonx 244 if (map == null) {
229    
230 alfonx 420 map = new AttributeMetadataMap();
231 alfonx 244
232     // Leaving out the first one, it will be the_geom
233     for (int i = 1; i < fs.getSchema().getAttributeCount(); i++) {
234 alfonx 336 AttributeDescriptor att = fs.getSchema().getDescriptor(i);
235 alfonx 244
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