root / org.gvsig.legend.picturemarkersymboltable / trunk / org.gvsig.legend.picturemarkersymboltable / org.gvsig.legend.picturemarkersymboltable.swing / org.gvsig.legend.picturemarkersymboltable.swing.impl / src / main / java / org / gvsig / legend / picturemarkersymboltable / swing / impl / DefaultPictureMarkerSymbolTableLegendEditor.java @ 9514
History | View | Annotate | Download (17.5 KB)
1 |
|
---|---|
2 |
package org.gvsig.legend.picturemarkersymboltable.swing.impl; |
3 |
|
4 |
import java.awt.event.ActionEvent; |
5 |
import java.awt.event.ItemEvent; |
6 |
import java.util.ArrayList; |
7 |
import java.util.Collections; |
8 |
import java.util.HashMap; |
9 |
import java.util.List; |
10 |
import java.util.Map; |
11 |
import javax.swing.ComboBoxModel; |
12 |
import javax.swing.DefaultComboBoxModel; |
13 |
import javax.swing.ImageIcon; |
14 |
import javax.swing.JPanel; |
15 |
import org.apache.commons.collections4.CollectionUtils; |
16 |
import org.apache.commons.lang.StringUtils; |
17 |
import org.gvsig.app.project.documents.view.legend.gui.Categories; |
18 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
19 |
import org.gvsig.fmap.dal.DALLocator; |
20 |
import org.gvsig.fmap.dal.DataManager; |
21 |
import org.gvsig.fmap.dal.DataStoreParameters; |
22 |
import org.gvsig.fmap.dal.DataTypes; |
23 |
import org.gvsig.fmap.dal.StoresRepository; |
24 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
25 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
26 |
import org.gvsig.fmap.dal.feature.FeatureType; |
27 |
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters; |
28 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
29 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
30 |
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController; |
31 |
import org.gvsig.fmap.geom.Geometry; |
32 |
import org.gvsig.fmap.geom.GeometryUtils; |
33 |
import org.gvsig.fmap.mapcontext.MapContext; |
34 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
35 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
36 |
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend; |
37 |
import org.gvsig.legend.picturemarkersymboltable.lib.api.PictureMarkerSymbolTableLegend; |
38 |
import static org.gvsig.legend.picturemarkersymboltable.lib.api.PictureMarkerSymbolTableLegend.DEFAULT_IMAGE_SIZE; |
39 |
import org.gvsig.legend.picturemarkersymboltable.lib.api.PictureMarkerSymbolTableLocator; |
40 |
import org.gvsig.legend.picturemarkersymboltable.swing.api.PictureMarkerSymbolTableLegendEditor; |
41 |
import org.gvsig.tools.ToolsLocator; |
42 |
import org.gvsig.tools.dispose.DisposeUtils; |
43 |
import org.gvsig.tools.i18n.I18nManager; |
44 |
import org.gvsig.tools.swing.api.ListElement; |
45 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
46 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
47 |
import org.gvsig.tools.swing.api.ToolsSwingUtils; |
48 |
import org.gvsig.tools.swing.api.documentfilters.DoubleDocumentFilter; |
49 |
import org.gvsig.tools.swing.api.pickercontroller.ColorPickerController; |
50 |
import org.gvsig.tools.swing.icontheme.IconTheme; |
51 |
import org.gvsig.tools.util.LabeledValue; |
52 |
import org.gvsig.tools.util.LabeledValueImpl; |
53 |
import org.slf4j.Logger; |
54 |
import org.slf4j.LoggerFactory; |
55 |
|
56 |
|
57 |
@SuppressWarnings("UseSpecificCatch") |
58 |
public class DefaultPictureMarkerSymbolTableLegendEditor extends DefaultPictureMarkerSymbolTableLegendEditorView implements PictureMarkerSymbolTableLegendEditor { |
59 |
|
60 |
private static final long serialVersionUID = 4307714097793669675L; |
61 |
|
62 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPictureMarkerSymbolTableLegendEditor.class); |
63 |
|
64 |
private PictureMarkerSymbolTableLegend legend;
|
65 |
private FLayer layer;
|
66 |
private final Class<? extends PictureMarkerSymbolTableLegend> legendClass; |
67 |
|
68 |
private ColorPickerController pickerLineToOffsetColor;
|
69 |
|
70 |
private AttributeDescriptorPickerController pickerClassifyingField;
|
71 |
private AttributeDescriptorPickerController pickerOffsetXField;
|
72 |
private AttributeDescriptorPickerController pickerOffsetYField;
|
73 |
private AttributeDescriptorPickerController pickerRotationField;
|
74 |
private AttributeDescriptorPickerController pickerLineToOffsetColorField;
|
75 |
|
76 |
private AttributeDescriptorPickerController pickerImagesTableClassifyingField;
|
77 |
private AttributeDescriptorPickerController pickerImageField;
|
78 |
private AttributeDescriptorPickerController pickerImageSelectedField;
|
79 |
private List<String> availablesTables; |
80 |
|
81 |
public DefaultPictureMarkerSymbolTableLegendEditor() {
|
82 |
this.legendClass = PictureMarkerSymbolTableLocator
|
83 |
.getPictureMarkerSymbolTableManager() |
84 |
.getPictureMarkerSymbolTableLegendClass(); |
85 |
initComponents(); |
86 |
} |
87 |
|
88 |
private void initComponents(){ |
89 |
ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager(); |
90 |
DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
91 |
|
92 |
translateAll(); |
93 |
|
94 |
DoubleDocumentFilter.install(this.txtImageSize);
|
95 |
this.cboUnits.setModel(this.createModelUnits()); |
96 |
this.cboUnits.setSelectedIndex(0); |
97 |
|
98 |
this.pickerLineToOffsetColor = toolsSwingManager.createColorPickerController(this.txtLineToOffsetColor, this.btnLineToOffsetColor); |
99 |
|
100 |
|
101 |
this.pickerClassifyingField = dataSwingManager.createAttributeDescriptorPickerController(cboClassifyingFieldName, (t) -> {
|
102 |
return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
|
103 |
}); |
104 |
this.pickerOffsetXField = dataSwingManager.createAttributeDescriptorPickerController(cboOffsetXFieldName, (t) -> {
|
105 |
return t.getDataType().isNumeric();
|
106 |
}); |
107 |
this.pickerOffsetYField = dataSwingManager.createAttributeDescriptorPickerController(cboOffsetYFieldName, (t) -> {
|
108 |
return t.getDataType().isNumeric();
|
109 |
}); |
110 |
this.pickerRotationField = dataSwingManager.createAttributeDescriptorPickerController(cboRotationFieldName, (t) -> {
|
111 |
return t.getDataType().isNumeric();
|
112 |
}); |
113 |
this.pickerLineToOffsetColorField = dataSwingManager.createAttributeDescriptorPickerController(cboLineToOffsetColorFieldName, (t) -> {
|
114 |
return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
|
115 |
}); |
116 |
|
117 |
this.cboImagesTableName.setModel(this.createImagesTableNameModel()); |
118 |
this.pickerImagesTableClassifyingField = dataSwingManager.createAttributeDescriptorPickerController(cboImagesTableClassifyingFieldName, (t) -> {
|
119 |
return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
|
120 |
}); |
121 |
this.pickerImageField = dataSwingManager.createAttributeDescriptorPickerController(cboImageFieldName, (t) -> {
|
122 |
return StringUtils.equalsIgnoreCase("Image", t.getDataProfileName()); |
123 |
}); |
124 |
this.pickerImageSelectedField = dataSwingManager.createAttributeDescriptorPickerController(cboImageSelectedFieldName, (t) -> {
|
125 |
return StringUtils.equalsIgnoreCase("Image", t.getDataProfileName()); |
126 |
}); |
127 |
|
128 |
this.cboImagesTableName.addItemListener((ItemEvent e) -> { |
129 |
doChangeImageTableName(); |
130 |
}); |
131 |
this.btnImagesTableNameRefresh.addActionListener((ActionEvent e) -> { |
132 |
doRefreshImageTables(); |
133 |
}); |
134 |
this.cboImagesTableName.setSelectedIndex(-1); |
135 |
|
136 |
DoubleDocumentFilter.install(this.txtScale);
|
137 |
} |
138 |
|
139 |
private void translateAll() { |
140 |
ToolsSwingManager toolsSwingmanager = ToolsSwingLocator.getToolsSwingManager(); |
141 |
toolsSwingmanager.translate(this.lblClassifyingFieldName);
|
142 |
toolsSwingmanager.translate(this.lblDrawLineToOffset);
|
143 |
toolsSwingmanager.translate(this.lblImageFieldName);
|
144 |
toolsSwingmanager.translate(this.lblImageSelectedFieldName);
|
145 |
toolsSwingmanager.translate(this.lblImagesTableClassifyingFieldName);
|
146 |
toolsSwingmanager.translate(this.lblImagesTableFields);
|
147 |
toolsSwingmanager.translate(this.lblImagesTableName);
|
148 |
toolsSwingmanager.translate(this.lblLegendTableFields);
|
149 |
toolsSwingmanager.translate(this.lblLineToOffsetColor);
|
150 |
toolsSwingmanager.translate(this.lblLineToOffsetColorFieldName);
|
151 |
toolsSwingmanager.translate(this.lblOffsetXFieldName);
|
152 |
toolsSwingmanager.translate(this.lblOffsetYFieldName);
|
153 |
toolsSwingmanager.translate(this.lblRotationFieldName);
|
154 |
toolsSwingmanager.translate(this.lblImageSize);
|
155 |
toolsSwingmanager.translate(this.lblUnits);
|
156 |
toolsSwingmanager.translate(this.lblScale);
|
157 |
toolsSwingmanager.translate(this.lblReverseDirectionOfAngle);
|
158 |
} |
159 |
|
160 |
private ComboBoxModel createModelUnits() { |
161 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
162 |
DefaultComboBoxModel<LabeledValue<Integer>> model = new DefaultComboBoxModel<>(); |
163 |
model.addElement(new LabeledValueImpl<>(i18n.getTranslation("_Pixels"),-1)); |
164 |
String[] names=MapContext.getDistanceNames(); |
165 |
int n = 0; |
166 |
for (String name : names) { |
167 |
model.addElement(new LabeledValueImpl<>(i18n.getTranslation(name),n++));
|
168 |
} |
169 |
return model;
|
170 |
} |
171 |
|
172 |
@Override
|
173 |
public void setData(FLayer layer, ILegend legend) { |
174 |
if( layer == this.layer && legend == this.legend ) { |
175 |
return;
|
176 |
} |
177 |
this.layer = layer;
|
178 |
if( this.getLegendClass().isInstance(legend) ) { |
179 |
this.legend = (PictureMarkerSymbolTableLegend) legend;
|
180 |
} else {
|
181 |
this.legend = PictureMarkerSymbolTableLocator
|
182 |
.getPictureMarkerSymbolTableManager() |
183 |
.createPictureMarkerSymbolTableLegend(); |
184 |
} |
185 |
|
186 |
if( layer instanceof FLyrVect ) { |
187 |
FeatureStore store = ((FLyrVect) layer).getFeatureStore(); |
188 |
if( store != null ) { |
189 |
try {
|
190 |
FeatureType ftype = store.getDefaultFeatureType(); |
191 |
this.txtImageSize.setText(String.valueOf(this.legend.getImageSize())); |
192 |
ListElement.setSelected(this.cboUnits, this.legend.getUnits()); |
193 |
|
194 |
this.pickerLineToOffsetColor.set(this.legend.getDefaultLineToOffsetColor()); |
195 |
this.chkDrawLineToOffset.setSelected(this.legend.isDrawLineToOffset()); |
196 |
this.chkReverseDirectionOfAngle.setSelected(this.legend.isReverseDirectionOfAngle()); |
197 |
|
198 |
this.pickerClassifyingField.setFeatureType(ftype);
|
199 |
this.pickerOffsetXField.setFeatureType(ftype);
|
200 |
this.pickerOffsetYField.setFeatureType(ftype);
|
201 |
this.pickerRotationField.setFeatureType(ftype);
|
202 |
this.pickerLineToOffsetColorField.setFeatureType(ftype);
|
203 |
|
204 |
ListElement.setSelected(this.cboImagesTableName, this.legend.getImagesTableName()); |
205 |
|
206 |
this.pickerClassifyingField.set(this.legend.getClassifyingFieldName()); |
207 |
this.pickerLineToOffsetColorField.set(this.legend.getLineToOffsetColorFieldName()); |
208 |
this.pickerRotationField.set(this.legend.getRotationFieldName()); |
209 |
this.pickerOffsetXField.set(this.legend.getOffsetXFieldName()); |
210 |
this.pickerOffsetYField.set(this.legend.getOffsetYFieldName()); |
211 |
|
212 |
DoubleDocumentFilter.setValue(this.txtScale, this.legend.getScale()); |
213 |
} catch (Exception ex) { |
214 |
LOGGER.warn("Can't fill data of legend.", ex);
|
215 |
//FIXME: ?hacemos algo m?s con la excepci?n?
|
216 |
} |
217 |
} |
218 |
} |
219 |
} |
220 |
|
221 |
@Override
|
222 |
public ILegend getLegend() {
|
223 |
this.legend.setImageSize(this.getImageSize()); |
224 |
this.legend.setUnits((int) ListElement.getSelected(this.cboUnits)); |
225 |
this.legend.setDefaultLineToOffsetColor(this.pickerLineToOffsetColor.get()); |
226 |
this.legend.setDrawLineToOffset(this.chkDrawLineToOffset.isSelected()); |
227 |
this.legend.setReverseDirectionOfAngle(this.chkReverseDirectionOfAngle.isSelected()); |
228 |
|
229 |
this.legend.setClassifyingFieldName(this.pickerClassifyingField.getName()); |
230 |
this.legend.setOffsetXFieldName(this.pickerOffsetXField.getName()); |
231 |
this.legend.setOffsetYFieldName(this.pickerOffsetYField.getName()); |
232 |
this.legend.setRotationFieldName(this.pickerRotationField.getName()); |
233 |
this.legend.setLineToOffsetColorFieldName(this.pickerLineToOffsetColorField.getName()); |
234 |
|
235 |
this.legend.setImagesTableName((String) this.cboImagesTableName.getSelectedItem()); |
236 |
this.legend.setImagesTableClassifyingFieldName(this.pickerImagesTableClassifyingField.getName()); |
237 |
this.legend.setImageFieldName(this.pickerImageField.getName()); |
238 |
this.legend.setImageSelectedFieldName(this.pickerImageSelectedField.getName()); |
239 |
this.legend.setScale(DoubleDocumentFilter.getValue(this.txtScale)); |
240 |
return legend;
|
241 |
} |
242 |
|
243 |
private int getImageSize() { |
244 |
String s = this.txtImageSize.getText(); |
245 |
return ExpressionUtils.parseInt(null, s, DEFAULT_IMAGE_SIZE); |
246 |
} |
247 |
|
248 |
@Override
|
249 |
public String getDescription() { |
250 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
251 |
return i18n.getTranslation( "_Picture_marker_symbol_table_legend"); |
252 |
} |
253 |
|
254 |
@Override
|
255 |
public ImageIcon getIcon() { |
256 |
IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent(); |
257 |
return theme.get("legend-overview-vectorial-picturemarkersymboltable"); |
258 |
} |
259 |
|
260 |
@Override
|
261 |
public Class getParentClass() { |
262 |
return Categories.class;
|
263 |
} |
264 |
|
265 |
@Override
|
266 |
public String getTitle() { |
267 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
268 |
return i18n.getTranslation( "_Picture_marker_symbol_table_legend"); |
269 |
} |
270 |
|
271 |
@Override
|
272 |
public JPanel getPanel() { |
273 |
return this; |
274 |
} |
275 |
|
276 |
@Override
|
277 |
public Class getLegendClass() { |
278 |
return this.legendClass; |
279 |
} |
280 |
|
281 |
@Override
|
282 |
public boolean isSuitableFor(FLayer layer) { |
283 |
if(layer instanceof FLyrVect){ |
284 |
return true; |
285 |
// try {
|
286 |
// int shapeType = ((FLyrVect)layer).getShapeType();
|
287 |
// return GeometryUtils.isSubtype(Geometry.TYPES.POINT, shapeType);
|
288 |
// } catch (Exception ex) {
|
289 |
// LOGGER.debug("Can't get shape type for layer "+layer.getName(), ex);
|
290 |
// return false;
|
291 |
// }
|
292 |
} |
293 |
return false; |
294 |
} |
295 |
|
296 |
public void doChangeImageTableName() { |
297 |
String tableName = (String) this.cboImagesTableName.getSelectedItem(); |
298 |
if( StringUtils.isNotBlank(tableName) ) {
|
299 |
FeatureStore store = null;
|
300 |
try {
|
301 |
DataManager dataManager = DALLocator.getDataManager(); |
302 |
StoresRepository repositories = dataManager.getStoresRepository(); |
303 |
store = (FeatureStore) repositories.getStore(tableName); |
304 |
FeatureType ftype = store.getDefaultFeatureTypeQuietly(); |
305 |
boolean hasimages = false; |
306 |
for (FeatureAttributeDescriptor attr : ftype) {
|
307 |
if( StringUtils.equalsIgnoreCase("Image", attr.getDataProfileName()) ) { |
308 |
hasimages = true;
|
309 |
break;
|
310 |
} |
311 |
} |
312 |
if( hasimages ) {
|
313 |
this.pickerImagesTableClassifyingField.setFeatureType(ftype);
|
314 |
this.pickerImageField.setFeatureType(ftype);
|
315 |
this.pickerImageSelectedField.setFeatureType(ftype);
|
316 |
this.pickerImagesTableClassifyingField.setEnabled(true); |
317 |
this.pickerImageField.setEnabled(true); |
318 |
this.pickerImageSelectedField.setEnabled(true); |
319 |
|
320 |
this.pickerImagesTableClassifyingField.set(this.legend.getImagesTableClassifyingFieldName()); |
321 |
this.pickerImageField.set(this.legend.getImageFieldName()); |
322 |
this.pickerImageSelectedField.set(this.legend.getImageSelectedFieldName()); |
323 |
return;
|
324 |
} |
325 |
} catch(Exception ex) { |
326 |
LOGGER.debug("Can't use '"+tableName+"' as table for retrieve images.",ex); |
327 |
// Do nothing
|
328 |
} finally {
|
329 |
DisposeUtils.disposeQuietly(store); |
330 |
} |
331 |
} |
332 |
this.pickerImagesTableClassifyingField.clean();
|
333 |
this.pickerImageField.clean();
|
334 |
this.pickerImageSelectedField.clean();
|
335 |
this.pickerImagesTableClassifyingField.setEnabled(false); |
336 |
this.pickerImageField.setEnabled(false); |
337 |
this.pickerImageSelectedField.setEnabled(false); |
338 |
} |
339 |
|
340 |
private void createListOfAvailableTables() { |
341 |
DataManager dataManager = DALLocator.getDataManager(); |
342 |
Map<String,Integer> allTableNames = new HashMap<>(); |
343 |
StoresRepository repositories = dataManager.getStoresRepository(); |
344 |
for (String tableName : repositories.keySet()) { |
345 |
DataStoreParameters params = repositories.get(tableName); |
346 |
if( params instanceof OpenFeatureStoreParameters ) { |
347 |
if( allTableNames.containsKey(tableName) ) {
|
348 |
allTableNames.put(tableName, allTableNames.get(tableName)+1);
|
349 |
} else {
|
350 |
allTableNames.put(tableName, 1);
|
351 |
} |
352 |
} |
353 |
} |
354 |
List<String> tableNames = new ArrayList<>(); |
355 |
for (String tableName : allTableNames.keySet()) { |
356 |
if( allTableNames.get(tableName)==1 ) { |
357 |
tableNames.add(tableName); |
358 |
} |
359 |
} |
360 |
Collections.sort(tableNames);
|
361 |
this.availablesTables = tableNames;
|
362 |
} |
363 |
|
364 |
private ComboBoxModel createImagesTableNameModel() { |
365 |
if( CollectionUtils.isEmpty(this.availablesTables) ) { |
366 |
createListOfAvailableTables(); |
367 |
} |
368 |
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(); |
369 |
for (String tableName : availablesTables) { |
370 |
model.addElement(tableName); |
371 |
} |
372 |
return model;
|
373 |
} |
374 |
|
375 |
private void doRefreshImageTables() { |
376 |
availablesTables = null;
|
377 |
cboImagesTableName.setModel(createImagesTableNameModel()); |
378 |
cboImagesTableName.setSelectedIndex(-1);
|
379 |
} |
380 |
|
381 |
@Override
|
382 |
public ImageIcon loadImage(String imageName) { |
383 |
return ToolsSwingUtils.loadImage(this, imageName); |
384 |
} |
385 |
|
386 |
} |