Revision 747 org.gvsig.attributeeditor/trunk/org.gvsig.attributeeditor/org.gvsig.attributeeditor.mapcontrol/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AttributeEditorPointListener.java

View differences:

AttributeEditorPointListener.java
23 23

  
24 24
package org.gvsig.fmap.mapcontrol.tools.Listeners;
25 25

  
26
import java.awt.Dimension;
27 26
import java.awt.event.ActionEvent;
28 27
import java.awt.event.ComponentAdapter;
29 28
import java.awt.event.ComponentEvent;
30
import java.awt.event.ComponentListener;
31 29
import java.awt.event.InputEvent;
32 30
import java.awt.event.MouseEvent;
31
import java.awt.geom.Point2D;
33 32
import java.util.function.Predicate;
34 33

  
35 34
import javax.swing.JOptionPane;
36 35
import javax.swing.SwingUtilities;
37 36

  
38 37
import org.cresques.cts.IProjection;
38
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
39
import org.gvsig.expressionevaluator.GeometryExpressionUtils;
39 40
import org.slf4j.Logger;
40 41
import org.slf4j.LoggerFactory;
41 42

  
......
63 64
import org.gvsig.fmap.mapcontext.layers.vectorial.SpatialEvaluatorsFactory;
64 65
import org.gvsig.fmap.mapcontrol.MapControl;
65 66
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
67
import org.gvsig.fmap.mapcontrol.tools.Events.EnvelopeEvent;
66 68
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
67 69
import org.gvsig.tools.ToolsLocator;
68 70
import org.gvsig.tools.evaluator.Evaluator;
......
76 78
 *
77 79
 */
78 80
@SuppressWarnings("UseSpecificCatch")
79
public class AttributeEditorPointListener extends AbstractPointListener  {
81
public class AttributeEditorPointListener 
82
        extends AbstractPointListener  
83
        implements RectangleListener
84
    {
80 85

  
81 86
    private static Logger logger = LoggerFactory.getLogger(AttributeEditorPointListener.class);
82 87

  
......
116 121
            || !SwingUtilities.isLeftMouseButton(mouseEvent)) {
117 122
            return;
118 123
        }
119

  
124
        String layerName = "";
120 125
        I18nManager i18nManager = ToolsLocator.getI18nManager();
121
        String layerName = "";
122 126
        try {
123 127
            FLyrVect layer = getLayer();
124 128
            if (layer == null) {
......
127 131
                    i18nManager.getTranslation("attribute_editor"), JOptionPane.INFORMATION_MESSAGE);
128 132
                return;
129 133
            }
134
            this.currentLayer = layer;
135
            layerName = layer.getName();
136
            ViewPort vp = this.mapControl.getViewPort();
137
            Point point = vp.convertToMapPoint(e.getPoint());
138
            double tolerance = vp.toMapDistance(layer.getDefaultTolerance());
139
            FeatureQuery query = queryByPoint(point, tolerance);
140
            showOrUpdateForm(layer, query);
141
        } catch (Exception ex) {
142
            logger.warn("Can't show attribute information from point on the layer " + layerName, ex);
143
            String msg =
144
                i18nManager.getTranslation("Cant_show_attribute_information_for_layer_%1_on_point",
145
                    new String[] { layerName });
146
            ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog(msg,
147
                i18nManager.getTranslation("attribute_editor"), JOptionPane.WARNING_MESSAGE);
148
        }
149
    }
150
    
151
    private void showOrUpdateForm(FLyrVect layer, FeatureQuery query) {
152
        I18nManager i18nManager = ToolsLocator.getI18nManager();
153
        String layerName = "";
154
        try {
155
            layerName = layer.getName();
130 156
            FeatureStore featureStore;
131 157
            featureStore = layer.getFeatureStore();
132 158
            if (layer != this.currentLayer) {
......
135 161
                        this.form.saveChanges();
136 162
                    }
137 163
                }
138
                this.currentLayer = layer;
139 164
                if (this.form != null) {
140 165
                    this.form.bind(featureStore);
141 166
                }
142 167
            }
143
            layerName = layer.getName();
144
            ViewPort vp = this.mapControl.getViewPort();
145
            Point point = vp.convertToMapPoint(e.getPoint());
