/[schmitzm]/branches/2.0-RC2/src/skrueger/geotools/StyledFeatureCollectionTableModel.java
ViewVC logotype

Annotation of /branches/2.0-RC2/src/skrueger/geotools/StyledFeatureCollectionTableModel.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 127 - (hide annotations)
Sat May 30 14:29:58 2009 UTC (15 years, 9 months ago) by mojays
Original Path: trunk/src/skrueger/geotools/StyledFeatureCollectionTableModel.java
File size: 9936 byte(s)
Many many many new JFreeChart stuff (selection panel and renderer, etc.)
- schmitzm.jfree.chart.SelectableChartPanel
- schmitzm.jfree.chart.ChartMouseSelectionTracker
- schmitzm.jfree.chart.selection.*
- schmitzm.jfree.chart.renderer.*
Plus: Imports organized!
1 mojays 47 /** SCHMITZM - This file is part of the java library of Martin O.J. Schmitz (SCHMITZM)
2    
3     This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
4     This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
5     You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
6    
7     Diese Bibliothek ist freie Software; Sie dürfen sie unter den Bedingungen der GNU Lesser General Public License, wie von der Free Software Foundation veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß Version 2.1 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
8     Diese Bibliothek wird in der Hoffnung weiterverbreitet, daß sie nützlich sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die implizierte Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Mehr Details finden Sie in der GNU Lesser General Public License.
9     Sie sollten eine Kopie der GNU Lesser General Public License zusammen mit dieser Bibliothek erhalten haben; falls nicht, schreiben Sie an die Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
10     **/
11 mojays 46 package skrueger.geotools;
12    
13 alfonx 111
14 mojays 52 import java.util.Iterator;
15     import java.util.Map;
16     import java.util.Vector;
17    
18 alfonx 111 import org.apache.log4j.Logger;
19 mojays 52 import org.geotools.data.DefaultQuery;
20     import org.geotools.data.FeatureSource;
21     import org.geotools.data.Query;
22     import org.geotools.data.memory.MemoryDataStore;
23     import org.geotools.feature.FeatureCollection;
24     import org.opengis.filter.Filter;
25    
26 mojays 46 import schmitzm.geotools.gui.FeatureCollectionTableModel;
27 mojays 52 import skrueger.AttributeMetaData;
28 mojays 55 import skrueger.i8n.I8NUtil;
29     import skrueger.i8n.Translation;
30 mojays 46
31 mojays 127 import com.vividsolutions.jts.geom.Envelope;
32    
33 mojays 52 /**
34 mojays 53 * This class extends the the {@link FeatureCollectionTableModel} with the
35 alfonx 56 * functionalities of the {@link AttributeMetaData} of
36     * {@linkplain StyledMapInterface styled objects}.
37 mojays 53 * <ul>
38 mojays 58 * <li>column names are translated according to {@link AttributeMetaData#getTitle()}</li>
39     * <li>columns are hidden according to {@link AttributeMetaData#isVisible()()}</li>
40 alfonx 56 * </ul>
41 mojays 58 * @author <a href="mailto:[email protected]">Martin Schmitz</a> (University of Bonn/Germany)
42 mojays 52 */
43 mojays 58 public class StyledFeatureCollectionTableModel extends FeatureCollectionTableModel {
44 alfonx 111 final static private Logger LOGGER = Logger.getLogger(StyledFeatureCollectionTableModel.class);
45 mojays 58 /** Holds the data source as styled map. */
46 alfonx 111 protected StyledMapInterface<?> map = null;
47 mojays 58 /** Contains only the visible elements of the {@link AttributeMetaData}-Map */
48 mojays 57 protected Map<Integer, AttributeMetaData> visibleAMD = null;
49 mojays 58 /** Holds the data source for the table as {@code FeatureSource}. */
50     protected FeatureSource featureSource = null;
51 mojays 59 /** Contains the complete {@link AttributeMetaData}-Map of the styled layer. */
52     protected Map<Integer, AttributeMetaData> origAMD = null;
53 mojays 58 /** Holds the current filter on the table */
54     protected Filter filter = null;
55 alfonx 62 /** Holds the Bounds for all features. Only set once during the constructor **/
56     protected Envelope bounds;
57 alfonx 56
58 mojays 58 /**
59     * Creates a new table model for a styled map.
60     * @param map the styled map
61     */
62 mojays 57 public StyledFeatureCollectionTableModel(StyledFeatureCollectionInterface map) {
63     this(map,Filter.INCLUDE);
64     }
65 alfonx 56
66 mojays 58 /**
67     * Creates a new table model for a styled map.
68     * @param map the styled map
69     * @param filter filter applied to the table
70     */
71 mojays 57 public StyledFeatureCollectionTableModel(StyledFeatureCollectionInterface map, Filter filter) {
72     super();
73     setFeatureCollection(map, filter);
74     }
75 alfonx 56
76 mojays 58 /**
77     * Creates a new table model for a styled map.
78     * @param map the styled map
79     */
80 mojays 57 public StyledFeatureCollectionTableModel(StyledFeatureSourceInterface map) {
81     this(map,Filter.INCLUDE);
82     }
83 alfonx 56
84 mojays 58 /**
85     * Creates a new table model for a styled map.
86     * @param map the styled map
87     * @param filter filter applied to the table
88     */
89 mojays 57 public StyledFeatureCollectionTableModel(StyledFeatureSourceInterface map, Filter filter) {
90     super();
91     setFeatureCollection(map, filter);
92     }
93 alfonx 56
94 mojays 58 /**
95     * Sets a new data source for the table.
96     * @param fs the feature source
97     * @param amd {@link AttributeMetaData}-Map to define the visible attributes
98     * and translation
99     */
100 mojays 57 protected void setFeatureSource(FeatureSource fs, Map<Integer, AttributeMetaData> amd, Filter filter) throws Exception {
101     if ( filter == null )
102     filter = Filter.INCLUDE;
103 alfonx 62
104 mojays 58 this.featureSource = fs;
105     this.filter = filter;
106 mojays 59 this.origAMD = amd;
107 mojays 58 this.visibleAMD = null;
108 mojays 57
109     FeatureCollection fc = null;
110     if (fs != null) {
111 alfonx 62
112     bounds = fs.getBounds();
113    
114     Query query = new DefaultQuery(fs.getSchema().getTypeName(), filter);
115 mojays 57 if (amd != null) {
116     // determine the names of the visible Attributes
117     this.visibleAMD = StyledMapUtil.getVisibleAttributeMetaData(amd, true);
118     Vector<String> visibleAttrNames = new Vector<String>();
119     // Add the column with the geometry (usually "the_geom")
120     visibleAttrNames.add(fs.getSchema().getDefaultGeometry().getLocalName());
121     for (int attrIdx : visibleAMD.keySet())
122     visibleAttrNames.add(fs.getSchema().getAttributeType(attrIdx).getLocalName());
123 alfonx 56
124 mojays 57 // create a query for the visible attributes
125     String[] properties = visibleAttrNames.toArray(new String[0]);
126 alfonx 62
127 alfonx 111 LOGGER.debug("Query contains the following attributes: " + visibleAttrNames);
128    
129 mojays 57 query = new DefaultQuery(fs.getSchema().getTypeName(), filter, properties);
130     }
131     fc = fs.getFeatures(query);
132 alfonx 62
133     // FAILS:!!!, even with query = new DefaultQuery(fs.getSchema().getTypeName(), filter);
134     // java.lang.UnsupportedOperationException: Unknown feature
135     // attribute: PQM_MOD
136     // at
137     // schmitzm.geotools.feature.FeatureOperationTree.evaluate(FeatureOperationTree.java:93)
138     // bounds = fc.getBounds();
139     // SK, 17.4.2009
140     //
141     // System.out.println("Filter = "+filter);
142     // System.out.println("Size of FC = "+fc.size());
143     // System.out.println("anz att= "+fc.getNumberOfAttributes());
144 mojays 57 }
145     setFeatureCollection(fc);
146     }
147 alfonx 56
148 mojays 58 /**
149     * Converts the {@code StyledFeatureCollection} to a {@code FeatureSource}
150     * and sets this as the new data source for the table.
151     * @param fs the feature source
152     * @param amd {@link AttributeMetaData}-Map to define the visible attributes
153     * and translation
154     */
155 mojays 57 public void setFeatureCollection(StyledFeatureCollectionInterface map, Filter filter) {
156 mojays 58 this.map = map;
157 mojays 57 try {
158     if (map == null)
159     setFeatureSource(null, null, null);
160     else {
161     FeatureCollection fc = map.getGeoObject();
162 mojays 112 String fcName = fc.getSchema().getTypeName();
163 mojays 57 FeatureSource fs = new MemoryDataStore(fc).getFeatureSource(fcName);
164     setFeatureSource(fs, map.getAttributeMetaDataMap(), filter);
165     }
166     } catch (Exception err) {
167     throw new RuntimeException(err);
168     }
169     }
170 alfonx 56
171 mojays 58 /**
172     * Sets the {@code StyledFeatureCollection} as new data source for the table.
173     * @param fs the feature source
174     * @param amd {@link AttributeMetaData}-Map to define the visible attributes
175     * and translation
176     */
177 mojays 57 public void setFeatureCollection(StyledFeatureSourceInterface map, Filter filter) {
178 mojays 58 this.map = map;
179 mojays 57 try {
180     if (map == null)
181     setFeatureSource(null, null, null);
182     else
183     setFeatureSource(map.getGeoObject(), map.getAttributeMetaDataMap(), filter);
184     } catch (Exception err) {
185     throw new RuntimeException(err);
186     }
187     }
188 mojays 58
189     /**
190     * Resets the filter for the table.
191     * @param filter a filter
192     */
193     public void setFilter(Filter filter) {
194     try{
195 mojays 59 setFeatureSource(this.featureSource, this.origAMD, filter);
196 mojays 58 } catch (Exception err) {
197 alfonx 111 LOGGER.error("Setting the filter of the table model", err);
198 mojays 58 throw new RuntimeException(err);
199     }
200     }
201 alfonx 62
202     /**
203     * @return <code>Filter.INCLUDE</code> or the {@link Filter} applied to the Features
204     */
205     public Filter getFilter() {
206     return this.filter;
207     }
208 alfonx 56
209 mojays 58 /**
210     * After calling {@code super.reorganize(.)} this method replaced the
211     * column descriptions with the titles of the {@code AttributeMetaData}.
212     * @param fireTableStructureChanged indicates whether a table event is
213     * initiated after reorganize
214     */
215 mojays 57 @Override
216 mojays 58 protected void reorganize(boolean fireTableStructureChanged) {
217     super.reorganize(false);
218 mojays 57 // translate the column names
219     if (visibleAMD != null) {
220     Iterator<Integer> keys = visibleAMD.keySet().iterator();
221     for (int i = 0; i < colNames.length && keys.hasNext(); i++) {
222     Translation title = visibleAMD.get(keys.next()).getTitle();
223     if (!I8NUtil.isEmpty(title)) {
224 alfonx 62 // System.out.println("set colname " + i + " to " + title.toString());
225 mojays 57 colNames[i] = title.toString();
226     }
227     }
228     }
229 mojays 58 if ( fireTableStructureChanged )
230     fireTableStructureChanged();
231 mojays 57 }
232 alfonx 62
233     /**
234     * @returns Cached bounds for the whole dataset (without applying the
235     * filter) or <code>null</code>
236     */
237     public Envelope getBounds() {
238     return bounds;
239     }
240 mojays 46 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26