[Schmitzm-commits] r173 - trunk/src/schmitzm/geotools/gui
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Tue Jun 30 22:41:44 CEST 2009
Author: alfonx
Date: 2009-06-30 22:41:43 +0200 (Tue, 30 Jun 2009)
New Revision: 173
Modified:
trunk/src/schmitzm/geotools/gui/FeatureCollectionFilterPanel.java
trunk/src/schmitzm/geotools/gui/FeatureTablePane.java
Log:
* Changed the behaviour of the preview JMapPane in the FeatureTablePane.
** In FeaturetablePane it now shows the table's features in gry, and the selected features in red.
** In FeatureCollectionFilterPane, the unfiltered features are shown in gray, with the filter's result in red.
Modified: trunk/src/schmitzm/geotools/gui/FeatureCollectionFilterPanel.java
===================================================================
--- trunk/src/schmitzm/geotools/gui/FeatureCollectionFilterPanel.java 2009-06-30 20:40:00 UTC (rev 172)
+++ trunk/src/schmitzm/geotools/gui/FeatureCollectionFilterPanel.java 2009-06-30 20:41:43 UTC (rev 173)
@@ -28,148 +28,213 @@
import javax.swing.event.AncestorListener;
import org.geotools.feature.FeatureCollection;
+import org.geotools.map.DefaultMapLayer;
+import org.geotools.styling.Rule;
import org.geotools.styling.Style;
+import org.geotools.styling.Symbolizer;
import org.opengis.filter.Filter;
import schmitzm.geotools.feature.AttributeTypeFilter;
import schmitzm.geotools.feature.FeatureOperationTree;
import schmitzm.geotools.feature.FeatureOperationTreeFilter;
import schmitzm.geotools.feature.FeatureOperationTreeParser;
+import schmitzm.geotools.feature.FeatureUtil;
+import schmitzm.geotools.styling.StylingUtil;
import schmitzm.swing.ExceptionDialog;
import schmitzm.swing.SwingUtil;
+import sun.util.logging.resources.logging;
/**
* Diese Klasse stellt ein Panel zur Verfuegung, mit der ein
- * {@link FeatureOperationTreeFilter} in Form einer arithmetischen
- * (und boolschen) Formel erstellt werden kann. Neben den Komponenten zur
- * Definition/Eingabe des Filters enthaelt das Panel einen Vorschau-Bereich,
- * in dem eine {@link FeatureCollection} angezeigt wird, auf der der Filter
+ * {@link FeatureOperationTreeFilter} in Form einer arithmetischen (und
+ * boolschen) Formel erstellt werden kann. Neben den Komponenten zur
+ * Definition/Eingabe des Filters enthaelt das Panel einen Vorschau-Bereich, in
+ * dem eine {@link FeatureCollection} angezeigt wird, auf der der Filter
* angewandt wird.
+ *
* @see FeatureOperationTree
* @see FeatureOperationTreeParser
* @see FeatureOperationTreeFilter
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ * (University of Bonn/Germany)
* @version 1.0
*/
public class FeatureCollectionFilterPanel extends FeatureFilterPanel {
- /** Konstante fuer die Layout-Constraints des Vorschau-Bereich.
- * @see #layoutConstraints
- * @see #previewPanel */
- public static final String PREVIEW_PANEL = FeatureCollectionFilterPanel.class.getName()+"filterPreviewPanel";
- /** Konstante fuer die Layout-Constraints des Testen-Button.
- * @see #layoutConstraints
- * @see #resetCaptions(Map)
- * @see #testButton */
- public static final String TEST_BUTTON = FeatureCollectionFilterPanel.class.getName()+".TestButton";
- /** Konstante fuer die Layout-Constraints des Testen-Button.
- * @see #layoutConstraints
- * @see #testButton */
- public static final String TESTRESULT_LABEL = FeatureCollectionFilterPanel.class.getName()+".TestResultLabel";
- /** Konstante fuer die Layout-Constraints des Details-Button.
- * @see #layoutConstraints
- * @see #testResultDetails */
- public static final String TESTRESULTDETAILS_BUTTON = FeatureCollectionFilterPanel.class.getName()+".TestResultDetailsButton";
- /** Konstante fuer den Tooltip des Details-Button.
- * @see #testResultDetails */
- public static final String TESTRESULTDETAILS_TOOLTIP = FeatureCollectionFilterPanel.class.getName()+".TestResultDetailsToolTip";
- /** Panel fuer Filter-Vorschau. */
- private FeatureTablePane previewPanel = null;
- /** Button zum Testen der Formel */
- protected JButton testButton = null;
- /** Label mit Ergebnis des Formel-Tests */
- protected JLabel testResult = null;
- /** Button fuer Details des Formel-Tests-Ergebnis */
- protected JButton testResultDetails = null;
+ /**
+ * Konstante fuer die Layout-Constraints des Vorschau-Bereich.
+ *
+ * @see #layoutConstraints
+ * @see #previewPanel
+ */
+ public static final String PREVIEW_PANEL = FeatureCollectionFilterPanel.class
+ .getName()
+ + "filterPreviewPanel";
+ /**
+ * Konstante fuer die Layout-Constraints des Testen-Button.
+ *
+ * @see #layoutConstraints
+ * @see #resetCaptions(Map)
+ * @see #testButton
+ */
+ public static final String TEST_BUTTON = FeatureCollectionFilterPanel.class
+ .getName()
+ + ".TestButton";
+ /**
+ * Konstante fuer die Layout-Constraints des Testen-Button.
+ *
+ * @see #layoutConstraints
+ * @see #testButton
+ */
+ public static final String TESTRESULT_LABEL = FeatureCollectionFilterPanel.class
+ .getName()
+ + ".TestResultLabel";
+ /**
+ * Konstante fuer die Layout-Constraints des Details-Button.
+ *
+ * @see #layoutConstraints
+ * @see #testResultDetails
+ */
+ public static final String TESTRESULTDETAILS_BUTTON = FeatureCollectionFilterPanel.class
+ .getName()
+ + ".TestResultDetailsButton";
+ /**
+ * Konstante fuer den Tooltip des Details-Button.
+ *
+ * @see #testResultDetails
+ */
+ public static final String TESTRESULTDETAILS_TOOLTIP = FeatureCollectionFilterPanel.class
+ .getName()
+ + ".TestResultDetailsToolTip";
- /** Speichert, ob im Vorschau-Panel eine grafische Anzeige erscheinen soll */
- private boolean geomPrev = false;
- /** Speichert, die FeatureCollection */
- private FeatureCollection fc = null;
-
- /** Speichert den letzten Fehler in der Filter-Regel. */
- protected Throwable testError = null;
+ /** Panel fuer Filter-Vorschau. */
+ private FeatureTablePane previewPanel = null;
+ /** Button zum Testen der Formel */
+ protected JButton testButton = null;
+ /** Label mit Ergebnis des Formel-Tests */
+ protected JLabel testResult = null;
+ /** Button fuer Details des Formel-Tests-Ergebnis */
+ protected JButton testResultDetails = null;
- /**
- * Erzeugt ein neues Panel.
- * @param fc definiert die zur Verfuegung gestellten Feature-Attribute
- * @param geomPrev bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
- * oder nicht ({@code false})
- * @see FeatureCollection#getSchema()
- */
- public FeatureCollectionFilterPanel(FeatureCollection fc, boolean geomPrev) {
- this( fc, geomPrev, true );
- }
+ /** Speichert, ob im Vorschau-Panel eine grafische Anzeige erscheinen soll */
+ private boolean geomPrev = false;
+ /** Speichert, die FeatureCollection */
+ private FeatureCollection fc = null;
- /**
- * Erzeugt ein neues Panel
- * @param fc definiert die zur Verfuegung gestellten Feature-Attribute
- * @param initGUI Flag, ob {@link #initGUI()} am Ende des Konstruktor
- * aufgerufen werden soll (wenn {@code false} muss die explizit
- * durch die Unterklasse erfolgen!)
- */
- protected FeatureCollectionFilterPanel(FeatureCollection fc, boolean geomPrev, boolean initGUI) {
- super(fc.getSchema(), false);
- this.geomPrev = geomPrev;
+ /** Speichert den letzten Fehler in der Filter-Regel. */
+ protected Throwable testError = null;
- // Layout-Anordnung fuer GUI
- layoutConstraints.get( ATTRIBUTE_TABLE ).gridwidth = 3;
- layoutConstraints.get( ATTRIBUTE_TABLE ).weighty = 0.3;
- layoutConstraints.get( RULE_TEXTFIELD ).gridwidth = 2;
- layoutConstraints.get( OPERATOR_COMBOBOX ).gridx = 2;
- layoutConstraints.put( TEST_BUTTON, new GridBagConstraints(0,4,1,1, 0, 0.0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,10,10,10),0,0) );
- layoutConstraints.put( TESTRESULT_LABEL, new GridBagConstraints(1,4,2,1,1.0, 0.0,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5,10,10,10),0,0) );
- layoutConstraints.put( TESTRESULTDETAILS_BUTTON, new GridBagConstraints(2,4,1,1, 0, 0.0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5,10,10,10),0,0) );
- layoutConstraints.put( PREVIEW_PANEL, new GridBagConstraints(0,5,3,1, 0, 0.7,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5,10,10,10),0,0) );
+ /**
+ * Erzeugt ein neues Panel.
+ *
+ * @param fc
+ * definiert die zur Verfuegung gestellten Feature-Attribute
+ * @param geomPrev
+ * bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
+ * oder nicht ({@code false})
+ * @see FeatureCollection#getSchema()
+ */
+ public FeatureCollectionFilterPanel(FeatureCollection fc, boolean geomPrev) {
+ this(fc, geomPrev, true);
+ }
- if ( initGUI )
- initGUI();
+ /**
+ * Erzeugt ein neues Panel
+ *
+ * @param fc
+ * definiert die zur Verfuegung gestellten Feature-Attribute
+ * @param initGUI
+ * Flag, ob {@link #initGUI()} am Ende des Konstruktor aufgerufen
+ * werden soll (wenn {@code false} muss die explizit durch die
+ * Unterklasse erfolgen!)
+ */
+ protected FeatureCollectionFilterPanel(FeatureCollection fc,
+ boolean geomPrev, boolean initGUI) {
+ super(fc.getSchema(), false);
+ this.geomPrev = geomPrev;
- setFeatureCollection(fc);
- }
+ // Layout-Anordnung fuer GUI
+ layoutConstraints.get(ATTRIBUTE_TABLE).gridwidth = 3;
+ layoutConstraints.get(ATTRIBUTE_TABLE).weighty = 0.3;
+ layoutConstraints.get(RULE_TEXTFIELD).gridwidth = 2;
+ layoutConstraints.get(OPERATOR_COMBOBOX).gridx = 2;
+ layoutConstraints.put(TEST_BUTTON, new GridBagConstraints(0, 4, 1, 1,
+ 0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
+ new Insets(5, 10, 10, 10), 0, 0));
+ layoutConstraints
+ .put(TESTRESULT_LABEL, new GridBagConstraints(1, 4, 2, 1, 1.0,
+ 0.0, GridBagConstraints.WEST,
+ GridBagConstraints.HORIZONTAL,
+ new Insets(5, 10, 10, 10), 0, 0));
+ layoutConstraints.put(TESTRESULTDETAILS_BUTTON, new GridBagConstraints(
+ 2, 4, 1, 1, 0, 0.0, GridBagConstraints.EAST,
+ GridBagConstraints.NONE, new Insets(5, 10, 10, 10), 0, 0));
+ layoutConstraints.put(PREVIEW_PANEL, new GridBagConstraints(0, 5, 3, 1,
+ 0, 0.7, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+ new Insets(5, 10, 10, 10), 0, 0));
- /**
- * Initalisiert die GUI des Fensters. Der "Start-Button" der durch die
- * Oberklasse definiert wird, wird dabei aus dem Panel entfernt!
- */
- protected void initGUI() {
+ if (initGUI)
+ initGUI();
+
+ setFeatureCollection(fc);
+ }
+
+ /**
+ * Initalisiert die GUI des Fensters. Der "Start-Button" der durch die
+ * Oberklasse definiert wird, wird dabei aus dem Panel entfernt!
+ */
+ protected void initGUI() {
super.initGUI();
// Button zum Testen des Filters
- testButton = new JButton(GeotoolsGUIUtil.RESOURCE.getString(TEST_BUTTON));
+ testButton = new JButton(GeotoolsGUIUtil.RESOURCE
+ .getString(TEST_BUTTON));
testButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
performRuleTest();
}
});
-
+
// Button fuer Details des Test-Ergebnis
- testResultDetails = new JButton( GeotoolsGUIUtil.RESOURCE.getString(TESTRESULTDETAILS_BUTTON) );
+ testResultDetails = new JButton(GeotoolsGUIUtil.RESOURCE
+ .getString(TESTRESULTDETAILS_BUTTON));
testResultDetails.setVisible(false);
- testResultDetails.setToolTipText( GeotoolsGUIUtil.RESOURCE.getString(TESTRESULTDETAILS_TOOLTIP) );
- testResultDetails.addActionListener( new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- ExceptionDialog.show(FeatureCollectionFilterPanel.this, testError, true);
- }
+ testResultDetails.setToolTipText(GeotoolsGUIUtil.RESOURCE
+ .getString(TESTRESULTDETAILS_TOOLTIP));
+ testResultDetails.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ ExceptionDialog.show(FeatureCollectionFilterPanel.this,
+ testError, true);
+ }
});
-
+
// Label fuer Fehler-Meldungen
testResult = new JLabel("");
// Schrift: rot und fett
- testResult.setForeground( Color.RED );
- testResult.setFont( testResult.getFont().deriveFont(Font.BOLD) );
+ testResult.setForeground(Color.RED);
+ testResult.setFont(testResult.getFont().deriveFont(Font.BOLD));
if (getPreviewPanel() == null)
setPreviewPanel(new FeatureTablePane(null, geomPrev) {
+
+ FeatureCollection fullFeatureCollection;
+
// In der Tabelle sollen einzelne Werte selektiert werden
// koennen
// und diese bei einem Doppelklick in die Formel uebernommen
// werden
+ @Override
protected void initGUI(boolean geomPreview) {
super.initGUI(geomPreview);
+
+ if (mapPane != null && fullFeatureCollection != null) {
+
+ }
+
// nur einzelne Zellen duerfen selektiert werden
featuresTable.setColumnSelectionAllowed(true);
- featuresTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ featuresTable
+ .setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// beim Klick auf eine Tabellenzelle, soll der Wert in die
// Formel
// uebernommen werden
@@ -189,11 +254,55 @@
// Im Vorschau-Panel sollen nicht die in der Tabelle selektieren
// Features angezeigt werden, sondern immer ALLE Features der
- // Tabelle (also
- // das Resultat des Filters)
+ // Tabelle (also das Resultat des Filters)
+ @Override
public void performListSelection() {
}
+ @Override
+ /*
+ * This method differs from the super-method! This method does
+ * not care about selections in the table. It shows the complete
+ * table (= paramter fc) as a selection on top of the complete
+ * feature collection (which is rendered in gray).
+ */
+ protected void showFeaturesInMap(FeatureCollection fc) {
+ System.out.println("SHOW IN MAP!");
+ final FeatureCollection fullFeatureCollection = FeatureCollectionFilterPanel.this
+ .getFeatureCollection();
+
+ if (fullFeatureCollection != null && fc != null)
+ System.out.println(fullFeatureCollection.size()
+ + " vs " + fc.size());
+
+ getPreviewPanel().mapPane.getContext().clearLayerList();
+
+ if (fullFeatureCollection != null) {
+ /**
+ * Als unterstes layer sollen alle Features in grau
+ * dargestellt werden. Darüber dann in rot das
+ * Filterergebnis.
+ */
+ getPreviewPanel().mapPane.getContext().addLayer(
+ new DefaultMapLayer(fullFeatureCollection,
+ StylingUtil.createStyleSimple(fullFeatureCollection, Color.lightGray, Color.darkGray)));
+
+ // This thows an exception... We have to move to GT filters i guess.
+ getPreviewPanel().mapPane.zoomTo(fullFeatureCollection);
+ }
+
+ if (fc != null) {
+
+ /**
+ * Der Inhalt der Tabelle soll in rot darüber gezeichnet werden
+ */
+
+ getPreviewPanel().mapPane.getContext().addLayer(
+ new DefaultMapLayer(fc, StylingUtil.createStyleSimple(fc, Color.red, Color.white)));
+ }
+
+ }
+
});
// Geometry-Attribute sollen nicht angezeigt werden
getPreviewPanel().setAttributeFilter(AttributeTypeFilter.NO_GEOMETRY);
@@ -201,176 +310,203 @@
SwingUtil.setPreferredHeight(getPreviewPanel(), 50);
// zusaetzliche Komponenten einfuegen
- add(testButton, layoutConstraints.get(TEST_BUTTON));
- add(testResultDetails, layoutConstraints.get(TESTRESULTDETAILS_BUTTON));
- add(testResult, layoutConstraints.get(TESTRESULT_LABEL));
+ add(testButton, layoutConstraints.get(TEST_BUTTON));
+ add(testResultDetails, layoutConstraints.get(TESTRESULTDETAILS_BUTTON));
+ add(testResult, layoutConstraints.get(TESTRESULT_LABEL));
add(getPreviewPanel(), layoutConstraints.get(PREVIEW_PANEL));
-
+
// listen to the moment, the panel is inserted into a frame
// and then set the TEST-Button the default button
- addAncestorListener( new AncestorListener() {
- @Override
- public void ancestorAdded(AncestorEvent event) {
- if ( getRootPane() != null && getRootPane().getDefaultButton() == null )
- getRootPane().setDefaultButton(testButton);
-
- }
- @Override
- public void ancestorMoved(AncestorEvent event) {}
- @Override
- public void ancestorRemoved(AncestorEvent event) {}
+ addAncestorListener(new AncestorListener() {
+ @Override
+ public void ancestorAdded(AncestorEvent event) {
+ if (getRootPane() != null
+ && getRootPane().getDefaultButton() == null)
+ getRootPane().setDefaultButton(testButton);
+
+ }
+
+ @Override
+ public void ancestorMoved(AncestorEvent event) {
+ }
+
+ @Override
+ public void ancestorRemoved(AncestorEvent event) {
+ }
});
}
- /**
- * Setzt den Filter, der die dargestellten Attribute bestimmt.
- * @param attrFilter Filter
- */
- public void setAttributeFilter(AttributeTypeFilter attrFilter) {
- super.setAttributeFilter(attrFilter);
- // Filter auch auf die in der Vorschau dargestellten
- // Attribut-Spalten anwenden
- getPreviewPanel().setAttributeFilter(attrFilter);
- }
+ /**
+ * Setzt den Filter, der die dargestellten Attribute bestimmt.
+ *
+ * @param attrFilter
+ * Filter
+ */
+ public void setAttributeFilter(AttributeTypeFilter attrFilter) {
+ super.setAttributeFilter(attrFilter);
+ // Filter auch auf die in der Vorschau dargestellten
+ // Attribut-Spalten anwenden
+ getPreviewPanel().setAttributeFilter(attrFilter);
+ }
- /**
- * Setzt die Labels des Panels neu.
- * @param captionMap Map
- * @see FeatureFilterPanel#resetCaptions(Map)
- */
- public void resetCaptions(Map<String,Object> captionMap) {
- super.resetCaptions(captionMap);
- SwingUtil.resetCaption( testButton, captionMap.get(TEST_BUTTON) );
- }
+ /**
+ * Setzt die Labels des Panels neu.
+ *
+ * @param captionMap
+ * Map
+ * @see FeatureFilterPanel#resetCaptions(Map)
+ */
+ public void resetCaptions(Map<String, Object> captionMap) {
+ super.resetCaptions(captionMap);
+ SwingUtil.resetCaption(testButton, captionMap.get(TEST_BUTTON));
+ }
- /**
- * Fuegt an der Curserposition einen Wert in die Formel ein.
- * @param value Object
- */
- protected void insertValueInRule(Object value) {
- if ( value == null )
- value = "";
-
- String ruleValue = value.toString();
- // Nur numerische Werte direkt in Formel einfuegen.
- // Andere Werte als String in Anfuehrungsstrichen gekapselt.
- if ( !(value instanceof Number) )
- ruleValue = "\""+ruleValue+"\"";
- // Wert in Formel einfuegen
- performOperatorInsert(ruleValue, (JTextField)this.rule.getInputComponent());
- // Fokus zurueck auf Formel-Feld
- rule.grabFocus();
- }
+ /**
+ * Fuegt an der Curserposition einen Wert in die Formel ein.
+ *
+ * @param value
+ * Object
+ */
+ protected void insertValueInRule(Object value) {
+ if (value == null)
+ value = "";
- /**
- * Setzt die aktuell im Dialog eingegebene Formel und aktualisiert die
- * Vorschau.
- * @param rule Formel als String
- */
- public void setRule(String rule) {
- super.setRule(rule);
- performRuleTest();
- }
+ String ruleValue = value.toString();
+ // Nur numerische Werte direkt in Formel einfuegen.
+ // Andere Werte als String in Anfuehrungsstrichen gekapselt.
+ if (!(value instanceof Number))
+ ruleValue = "\"" + ruleValue + "\"";
+ // Wert in Formel einfuegen
+ performOperatorInsert(ruleValue, (JTextField) this.rule
+ .getInputComponent());
+ // Fokus zurueck auf Formel-Feld
+ rule.grabFocus();
+ }
+ /**
+ * Setzt die aktuell im Dialog eingegebene Formel und aktualisiert die
+ * Vorschau.
+ *
+ * @param rule
+ * Formel als String
+ */
+ public void setRule(String rule) {
+ super.setRule(rule);
+ performRuleTest();
+ }
- /**
- * Wird ausgefuehrt, wenn der Testen-Button gedrueckt wird.
- * Erzeugt einen Filter aus der angegebenen Formel, wertet diese
- * auf der {@link FeatureCollection} aus und zeigt das Resultat im
- * {@linkplain #previewPanel Vorschau-Bereich} an.
- * <br>
- * Tritt ein Fehler auf, wird die entsprechende Meldung im Label
- * {@link #testResult} (neben dem Button) angezeigt.
- *
- */
- protected void performRuleTest() {
- try {
- FeatureCollection subCollection = filterFeatureCollection();
- getPreviewPanel().setFeatureCollection( subCollection );
- resetComponentsAfterTest(null);
- } catch (Exception err) {
- getPreviewPanel().setFeatureCollection( null );
- resetComponentsAfterTest(err);
- }
- rule.grabFocus();
- }
-
- /**
- * (De)aktiviert Label und Button fuer die Fehlermeldung entsprechend einer etwaigen
- * Fehlermeldung. Wird ausgefuehrt nachdem der "Test"-Button geklickt wurde.
- * @param err Fehler (kann {@code null} sein)
- */
- protected void resetComponentsAfterTest(Throwable err) {
- testError = err;
- testResult.setText( err != null ? err.getMessage() : "" );
- testResultDetails.setVisible( err != null );
- }
+ /**
+ * Wird ausgefuehrt, wenn der Testen-Button gedrueckt wird. Erzeugt einen
+ * Filter aus der angegebenen Formel, wertet diese auf der
+ * {@link FeatureCollection} aus und zeigt das Resultat im
+ * {@linkplain #previewPanel Vorschau-Bereich} an. <br>
+ * Tritt ein Fehler auf, wird die entsprechende Meldung im Label
+ * {@link #testResult} (neben dem Button) angezeigt.
+ *
+ */
+ protected void performRuleTest() {
+ try {
+ FeatureCollection subCollection = filterFeatureCollection();
+ getPreviewPanel().setFeatureCollection(subCollection);
+ resetComponentsAfterTest(null);
+ } catch (Exception err) {
+ getPreviewPanel().setFeatureCollection(null);
+ resetComponentsAfterTest(err);
+ }
+ rule.grabFocus();
+ }
- /**
- * Setzt die {@link FeatureCollection}, die (gefiltert) in der Vorschau angezeigt
- * wird.
- * @param fc eine {@link FeatureCollection}, die zum Feature-Type (Schema) des
- * Formel-Panels passt
- * @exception IllegalArgumentException falls die FeatureCollection nicht zum
- * Schema des Panels passt
- * @see FeatureCollection#getSchema()
- */
- public void setFeatureCollection(FeatureCollection fc) {
- if ( getFeatureType() == null )
- setFeatureType( fc.getSchema() );
- if ( !fc.getSchema().equals( getFeatureType() ) )
- throw new IllegalArgumentException("FeatureCollection does not fit to schema of the panel!");
- this.fc = fc;
- if ( getPreviewPanel() != null )
- getPreviewPanel().setFeatureCollection( fc );
- }
+ /**
+ * (De)aktiviert Label und Button fuer die Fehlermeldung entsprechend einer
+ * etwaigen Fehlermeldung. Wird ausgefuehrt nachdem der "Test"-Button
+ * geklickt wurde.
+ *
+ * @param err
+ * Fehler (kann {@code null} sein)
+ */
+ protected void resetComponentsAfterTest(Throwable err) {
+ testError = err;
+ testResult.setText(err != null ? err.getMessage() : "");
+ testResultDetails.setVisible(err != null);
+ }
- /**
- * Liefert die {@link FeatureCollection}, auf die (gefiltert) im Vorschau-Panel
- * angezeigt wird.
- */
- public FeatureCollection getFeatureCollection() {
- return fc;
- }
+ /**
+ * Setzt die {@link FeatureCollection}, die (gefiltert) in der Vorschau
+ * angezeigt wird.
+ *
+ * @param fc
+ * eine {@link FeatureCollection}, die zum Feature-Type (Schema)
+ * des Formel-Panels passt
+ * @exception IllegalArgumentException
+ * falls die FeatureCollection nicht zum Schema des Panels
+ * passt
+ * @see FeatureCollection#getSchema()
+ */
+ public void setFeatureCollection(FeatureCollection fc) {
+ if (getFeatureType() == null)
+ setFeatureType(fc.getSchema());
+ if (!fc.getSchema().equals(getFeatureType()))
+ throw new IllegalArgumentException(
+ "FeatureCollection does not fit to schema of the panel!");
+ this.fc = fc;
+ if (getPreviewPanel() != null) {
+ getPreviewPanel().setFeatureCollection(fc);
+ }
+ }
- /**
- * Setzt den Style, in dem die Features in der Vorschau dargestellt werden.
- * @param style Style fuer die Features
- */
- public void setFeatureStyle( Style style ) {
- getPreviewPanel().setFeatureStyle( style );
- }
+ /**
+ * Liefert die {@link FeatureCollection}, auf die (gefiltert) im
+ * Vorschau-Panel angezeigt wird.
+ */
+ public FeatureCollection getFeatureCollection() {
+ return fc;
+ }
- /**
- * Liefert den Style, in dem die Features in der Vorschau dargestellt werden.
- */
- public Style getFeatureStyle() {
- return getPreviewPanel().getFeatureStyle();
- }
+ /**
+ * Setzt den Style, in dem die Features in der Vorschau dargestellt werden.
+ *
+ * @param style
+ * Style fuer die Features
+ */
+ public void setFeatureStyle(Style style) {
+ getPreviewPanel().setFeatureStyle(style);
+ }
- /**
- * Wendet die im Panel eingetragene Filter-Formel auf die {@link FeatureCollection}
- * des Vorschau-Fensters an und liefert die entsprechende Sub-Collection.
- * @see FeatureCollection#subCollection(Filter)
- */
- public FeatureCollection filterFeatureCollection( ) {
- return getFeatureCollection().subCollection( createFilter() );
- }
+ /**
+ * Liefert den Style, in dem die Features in der Vorschau dargestellt
+ * werden.
+ */
+ public Style getFeatureStyle() {
+ return getPreviewPanel().getFeatureStyle();
+ }
- /**
- * Wendet die im Panel eingetragene Filter-Formel auf eine {@link FeatureCollection}
- * and und liefert die entsprechende Sub-Collection.
- * @see FeatureCollection#subCollection(Filter)
- */
- public FeatureCollection filterFeatureCollection( FeatureCollection fc ) {
- return fc.subCollection( createFilter() );
- }
+ /**
+ * Wendet die im Panel eingetragene Filter-Formel auf die
+ * {@link FeatureCollection} des Vorschau-Fensters an und liefert die
+ * entsprechende Sub-Collection.
+ *
+ * @see FeatureCollection#subCollection(Filter)
+ */
+ public FeatureCollection filterFeatureCollection() {
+ return getFeatureCollection().subCollection(createFilter());
+ }
-public void setPreviewPanel(FeatureTablePane previewPanel) {
- this.previewPanel = previewPanel;
-}
+ /**
+ * Wendet die im Panel eingetragene Filter-Formel auf eine
+ * {@link FeatureCollection} and und liefert die entsprechende
+ * Sub-Collection.
+ *
+ * @see FeatureCollection#subCollection(Filter)
+ */
+ public FeatureCollection filterFeatureCollection(FeatureCollection fc) {
+ return fc.subCollection(createFilter());
+ }
-public FeatureTablePane getPreviewPanel() {
- return previewPanel;
+ public void setPreviewPanel(FeatureTablePane previewPanel) {
+ this.previewPanel = previewPanel;
+ }
+
+ public FeatureTablePane getPreviewPanel() {
+ return previewPanel;
+ }
}
-}
Modified: trunk/src/schmitzm/geotools/gui/FeatureTablePane.java
===================================================================
--- trunk/src/schmitzm/geotools/gui/FeatureTablePane.java 2009-06-30 20:40:00 UTC (rev 172)
+++ trunk/src/schmitzm/geotools/gui/FeatureTablePane.java 2009-06-30 20:41:43 UTC (rev 173)
@@ -12,8 +12,8 @@
package schmitzm.geotools.gui;
import java.awt.BorderLayout;
+import java.awt.Color;
import java.awt.Dimension;
-import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JScrollPane;
@@ -27,11 +27,11 @@
import javax.swing.table.TableModel;
import org.geotools.feature.FeatureCollection;
-import org.geotools.map.MapLayer;
+import org.geotools.map.DefaultMapLayer;
import org.geotools.styling.Style;
import schmitzm.geotools.feature.AttributeTypeFilter;
-import schmitzm.geotools.feature.FeatureUtil;
+import schmitzm.geotools.styling.StylingUtil;
import schmitzm.swing.JPanel;
import schmitzm.swing.SortableJTable;
import schmitzm.swing.SwingUtil;
@@ -42,245 +42,283 @@
* Tabelle die in der Tabelle ausgewaehlten Features grafisch dargestellt.<br>
* <br>
* <b>Bemerkung:</b><br>
- * Als {@code TableModel} fuer die Feature-Tabelle verwendet diese Klasse
- * ein eigenes internes {@link TableModel}, welches effizienter arbeitet,
- * als {@link org.geotools.gui.swing.table.FeatureTableModel org.geotools.gui.swing.table.FeatureTableModel}.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * Als {@code TableModel} fuer die Feature-Tabelle verwendet diese Klasse ein
+ * eigenes internes {@link TableModel}, welches effizienter arbeitet, als
+ * {@link org.geotools.gui.swing.table.FeatureTableModel
+ * org.geotools.gui.swing.table.FeatureTableModel}.
+ *
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ * (University of Bonn/Germany)
* @version 1.0
*/
public class FeatureTablePane extends JPanel {
- /** Tabelle in der die Features angezeigt werden. */
- protected SortableJTable featuresTable = null;
-
- /** Tabellen-Modell der Feature-Tabelle. */
- protected FeatureCollectionTableModel featuresTableModel = null;
- /** Preview-Bereich fuer die in der Tabelle selektierten Features. */
- protected JMapPane mapPane = null;
- /** Style, in dem die Features in der Karte dargestellt werden */
- protected Style featureStyle = null;
- /** Splitpane, das die Karten-Vorschau von der Tabelle trennt ({@code null}
- * wenn Karten-Vorschau deaktiviert ist). */
- protected JSplitPane splitPane = null;
- private JScrollPane featuresTableScrollPane;
+ /** Tabelle in der die Features angezeigt werden. */
+ protected SortableJTable featuresTable = null;
- public JScrollPane getFeaturesTableScrollPane() {
- return featuresTableScrollPane;
-}
+ /** Tabellen-Modell der Feature-Tabelle. */
+ protected FeatureCollectionTableModel featuresTableModel = null;
+ /** Preview-Bereich fuer die in der Tabelle selektierten Features. */
+ protected JMapPane mapPane = null;
+ /** Style, in dem die Features in der Karte dargestellt werden */
+ protected Style featureStyle = null;
+ /**
+ * Splitpane, das die Karten-Vorschau von der Tabelle trennt ({@code null}
+ * wenn Karten-Vorschau deaktiviert ist).
+ */
+ protected JSplitPane splitPane = null;
+ private JScrollPane featuresTableScrollPane;
-/**
- * Erzeugt einen neue Komponente mit Preview-Bereich.
- */
- public FeatureTablePane() {
- this(false);
- }
+ public JScrollPane getFeaturesTableScrollPane() {
+ return featuresTableScrollPane;
+ }
- /**
- * Erzeugt einen neue Komponente mit Preview-Bereich.
- * @param fc angezeigte Features
- */
- public FeatureTablePane(FeatureCollection fc) {
- this(fc,true);
- }
+ /**
+ * Erzeugt einen neue Komponente mit Preview-Bereich.
+ */
+ public FeatureTablePane() {
+ this(false);
+ }
- /**
- * Erzeugt einen neue Komponente.
- * @param geomPreview bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
- * oder nicht ({@code false})
- */
- public FeatureTablePane(boolean geomPreview) {
- this(null,geomPreview);
- }
+ /**
+ * Erzeugt einen neue Komponente mit Preview-Bereich.
+ *
+ * @param fc
+ * angezeigte Features
+ */
+ public FeatureTablePane(FeatureCollection fc) {
+ this(fc, true);
+ }
- /**
- * Erzeugt einen neue Komponente.
- * @param fc angezeigte Features
- * @param geomPreview bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
- * oder nicht ({@code false})
- */
- public FeatureTablePane(FeatureCollection fc, boolean geomPreview) {
- this(fc,null,geomPreview);
- }
+ /**
+ * Erzeugt einen neue Komponente.
+ *
+ * @param geomPreview
+ * bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
+ * oder nicht ({@code false})
+ */
+ public FeatureTablePane(boolean geomPreview) {
+ this(null, geomPreview);
+ }
- /**
- * Erzeugt einen neue Komponente.
- * @param fc angezeigte Features
- * @param style Style, in dem die Features in der Karte dargestellt werden
- * @param geomPreview bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
- * oder nicht ({@code false})
- */
- public FeatureTablePane(FeatureCollection fc, Style style, boolean geomPreview) {
- this(new FeatureCollectionTableModel(fc),style,geomPreview);
- }
-
- /**
- * Erzeugt einen neue Komponente.
- * @param model verwendetes TableModel (kann {@code null} sein)
- * @param fc angezeigte Features
- * @param style Style, in dem die Features in der Karte dargestellt werden
- * @param geomPreview bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
- * oder nicht ({@code false})
- */
- public FeatureTablePane(FeatureCollectionTableModel model, Style style, boolean geomPreview) {
- super();
- this.featureStyle = style;
- this.featuresTableModel = (model != null) ? model : new FeatureCollectionTableModel();
+ /**
+ * Erzeugt einen neue Komponente.
+ *
+ * @param fc
+ * angezeigte Features
+ * @param geomPreview
+ * bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
+ * oder nicht ({@code false})
+ */
+ public FeatureTablePane(FeatureCollection fc, boolean geomPreview) {
+ this(fc, null, geomPreview);
+ }
- initGUI( geomPreview );
+ /**
+ * Erzeugt einen neue Komponente.
+ *
+ * @param fc
+ * angezeigte Features
+ * @param style
+ * Style, in dem die Features in der Karte dargestellt werden
+ * @param geomPreview
+ * bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
+ * oder nicht ({@code false})
+ */
+ public FeatureTablePane(FeatureCollection fc, Style style,
+ boolean geomPreview) {
+ this(new FeatureCollectionTableModel(fc), style, geomPreview);
+ }
- featuresTableScrollPane = new JScrollPane(
- featuresTable,
- JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
- JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
- );
+ /**
+ * Erzeugt einen neue Komponente.
+ *
+ * @param model
+ * verwendetes TableModel (kann {@code null} sein)
+ * @param fc
+ * angezeigte Features
+ * @param style
+ * Style, in dem die Features in der Karte dargestellt werden
+ * @param geomPreview
+ * bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
+ * oder nicht ({@code false})
+ */
+ public FeatureTablePane(FeatureCollectionTableModel model, Style style,
+ boolean geomPreview) {
+ super();
+ this.featureStyle = style;
+ this.featuresTableModel = (model != null) ? model
+ : new FeatureCollectionTableModel();
- // Komponenten dem Pane hinzufuegen
- if ( mapPane != null ) {
- splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
-// splitPane.setInnerBorder(null);
- splitPane.setLeftComponent(mapPane);
- splitPane.setRightComponent(featuresTableScrollPane);
- splitPane.setDividerLocation(0.3); // SK: Does have no effect because JMapPane overrules this
- splitPane.setOneTouchExpandable(true);
- add(splitPane);
- } else {
- add(featuresTableScrollPane);
- }
- }
+ initGUI(geomPreview);
- /**
- * Initalisiert die GUI.
- * @param geomPreview bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
- * oder nicht ({@code false})
- */
- protected void initGUI(boolean geomPreview ) {
- setLayout( new BorderLayout() );
- // MapPane fuer Preview der in der Tabelle selektieren Features
- if ( geomPreview ) {
- this.mapPane = new JMapPane() {
- // Bei Links-Klick auf das gesamte Layer zoomen
- public void mouseClicked(MouseEvent e) {
- if (getState() == JMapPane.RESET && e.getButton() == e.BUTTON1) {
- MapLayer layer = getTopLayer();
- if (layer != null)
- try {
- setMapArea(layer.getFeatureSource().getBounds());
- refresh();
- } catch (Exception err) {
- }
- } else {
- super.mouseClicked(e);
- }
- }
- };
- mapPane.setState(JMapPane.RESET);
- mapPane.setWindowSelectionState(JMapPane.NONE);
- mapPane.setHighlight(false);
- mapPane.setMinimumSize(new Dimension(50, 50));
- SwingUtil.setPreferredWidth(mapPane,100);
- mapPane.setBorder(BorderFactory.createLoweredBevelBorder());
- }
+ featuresTableScrollPane = new JScrollPane(featuresTable,
+ JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+ JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- // Tabelle fuer FeatureCollection
- featuresTable = new SortableJTable();
- featuresTable.setModel( featuresTableModel );
- featuresTable.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
- featuresTable.setColumnSelectionAllowed(false);
- featuresTable.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
- // Wenn Auswahl in Tabelle sich aendert, Vorschau anpassen
- featuresTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() {
- public void valueChanged(ListSelectionEvent e) {
- if (!e.getValueIsAdjusting())
- performListSelection();
- }
- } );
- // Wenn neue FeatureCollection gesetzt wird, alle Features
- // in Vorschau anzeigen
- featuresTableModel.addTableModelListener( new TableModelListener() {
- public void tableChanged(TableModelEvent e) {
- showFeaturesInMap( getFeatureCollection() );
- }
- } );
- }
+ // Komponenten dem Pane hinzufuegen
+ if (mapPane != null) {
+ splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+ // splitPane.setInnerBorder(null);
+ splitPane.setLeftComponent(mapPane);
+ splitPane.setRightComponent(featuresTableScrollPane);
+ splitPane.setDividerLocation(0.3); // SK: Does have no effect
+ // because JMapPane overrules
+ // this
+ splitPane.setOneTouchExpandable(true);
+ add(splitPane);
+ } else {
+ add(featuresTableScrollPane);
+ }
+ }
- /**
- * Liefert den Filter, der die dargestellten Attribut-Spalten bestimmt.
- */
- public AttributeTypeFilter getAttributeFilter() {
- return featuresTableModel.getAttributeFilter();
- }
+ /**
+ * Initalisiert die GUI.
+ *
+ * @param geomPreview
+ * bestimmt, ob ein Preview-Bereich angezeigt wird ({@code true})
+ * oder nicht ({@code false})
+ */
+ protected void initGUI(boolean geomPreview) {
+ setLayout(new BorderLayout());
+ // MapPane fuer Preview der in der Tabelle selektieren Features
+ if (geomPreview) {
+ this.mapPane = new JMapPane();
- /**
- * Setzt den Filter, der die dargestellten Attribut-Spalten bestimmt.
- * @param attrFilter Filter
- */
- public void setAttributeFilter(AttributeTypeFilter attrFilter) {
- featuresTableModel.setAttributeFilter(attrFilter);
- }
+ // {
+ // // Bei Links-Klick auf das gesamte Layer zoomen
+ // public void mouseClicked(MouseEvent e) {
+ // if (getState() == JMapPane.RESET && e.getButton() == e.BUTTON1) {
+ // MapLayer layer = getTopLayer();
+ // if (layer != null)
+ // try {
+ // setMapArea(layer.getFeatureSource().getBounds());
+ // refresh();
+ // } catch (Exception err) {
+ // }
+ // } else {
+ // super.mouseClicked(e);
+ // }
+ // }
+ // };
+ mapPane.setState(JMapPane.RESET);
+ mapPane.setWindowSelectionState(JMapPane.NONE);
+ mapPane.setHighlight(false);
+ mapPane.setMinimumSize(new Dimension(50, 50));
+ SwingUtil.setPreferredWidth(mapPane, 100);
+ mapPane.setBorder(BorderFactory.createLoweredBevelBorder());
+ }
- /**
- * Prueft, ob der Geometry-Preview angezeigt wird.
- */
- public boolean isGeometryPreviewVisible() {
- return mapPane.isVisible();
- }
+ // Tabelle fuer FeatureCollection
+ featuresTable = new SortableJTable();
+ featuresTable.setModel(featuresTableModel);
+ featuresTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ featuresTable.setColumnSelectionAllowed(false);
+ featuresTable
+ .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ // Wenn Auswahl in Tabelle sich aendert, Vorschau anpassen
+ featuresTable.getSelectionModel().addListSelectionListener(
+ new ListSelectionListener() {
+ public void valueChanged(ListSelectionEvent e) {
+ if (!e.getValueIsAdjusting())
+ performListSelection();
+ }
+ });
+ // Wenn neue FeatureCollection gesetzt wird, alle Features
+ // in Vorschau anzeigen
+ featuresTableModel.addTableModelListener(new TableModelListener() {
+ public void tableChanged(TableModelEvent e) {
+ showFeaturesInMap(getFeatureCollection());
+ }
+ });
+ }
- /**
- * Setzt die angezeigte {@link FeatureCollection}
- * @param fc anzuzeigende Features
- */
- public void setFeatureCollection(FeatureCollection fc) {
- featuresTableModel.setFeatureCollection(fc);
- }
+ /**
+ * Liefert den Filter, der die dargestellten Attribut-Spalten bestimmt.
+ */
+ public AttributeTypeFilter getAttributeFilter() {
+ return featuresTableModel.getAttributeFilter();
+ }
- /**
- * Liefert die Attribut-Tabelle um deren Eigenschaften (z.B. Spaltenbreite)
- * zu aendern.
- */
- public SortableJTable getTable() {
- return featuresTable;
- }
+ /**
+ * Setzt den Filter, der die dargestellten Attribut-Spalten bestimmt.
+ *
+ * @param attrFilter
+ * Filter
+ */
+ public void setAttributeFilter(AttributeTypeFilter attrFilter) {
+ featuresTableModel.setAttributeFilter(attrFilter);
+ }
- /**
- * Liefert die angezeigten Features.
- */
- public FeatureCollection getFeatureCollection() {
- return featuresTableModel.getFeatureCollection();
- }
+ /**
+ * Prueft, ob der Geometry-Preview angezeigt wird.
+ */
+ public boolean isGeometryPreviewVisible() {
+ return mapPane.isVisible();
+ }
- /**
- * Setzt den Style, in dem die Features in der Karte dargestellt werden.
- * @param style Style fuer die Features
- */
- public void setFeatureStyle( Style style ) {
- this.featureStyle = style;
- }
+ /**
+ * Setzt die angezeigte {@link FeatureCollection}
+ *
+ * @param fc
+ * anzuzeigende Features
+ */
+ public void setFeatureCollection(FeatureCollection fc) {
+ featuresTableModel.setFeatureCollection(fc);
+ }
- /**
- * Liefert den Style, in dem die Features in der Karte dargestellt werden.
- */
- public Style getFeatureStyle() {
- return this.featureStyle;
- }
+ /**
+ * Liefert die Attribut-Tabelle um deren Eigenschaften (z.B. Spaltenbreite)
+ * zu aendern.
+ */
+ public SortableJTable getTable() {
+ return featuresTable;
+ }
- /**
- * Liefert die in der Tabelle selektierten Features.
- */
- public FeatureCollection getSelectedFeatures() {
- return featuresTableModel.getFeaturesAsCollection( featuresTable.getSelectedModelRows() );
- }
+ /**
+ * Liefert die angezeigten Features.
+ */
+ public FeatureCollection getFeatureCollection() {
+ return featuresTableModel.getFeatureCollection();
+ }
- /**
- * Zeigt die aktuell in der Tabelle selektierten Features im Preview-Bereich an.
- */
- protected void performListSelection() {
- FeatureCollection subCollection = getSelectedFeatures();
- // Wenn keine Auswahl getaetigt ist, alle Features anzeigen
- if (subCollection == null || subCollection.isEmpty() )
- subCollection = getFeatureCollection();
- showFeaturesInMap( subCollection );
- }
+ /**
+ * Setzt den Style, in dem die Features in der Karte dargestellt werden.
+ *
+ * @param style
+ * Style fuer die Features
+ */
+ public void setFeatureStyle(Style style) {
+ this.featureStyle = style;
+ }
/**
+ * Liefert den Style, in dem die Features in der Karte dargestellt werden.
+ */
+ public Style getFeatureStyle() {
+ return this.featureStyle;
+ }
+
+ /**
+ * Liefert die in der Tabelle selektierten Features.
+ */
+ public FeatureCollection getSelectedFeatures() {
+ return featuresTableModel.getFeaturesAsCollection(featuresTable
+ .getSelectedModelRows());
+ }
+
+ /**
+ * Zeigt die aktuell in der Tabelle selektierten Features im Preview-Bereich
+ * an.
+ */
+ protected void performListSelection() {
+ FeatureCollection subCollection = getSelectedFeatures();
+ // Wenn keine Auswahl getaetigt ist, alle Features anzeigen
+ if (subCollection == null || subCollection.isEmpty())
+ subCollection = getFeatureCollection();
+ showFeaturesInMap(subCollection);
+ }
+
+ /**
* Zeigt einen {@link FeatureCollection} in der Karte an. Diese Funktion hat
* keinen Einfluss auf die in der Tabelle angezeigten Features!!
*
@@ -292,25 +330,38 @@
return;
mapPane.getContext().clearLayerList();
-// Envelope bounds = null;
+ final FeatureCollection allFeatures = getFeatureCollection();
+ /**
+ * Add ALL features to the JMapPane as the base laye and style them in
+ * grey
+ */
+ if (allFeatures != null) {
+ mapPane.getContext().addLayer(
+ new DefaultMapLayer(allFeatures, StylingUtil.createStyleSimple(allFeatures, Color.lightGray, Color.darkGray)));
+ }
+
if (fc != null && fc.size() > 0
&& fc.getSchema().getDefaultGeometry() != null) {
- if (getFeatureStyle() == null)
- setFeatureStyle(FeatureUtil.createDefaultStyle(fc));
+
+ if (getFeatureStyle() == null) {
+ setFeatureStyle(StylingUtil.createStyleSimple(fc, Color.red, Color.white));
+ }
mapPane.getContext().addLayer(fc, getFeatureStyle());
-
-// if (featuresTableModel instanceof StyledFeatureCollectionTableModel) {
-// bounds = ((StyledFeatureCollectionTableModel) featuresTableModel)
-// .getBounds();
-// }
-// // featuresTableModel.getFeatureCollection().getBounds();
-// if (bounds == null)
-// bounds = fc.getBounds();
-
-// System.out.println(fc.size());
- mapPane.zoomTo(fc); // zoom to the full bound if available,
+ // if (featuresTableModel instanceof
+ // StyledFeatureCollectionTableModel) {
+ // bounds = ((StyledFeatureCollectionTableModel) featuresTableModel)
+ // .getBounds();
+ // }
+ // // featuresTableModel.getFeatureCollection().getBounds();
+ // if (bounds == null)
+ // bounds = fc.getBounds();
+
+ // System.out.println(fc.size());
+
+ mapPane.zoomTo(getFeatureCollection());
+ // zoom to the full bound if available,
// otherwise just to the bounds of the
// selected.
@@ -318,4 +369,3 @@
mapPane.refresh();
}
}
-
More information about the Schmitzm-commits
mailing list