svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / project / symboltables / functionPanels / area / AreaAditionalPanel.java @ 44129
History | View | Annotate | Download (5.77 KB)
1 |
package org.gvsig.app.project.symboltables.functionPanels.area; |
---|---|
2 |
|
3 |
import java.awt.event.ActionEvent; |
4 |
import java.awt.event.ActionListener; |
5 |
import java.awt.event.ItemEvent; |
6 |
import java.awt.event.ItemListener; |
7 |
import java.util.ArrayList; |
8 |
import java.util.Collections; |
9 |
import java.util.Comparator; |
10 |
import java.util.List; |
11 |
import java.util.function.Predicate; |
12 |
import javax.swing.DefaultListModel; |
13 |
import javax.swing.JComponent; |
14 |
import javax.swing.event.ListSelectionEvent; |
15 |
import javax.swing.event.ListSelectionListener; |
16 |
import org.gvsig.app.project.symboltables.ProjectSymbolTable; |
17 |
import org.gvsig.expressionevaluator.swing.Element; |
18 |
import org.gvsig.expressionevaluator.swing.JExpressionBuilder; |
19 |
import org.gvsig.fmap.dal.DataTypes; |
20 |
import org.gvsig.fmap.dal.exception.DataException; |
21 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
22 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
23 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
24 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
25 |
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement; |
26 |
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController; |
27 |
import org.gvsig.fmap.geom.Geometry; |
28 |
import org.gvsig.fmap.geom.type.GeometryType; |
29 |
import org.gvsig.fmap.mapcontext.MapContext; |
30 |
import org.gvsig.tools.swing.api.Component; |
31 |
import org.gvsig.tools.swing.api.ListElement; |
32 |
|
33 |
/**
|
34 |
*
|
35 |
* @author jjdelcerro
|
36 |
*/
|
37 |
public class AreaAditionalPanel |
38 |
extends AreaAditionalPanelView
|
39 |
implements Component |
40 |
{ |
41 |
|
42 |
private final JExpressionBuilder expressionBuilder; |
43 |
private AttributeDescriptorPickerController fieldPicker;
|
44 |
|
45 |
public AreaAditionalPanel(JExpressionBuilder expressionBuilder) {
|
46 |
this.expressionBuilder = expressionBuilder;
|
47 |
this.initComponents();
|
48 |
} |
49 |
|
50 |
@Override
|
51 |
public JComponent asJComponent() { |
52 |
return this; |
53 |
} |
54 |
|
55 |
private void initComponents() { |
56 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
57 |
|
58 |
this.fieldPicker = dataSwingManager.createAttributeDescriptorPickerController(
|
59 |
this.cboFields,
|
60 |
new Predicate<FeatureAttributeDescriptor>() { |
61 |
@Override
|
62 |
public boolean test(FeatureAttributeDescriptor descriptor) { |
63 |
if( descriptor.getDataType().getType()!=DataTypes.GEOMETRY ) {
|
64 |
return false; |
65 |
} |
66 |
GeometryType geomtype = descriptor.getGeomType(); |
67 |
if( geomtype.getType()==Geometry.TYPES.GEOMETRY ) {
|
68 |
return true; |
69 |
} |
70 |
boolean isSurface = geomtype.isTypeOf(Geometry.TYPES.SURFACE) ||
|
71 |
geomtype.isTypeOf(Geometry.TYPES.MULTISURFACE); |
72 |
return isSurface;
|
73 |
} |
74 |
}); |
75 |
final FeatureStore store = this.getFeatureStore(); |
76 |
try {
|
77 |
this.fieldPicker.setFeatureType(store.getDefaultFeatureType());
|
78 |
} catch (DataException ex) {
|
79 |
} |
80 |
|
81 |
String[] abbrev = MapContext.getAreaAbbr(); |
82 |
String[] names = MapContext.getAreaNames(); |
83 |
List<ListElement<String>> elements = new ArrayList<>(); |
84 |
for (int j = 0; j < names.length; j++) { |
85 |
elements.add(new ListElement<>(names[j]+" ("+abbrev[j]+")", abbrev[j])); |
86 |
} |
87 |
Collections.sort(elements, new Comparator<ListElement<String>>() { |
88 |
@Override
|
89 |
public int compare(ListElement<String> o1, ListElement<String> o2) { |
90 |
return o1.toString().compareTo(o2.toString());
|
91 |
} |
92 |
}); |
93 |
|
94 |
DefaultListModel unitsModel = new DefaultListModel(); |
95 |
for (ListElement<String> element : elements) { |
96 |
unitsModel.addElement(element); |
97 |
} |
98 |
this.lstUnits.setModel(unitsModel);
|
99 |
if( lstUnits.getModel().getSize()>0 ) { |
100 |
this.lstUnits.setSelectedIndex(0); |
101 |
} |
102 |
if( this.cboFields.getModel().getSize()>0 ) { |
103 |
this.cboFields.setSelectedIndex(0); |
104 |
} |
105 |
this.cboFields.addItemListener(new ItemListener() { |
106 |
@Override
|
107 |
public void itemStateChanged(ItemEvent e) { |
108 |
doUpdatePreview(); |
109 |
} |
110 |
}); |
111 |
this.lstUnits.addListSelectionListener(new ListSelectionListener() { |
112 |
@Override
|
113 |
public void valueChanged(ListSelectionEvent e) { |
114 |
if( e.getValueIsAdjusting() ) {
|
115 |
return;
|
116 |
} |
117 |
doUpdatePreview(); |
118 |
} |
119 |
}); |
120 |
this.btnInsertFunction.addActionListener(new ActionListener() { |
121 |
@Override
|
122 |
public void actionPerformed(ActionEvent e) { |
123 |
doInsertFunction(); |
124 |
} |
125 |
}); |
126 |
doUpdatePreview(); |
127 |
} |
128 |
|
129 |
private void doUpdatePreview() { |
130 |
FeatureAttributeDescriptor descriptor = this.fieldPicker.get();
|
131 |
String fieldName;
|
132 |
if( descriptor == null ) { |
133 |
fieldName = "{{geometry}}";
|
134 |
} else {
|
135 |
fieldName = descriptor.getName(); |
136 |
} |
137 |
String unitName = (String) ListElement.getSelected(lstUnits); |
138 |
String template = ProjectSymbolTable.AREA_NAME + "( "+fieldName+", '"+unitName+"' )"; |
139 |
this.txtPreview.setText(template);
|
140 |
this.txtPreview.setCaretPosition(0); |
141 |
|
142 |
} |
143 |
|
144 |
private void doInsertFunction() { |
145 |
this.expressionBuilder.insertText(this.txtPreview.getText()); |
146 |
} |
147 |
|
148 |
private FeatureStore getFeatureStore() {
|
149 |
List<Element> elements = this.expressionBuilder.getElements(); |
150 |
for (Element element : elements) { |
151 |
if( element instanceof FeatureStoreElement ) { |
152 |
FeatureStore store = ((FeatureStoreElement) element).getFeatureStore(); |
153 |
if( store != null ) { |
154 |
return store;
|
155 |
} |
156 |
} |
157 |
} |
158 |
return null; |
159 |
} |
160 |
} |