Revision 47621 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanel.java
GeometriesPalettePanel.java | ||
---|---|---|
11 | 11 |
import java.awt.Image; |
12 | 12 |
import java.awt.image.BufferedImage; |
13 | 13 |
import java.util.AbstractList; |
14 |
import java.util.ArrayList; |
|
15 | 14 |
import java.util.Collections; |
16 | 15 |
import java.util.List; |
17 | 16 |
import javax.swing.AbstractListModel; |
... | ... | |
23 | 22 |
import javax.swing.SpinnerNumberModel; |
24 | 23 |
import javax.swing.SwingConstants; |
25 | 24 |
import javax.swing.event.ChangeEvent; |
25 |
import javax.swing.event.ChangeListener; |
|
26 | 26 |
import javax.swing.event.ListSelectionEvent; |
27 | 27 |
import org.apache.commons.lang3.StringUtils; |
28 | 28 |
import org.gvsig.expressionevaluator.Expression; |
29 | 29 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
30 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator; |
|
31 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager; |
|
32 |
import org.gvsig.expressionevaluator.swing.ExpressionPickerController; |
|
30 | 33 |
import org.gvsig.fmap.dal.DALLocator; |
31 | 34 |
import org.gvsig.fmap.dal.DataManager; |
32 | 35 |
import org.gvsig.fmap.dal.exception.DataException; |
... | ... | |
50 | 53 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol; |
51 | 54 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol; |
52 | 55 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol; |
53 |
import org.gvsig.tools.dispose.DisposeUtils; |
|
54 | 56 |
import org.gvsig.tools.dynobject.Tags; |
55 | 57 |
import org.gvsig.tools.swing.api.FilteredListController; |
56 | 58 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
... | ... | |
73 | 75 |
private FeatureStore store; |
74 | 76 |
private FilteredListController dataController; |
75 | 77 |
private AttributeDescriptorPickerController colorPicker; |
76 |
private AttributeDescriptorPickerController groupPicker; |
|
77 |
private Expression filter; |
|
78 |
// private AttributeDescriptorPickerController groupPicker; |
|
79 |
private ExpressionPickerController filterPicker; |
|
80 |
// private Expression filter; |
|
78 | 81 |
|
79 | 82 |
private class FeratureWithGeomCellRenderer extends DefaultListCellRenderer { |
80 | 83 |
|
... | ... | |
115 | 118 |
private void initComponents() { |
116 | 119 |
ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager(); |
117 | 120 |
DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
121 |
ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager(); |
|
118 | 122 |
|
119 | 123 |
FeatureAttributeListCellRenderer renderer = dataSwingManager.createDefaultFeatureAttributeListCellRenderer(); |
120 | 124 |
renderer.setUseLabels(DataManager.USE_LABELS_NO); |
... | ... | |
134 | 138 |
|
135 | 139 |
renderer = dataSwingManager.createDefaultFeatureAttributeListCellRenderer(); |
136 | 140 |
renderer.setUseLabels(DataManager.USE_LABELS_NO); |
137 |
this.cboGroup.setRenderer(renderer); |
|
138 |
groupPicker = dataSwingManager.createAttributeDescriptorPickerController(this.cboGroup); |
|
139 |
groupPicker.addChangeListener((ChangeEvent e) -> { |
|
140 |
doChangeAttrGroup(); |
|
141 |
|
|
142 |
this.filterPicker = expressionSwingManager.createExpressionPickerController( |
|
143 |
this.txtFilter, |
|
144 |
this.btnFilter |
|
145 |
); |
|
146 |
this.filterPicker.addChangeListener((ChangeEvent e) -> { |
|
147 |
doChangeAttrLabel(); |
|
141 | 148 |
}); |
142 |
groupPicker.setAllowNull(true); |
|
143 | 149 |
SpinnerNumberModel spnSizeModel = new SpinnerNumberModel(100, 30, 600, 10); |
144 | 150 |
this.spnSize.setModel(spnSizeModel); |
145 | 151 |
this.spnSize.addChangeListener((ChangeEvent e) -> { doChangeSize(); }); |
... | ... | |
154 | 160 |
this.dataController = toolsSwingManager.createFilteredListController(lstData, txtDataFilter, btnDataFilter); |
155 | 161 |
|
156 | 162 |
colorPicker.setEnabled(false); |
157 |
groupPicker.setEnabled(false);
|
|
163 |
filterPicker.setEnabled(true);
|
|
158 | 164 |
ToolsSwingUtils.ensureRowsCols(this, 25,40,25,80); |
159 | 165 |
} |
160 | 166 |
|
... | ... | |
235 | 241 |
this.attributeLabel = attributeLabel; |
236 | 242 |
} |
237 | 243 |
|
238 |
public DataModel(FeatureStore store, Expression filter, FeatureAttributeDescriptor attributeLabel, FeatureAttributeDescriptor attributeGroup) { |
|
239 |
this(attributeLabel); |
|
240 |
String groupAttributeName = attributeGroup.getName(); |
|
241 |
String order = groupAttributeName; |
|
242 |
if( attributeLabel!=null ) { |
|
243 |
order = order+","+attributeLabel.getName(); |
|
244 |
} |
|
245 |
LabeledValueImpl<List<Feature>> element = null; |
|
246 |
String previousGroup = null; |
|
247 |
FeatureSet features = createFeatureSet(store, filter, order); |
|
248 |
for (Feature feature : features) { |
|
249 |
if( !StringUtils.equals(previousGroup, feature.getString(groupAttributeName)) ) { |
|
250 |
if( element != null ) { |
|
251 |
elements.add(element); |
|
252 |
} |
|
253 |
element = new LabeledValueImpl<>( |
|
254 |
feature.getString(attributeLabel.getName()), |
|
255 |
new ArrayList<>() |
|
256 |
); |
|
257 |
} |
|
258 |
element.getValue().add(feature.getCopy()); |
|
259 |
} |
|
260 |
DisposeUtils.disposeQuietly(features); |
|
261 |
} |
|
244 |
// public DataModel(FeatureStore store, Expression filter, FeatureAttributeDescriptor attributeLabel, FeatureAttributeDescriptor attributeGroup) {
|
|
245 |
// this(attributeLabel);
|
|
246 |
// String groupAttributeName = attributeGroup.getName();
|
|
247 |
// String order = groupAttributeName;
|
|
248 |
// if( attributeLabel!=null ) {
|
|
249 |
// order = order+","+attributeLabel.getName();
|
|
250 |
// }
|
|
251 |
// LabeledValueImpl<List<Feature>> element = null;
|
|
252 |
// String previousGroup = null;
|
|
253 |
// FeatureSet features = createFeatureSet(store, filter, order);
|
|
254 |
// for (Feature feature : features) {
|
|
255 |
// if( !StringUtils.equals(previousGroup, feature.getString(groupAttributeName)) ) {
|
|
256 |
// if( element != null ) {
|
|
257 |
// elements.add(element);
|
|
258 |
// }
|
|
259 |
// element = new LabeledValueImpl<>(
|
|
260 |
// feature.getString(attributeLabel.getName()),
|
|
261 |
// new ArrayList<>()
|
|
262 |
// );
|
|
263 |
// }
|
|
264 |
// element.getValue().add(feature.getCopy());
|
|
265 |
// }
|
|
266 |
// DisposeUtils.disposeQuietly(features);
|
|
267 |
// }
|
|
262 | 268 |
|
263 | 269 |
public DataModel(FeatureStore store, Expression filter, FeatureAttributeDescriptor attributeLabel) { |
264 | 270 |
this(attributeLabel); |
... | ... | |
300 | 306 |
|
301 | 307 |
private void doChangeAttrLabel() { |
302 | 308 |
this.attributeLabel = this.labelPicker.get(); |
303 |
this.lstData.setModel(new DataModel(store, filter, attributeLabel));
|
|
309 |
this.lstData.setModel(new DataModel(store, this.getFilter(), attributeLabel));
|
|
304 | 310 |
} |
305 | 311 |
|
306 | 312 |
public void setFilter(String filter) { |
307 |
this.filter = ExpressionUtils.createExpression(filter);
|
|
313 |
this.filterPicker.set(ExpressionUtils.createExpression(filter));
|
|
308 | 314 |
} |
309 | 315 |
|
310 | 316 |
public void setFilter(Expression filter) { |
311 |
this.filter = filter;
|
|
317 |
this.filterPicker.set(filter);
|
|
312 | 318 |
} |
313 | 319 |
|
314 | 320 |
public void setFeatureStore(FeatureStore store) { |
321 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
|
322 |
|
|
315 | 323 |
this.store = store; |
316 | 324 |
FeatureType featureType = store.getDefaultFeatureTypeQuietly(); |
317 | 325 |
this.lstData.setModel(new DataModel()); |
318 | 326 |
this.labelPicker.setFeatureType(featureType); |
319 | 327 |
this.colorPicker.setFeatureType(featureType); |
320 |
this.groupPicker.setFeatureType(featureType); |
|
328 |
|
|
329 |
dataSwingManager.configureExpressionBuilder(this.filterPicker.getConfig(), this.store); |
|
330 |
|
|
321 | 331 |
this.geomattr = featureType.getDefaultGeometryAttribute(); |
322 | 332 |
GeometryType geomtype = geomattr.getGeomType(); |
323 | 333 |
if( GeometryUtils.isSubtype(Geometry.TYPES.POINT, geomtype.getType()) || |
... | ... | |
333 | 343 |
} |
334 | 344 |
|
335 | 345 |
public void updateListContents() { |
336 |
FeatureAttributeDescriptor groupAttribute = this.groupPicker.get(); |
|
337 |
if( groupAttribute == null ) { |
|
338 |
this.lstData.setModel(new DataModel(store, filter, attributeLabel)); |
|
339 |
} else { |
|
340 |
this.lstData.setModel(new DataModel(store, filter, attributeLabel, groupAttribute)); |
|
341 |
} |
|
346 |
this.lstData.setModel(new DataModel(store, this.getFilter(), attributeLabel)); |
|
342 | 347 |
} |
343 | 348 |
|
344 | 349 |
public static void showPalette(FLyrVect layer) { |
... | ... | |
359 | 364 |
if( StringUtils.isBlank(labelattr) ) { |
360 | 365 |
labelattr = tags.getString("geometriespalette.attribute.label", null); |
361 | 366 |
} |
362 |
String attrGroup = tags.getString("geometriespalette.attribute.group", null); |
|
367 |
// String attrGroup = tags.getString("geometriespalette.attribute.group", null);
|
|
363 | 368 |
String attrColor = tags.getString("geometriespalette.attribute.color", null); |
364 | 369 |
int size = tags.getInt("geometriespalette.size",-1); |
365 | 370 |
|
366 | 371 |
GeometriesPalettePanel palette = new GeometriesPalettePanel(); |
367 | 372 |
palette.setFilter(filter); |
368 | 373 |
palette.setFeatureStore((FeatureStore) store); |
369 |
palette.setGroupAttributeName(attrGroup); |
|
370 | 374 |
palette.setColorAttributeName(attrColor); |
371 | 375 |
if( size>0 ) { |
372 | 376 |
palette.setSize(size); |
... | ... | |
390 | 394 |
this.labelPicker.set(labelattr); |
391 | 395 |
} |
392 | 396 |
|
393 |
void setGroupAttributeName(String attrGroup) { |
|
394 |
this.groupPicker.set(attrGroup); |
|
395 |
} |
|
396 |
|
|
397 | 397 |
void setColorAttributeName(String attrColor) { |
398 | 398 |
this.colorPicker.set(attrColor); |
399 | 399 |
} |
... | ... | |
419 | 419 |
return this; |
420 | 420 |
} |
421 | 421 |
|
422 |
public Expression getFilter() { |
|
423 |
return this.filterPicker.get(); |
|
424 |
} |
|
422 | 425 |
} |
Also available in: Unified diff