Statistics
| Revision:

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
}