Revision 747 org.gvsig.attributeeditor/trunk/org.gvsig.attributeeditor/org.gvsig.attributeeditor.mapcontrol/src/main/java/org/gvsig/fmap/mapcontrol/tools/Listeners/AttributeEditorPointListener.java
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