gvsig-3d / 2.1 / trunk / org.gvsig.view3d / org.gvsig.view3d.vector / org.gvsig.view3d.vector.swing / org.gvsig.view3d.vector.swing.impl / src / main / java / org / gvsig / view3d / vector / swing / impl / JVectorExtrusionLoaderParametersController.java @ 761
History | View | Annotate | Download (8.04 KB)
1 |
package org.gvsig.view3d.vector.swing.impl; |
---|---|
2 |
|
3 |
import java.awt.event.ActionEvent; |
4 |
import java.awt.event.ActionListener; |
5 |
import java.util.Arrays; |
6 |
import java.util.Collections; |
7 |
import java.util.List; |
8 |
|
9 |
import javax.swing.JComponent; |
10 |
|
11 |
import org.apache.commons.lang3.StringUtils; |
12 |
import org.opengis.metadata.Datatype; |
13 |
import org.slf4j.Logger; |
14 |
import org.slf4j.LoggerFactory; |
15 |
|
16 |
import org.gvsig.fmap.dal.exception.DataException; |
17 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
18 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
19 |
import org.gvsig.fmap.dal.feature.FeatureType; |
20 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
21 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
22 |
import org.gvsig.tools.ToolsLocator; |
23 |
import org.gvsig.tools.dataTypes.CoercionException; |
24 |
import org.gvsig.tools.dataTypes.DataTypes; |
25 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
26 |
import org.gvsig.tools.dataTypes.DataTypesManager.Coercion; |
27 |
import org.gvsig.tools.i18n.I18nManager; |
28 |
import org.gvsig.view3d.lib.api.loader.LoaderParameters; |
29 |
import org.gvsig.view3d.swing.api.exception.InvalidLoaderParametersException; |
30 |
import org.gvsig.view3d.vector.lib.api.VectorElevationMode; |
31 |
import org.gvsig.view3d.vector.lib.api.VectorExtrusionLoaderParameters; |
32 |
import org.gvsig.view3d.vector.swing.api.JVectorExtrusionLoaderParameters; |
33 |
|
34 |
public class JVectorExtrusionLoaderParametersController extends JVectorExtrusionLoaderParametersView |
35 |
implements JVectorExtrusionLoaderParameters {
|
36 |
|
37 |
private static final long serialVersionUID = 26999444514713602L; |
38 |
|
39 |
private static final Logger LOG = LoggerFactory.getLogger(JVectorExtrusionLoaderParametersController.class); |
40 |
|
41 |
private JColorChooserButton colorChooserButton;
|
42 |
|
43 |
private VectorExtrusionLoaderParameters parameters;
|
44 |
|
45 |
public JVectorExtrusionLoaderParametersController(VectorExtrusionLoaderParameters parameters) {
|
46 |
super();
|
47 |
|
48 |
this.parameters = parameters;
|
49 |
translate(); |
50 |
initComponents(); |
51 |
} |
52 |
|
53 |
private void translate() { |
54 |
I18nManager i18nManager = ToolsLocator.getI18nManager(); |
55 |
this.elevationModeText.setText(i18nManager.getTranslation(this.elevationModeText.getText())); |
56 |
this.defaultColorText.setText(i18nManager.getTranslation(this.defaultColorText.getText())); |
57 |
this.constantHeightText.setText(i18nManager.getTranslation(this.constantHeightText.getText())); |
58 |
this.heightFieldText.setText(i18nManager.getTranslation(this.heightFieldText.getText())); |
59 |
this.verticalExaggerationText.setText(i18nManager.getTranslation(this.verticalExaggerationText.getText())); |
60 |
} |
61 |
|
62 |
@SuppressWarnings("unchecked") |
63 |
private void initComponents() { |
64 |
|
65 |
List<VectorElevationMode> elevationModes = Arrays.asList(VectorElevationMode.values()); |
66 |
|
67 |
// Elevation mode
|
68 |
this.elevationMode.setRenderer(new ElevationModeComboBoxRenderer()); |
69 |
for (VectorElevationMode mode : elevationModes) {
|
70 |
this.elevationMode.addItem(mode);
|
71 |
} |
72 |
if(parameters.getVectorElevationMode() != null) { |
73 |
this.elevationMode.setSelectedItem(parameters.getVectorElevationMode());
|
74 |
} |
75 |
|
76 |
// Default Color
|
77 |
this.colorChooserButton = new JColorChooserButton(parameters.getDefaultColor()); |
78 |
this.defaultColorPanel.add(colorChooserButton);
|
79 |
|
80 |
DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager(); |
81 |
Coercion stringCoercion = dataTypesManager.getCoercion(DataTypes.STRING); |
82 |
// Constant height
|
83 |
try {
|
84 |
this.constantHeight.setText((String) stringCoercion.coerce(parameters.getConstantHeight())); |
85 |
} catch (CoercionException e) {
|
86 |
LOG.error(String.format("Can not parse constant height value %d to string", parameters.getConstantHeight()), |
87 |
e); |
88 |
this.constantHeight.setText(""); |
89 |
} |
90 |
|
91 |
// Vertical exaggeration
|
92 |
try {
|
93 |
String verticalExaggeration = (String) stringCoercion.coerce(parameters.getVerticalExaggeration()); |
94 |
if(StringUtils.isBlank(verticalExaggeration)) {
|
95 |
this.verticalExaggeration.setText("1.0"); |
96 |
} else {
|
97 |
this.verticalExaggeration.setText(verticalExaggeration);
|
98 |
} |
99 |
} catch (CoercionException e) {
|
100 |
LOG.error(String.format("Can not parse vertical exaggeration value %d to string", |
101 |
parameters.getVerticalExaggeration()), e); |
102 |
this.verticalExaggeration.setText(""); |
103 |
} |
104 |
|
105 |
// Height field
|
106 |
heightField.addItem("");
|
107 |
|
108 |
FLayer layer = this.parameters.getLayer();
|
109 |
if (layer instanceof FLyrVect) { |
110 |
|
111 |
FLyrVect vectorLayer = (FLyrVect) layer; |
112 |
FeatureStore featureStore = vectorLayer.getFeatureStore(); |
113 |
FeatureType featureType = null;
|
114 |
try {
|
115 |
featureType = featureStore.getDefaultFeatureType(); |
116 |
} catch (DataException e) {
|
117 |
LOG.error(String.format("Can not get feature type of %1s", vectorLayer.getName()), e); |
118 |
return;
|
119 |
} |
120 |
FeatureAttributeDescriptor[] attributeDescriptors = featureType.getAttributeDescriptors();
|
121 |
for (FeatureAttributeDescriptor attDesc : attributeDescriptors) {
|
122 |
if(attDesc.getDataType().isNumeric()) {
|
123 |
heightField.addItem(attDesc.getName()); |
124 |
} |
125 |
} |
126 |
if(StringUtils.isNotBlank(this.parameters.getHeightField()) && |
127 |
featureType.getAttributeDescriptor(this.parameters.getHeightField()) != null){ |
128 |
heightField.setSelectedItem(this.parameters.getHeightField());
|
129 |
constantHeightText.setEnabled(false);
|
130 |
constantHeight.setEnabled(false);
|
131 |
} |
132 |
} |
133 |
|
134 |
|
135 |
// Initialize change listeners
|
136 |
this.heightField.addActionListener(new ActionListener() { |
137 |
|
138 |
@Override
|
139 |
public void actionPerformed(ActionEvent e) { |
140 |
String selectedValue = (String) heightField.getSelectedItem(); |
141 |
if(StringUtils.isBlank(selectedValue)) {
|
142 |
constantHeightText.setEnabled(true);
|
143 |
constantHeight.setEnabled(true);
|
144 |
} else {
|
145 |
constantHeightText.setEnabled(false);
|
146 |
constantHeight.setEnabled(false);
|
147 |
} |
148 |
} |
149 |
}); |
150 |
} |
151 |
|
152 |
@Override
|
153 |
public LoaderParameters getLoaderParameters() throws InvalidLoaderParametersException { |
154 |
|
155 |
DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager(); |
156 |
Coercion doubleCoercion = dataTypesManager.getCoercion(DataTypes.DOUBLE); |
157 |
|
158 |
this.parameters.setVectorElevationMode((VectorElevationMode) this.elevationMode.getSelectedItem()); |
159 |
this.parameters.setDefaultColor(this.colorChooserButton.getSelectedColor()); |
160 |
|
161 |
if(StringUtils.isNotBlank((String) this.heightField.getSelectedItem())) { |
162 |
this.parameters.setHeightField((String) this.heightField.getSelectedItem()); |
163 |
} else {
|
164 |
try {
|
165 |
this.parameters.setConstantHeight((double) doubleCoercion.coerce(this.constantHeight.getText())); |
166 |
} catch (CoercionException e) {
|
167 |
LOG.error(String.format("Can not parse constant height value %s to double", this.constantHeight.getText()), |
168 |
e); |
169 |
throw new InvalidLoaderParametersException("Invalid constant height value", "constant_height_has_to_be_a_number", |
170 |
e); |
171 |
} |
172 |
} |
173 |
|
174 |
try {
|
175 |
this.parameters.setVerticalExaggeration((double) doubleCoercion.coerce(this.verticalExaggeration.getText())); |
176 |
} catch (CoercionException e) {
|
177 |
LOG.error(String.format("Can not parse vertical exaggeration value %s to double", |
178 |
this.verticalExaggeration.getText()), e);
|
179 |
throw new InvalidLoaderParametersException("Invalid vertical exaggeration value", |
180 |
"vertical_exaggeration_has_to_be_a_number", e);
|
181 |
} |
182 |
|
183 |
return this.parameters; |
184 |
} |
185 |
|
186 |
@Override
|
187 |
public JComponent asJComponent() { |
188 |
return this; |
189 |
} |
190 |
|
191 |
} |