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