146
            double tolerance = vp.toMapDistance(layer.getDefaultTolerance());
147
            FeatureQuery query;
148
            query = queryByPoint(point, tolerance);
149 168
            if (query != null) {
150
                if (this.form == null) {
151
                    this.form = getForm(query);
152
                    this.form.showForm(MODE.TOOL);
153
                } else {
154
                    this.form.setQuery(query);
155
                }
156 169
                try {
157 170
                    synchronized (featureStore) {
158 171
                        FeatureSet featSet = featureStore.getFeatureSet(query);
172
                        if( featSet.isEmpty() ) {
173
                            return;
174
                        }
159 175
                        FeatureSelection selection = (FeatureSelection) featureStore.getSelection();
160 176
                        selection.deselectAll();
161 177
                        selection.select(featSet);
......
163 179
                } catch (DataException ex) {
164 180
                    throw new RuntimeException("Error getting a feature set with the query " + query);
165 181
                }
182
                if (this.form == null) {
183
                    this.form = getForm(query);
184
                    this.form.showForm(MODE.TOOL);
185
                } else {
186
                    this.form.setQuery(query);
187
                }
166 188
                this.form.setQuery(query);
167 189
            }
168 190
        } catch (Exception ex) {
......
184 206
            DataSwingManager swingManager = DALSwingLocator.getSwingManager();
185 207
            FeatureStore store = this.currentLayer.getFeatureStore();
186 208
            this.form = swingManager.createJFeaturesForm(store, query);
187
//            this.form.asJComponent().setPreferredSize(new Dimension(300, 200));
188 209
            this.form.asJComponent().setName(ATTRIBUTE_EDITOR_FORM_NAME);
189 210
            this.form.asJComponent().addComponentListener(new ComponentAdapter() {
190 211
                @Override
......
232 253
        featureQuery.retrievesAllAttributes();
233 254
        return featureQuery;
234 255
    }
256

  
257
    @Override
258
    public void rectangle(EnvelopeEvent e) throws BehaviorException {
259
        MouseEvent mouseEvent = e.getEvent();
260
        if (((mouseEvent.getModifiersEx() & (InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK
261
            | InputEvent.ALT_DOWN_MASK | InputEvent.ALT_GRAPH_DOWN_MASK | InputEvent.META_DOWN_MASK)) != 0)
262
            || !SwingUtilities.isLeftMouseButton(mouseEvent)) {
263
            return;
264
        }
265
        String layerName = "";
266
        I18nManager i18nManager = ToolsLocator.getI18nManager();
267
        try {
268
            FLyrVect layer = getLayer();
269
            if (layer == null) {
270
                String msg = i18nManager.getTranslation("There_is_no_one_and_only_one_active_layer");
271
                ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog(msg,
272
                    i18nManager.getTranslation("attribute_editor"), JOptionPane.INFORMATION_MESSAGE);
273
                return;
274
            }
275
            this.currentLayer = layer;
276
            layerName = layer.getName();
277
            FeatureQuery query;
278
            Geometry geom = e.getWorldCoordRect().getGeometry();            
279
            if( geom instanceof Point ) {
280
                ViewPort vp = this.mapControl.getViewPort();
281
                double tolerance = vp.toMapDistance(layer.getDefaultTolerance());
282
                query = queryByPoint((Point) geom, tolerance);
283
            } else {
284
                FeatureStore store = layer.getFeatureStore();
285
                FeatureType featureType = store.getDefaultFeatureTypeQuietly();
286
                GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
287
                String filter = builder.ST_Intersects(
288
                        builder.column(featureType.getDefaultGeometryAttributeName()), 
289
                        builder.geometry(e.getWorldCoordRect().getGeometry())
290
                ).toString();
291
                query = store.createFeatureQuery(filter);
292
            }
293
            showOrUpdateForm(layer, query);
294
        } catch (Exception ex) {
295
            logger.warn("Can't show attribute information from point on the layer " + layerName, ex);
296
            String msg =
297
                i18nManager.getTranslation("Cant_show_attribute_information_for_layer_%1_on_point",
298
                    new String[] { layerName });
299
            ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog(msg,
300
                i18nManager.getTranslation("attribute_editor"), JOptionPane.WARNING_MESSAGE);
301
        }
302
    }
235 303
}

Also available in: Unified diff