Statistics
| Revision:

gvsig-3d / 2.1 / trunk / org.gvsig.view3d / org.gvsig.view3d.swing / org.gvsig.view3d.swing.impl / src / main / java / org / gvsig / view3d / swing / impl / properties / DefaultLayerProperties3DPanel.java @ 561

History | View | Annotate | Download (8.57 KB)

1
package org.gvsig.view3d.swing.impl.properties;
2

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.util.Iterator;
6

    
7
import javax.swing.JComboBox;
8

    
9
import org.gvsig.fmap.dal.exception.DataException;
10
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
11
import org.gvsig.fmap.dal.feature.FeatureStore;
12
import org.gvsig.fmap.dal.feature.FeatureType;
13
import org.gvsig.fmap.mapcontext.layers.FLayer;
14
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
15
import org.gvsig.tools.ToolsLocator;
16
import org.gvsig.tools.i18n.I18nManager;
17
import org.gvsig.view3d.lib.api.View3DLocator;
18
import org.gvsig.view3d.lib.api.View3DManager;
19
import org.gvsig.view3d.lib.api.properties.LayerProperties3D;
20
import org.gvsig.view3d.lib.api.properties.VectorialLayerProperties3D;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

    
24
public class DefaultLayerProperties3DPanel extends
25
    AbstractLayerProperties3DPanel {
26

    
27
    private static final Logger LOG = LoggerFactory
28
        .getLogger(DefaultLayerProperties3DPanel.class);
29

    
30
    private static final long serialVersionUID = -9087506154366633837L;
31

    
32
    private FLayer layer = null;
33
    private LayerProperties3D layerProperties;
34

    
35
    public DefaultLayerProperties3DPanel(FLayer theLayer) {
36
        super();
37
        this.layer = theLayer;
38

    
39
        View3DManager manager = View3DLocator.getManager();
40
        this.layerProperties = manager.getLayerProperties(theLayer);
41

    
42
        getLoadModesComboBox().addActionListener(new ActionListener() {
43

    
44
            public void actionPerformed(ActionEvent e) {
45
                @SuppressWarnings("rawtypes")
46
                JComboBox combo = (JComboBox) e.getSource();
47
                String selectedItem = (String) combo.getSelectedItem();
48
                update(selectedItem);
49
            }
50
        });
51

    
52
        fillPanel();
53
    }
54

    
55
    private void fillPanel() {
56
        fillLoadModes();
57
        fillDetailLevels();
58
        fillLevelZeroResolution();
59
        fillTileSize();
60
        fillElevationFields();
61
        fillElevationUnits();
62
        fillNoDataValue();
63
    }
64

    
65
    private void fillNoDataValue() {
66
        getNoDataField().setText(
67
            String.valueOf(layerProperties.getNoDataValue()));
68

    
69
    }
70

    
71
    private void fillElevationUnits() {
72
        I18nManager i18nManager = ToolsLocator.getI18nManager();
73
        String elevationUnits = layerProperties.getElevationUnits();
74

    
75
        if (i18nManager.getTranslation("meters").equalsIgnoreCase(
76
            elevationUnits)) {
77
            getUnitsComboBox().setSelectedItem(
78
                i18nManager.getTranslation("meters"));
79
        } else if (i18nManager.getTranslation("Pies").equalsIgnoreCase(
80
            elevationUnits)) {
81
            getUnitsComboBox().setSelectedItem(
82
                i18nManager.getTranslation("Pies"));
83
        }
84

    
85
    }
86

    
87
    private void fillTileSize() {
88
        int width = layerProperties.getTileWidth();
89
        int height = layerProperties.getTileHeight();
90

    
91
        getWidthField().setText(String.valueOf(width));
92
        getHeightField().setText(String.valueOf(height));
93
    }
94

    
95
    private void fillLevelZeroResolution() {
96
        // Operation to get slider value from valid multiplier.
97
        getLevelZeroSlider()
98
            .setValue(
99
                (int) ((1 / layerProperties.getLevelZeroResolutionMultiplier()) * (getLevelZeroSlider()
100
                    .getMaximum() / 2)));
101
    }
102

    
103
    private void fillDetailLevels() {
104
        int minLevel = layerProperties.getMinLevel();
105
        int maxLevel = layerProperties.getMaxLevel();
106

    
107
        getMaxTextField().setText(String.valueOf(maxLevel));
108
        getMinTextField().setText(String.valueOf(minLevel));
109
    }
110

    
111
    @SuppressWarnings("rawtypes")
112
    private void fillElevationFields() {
113

    
114
        if (this.layer == null) {
115
            return;
116
        }
117

    
118
        if (getFieldComboBox().getItemCount() > 0) {
119
            getFieldComboBox().removeAllItems();
120
        }
121

    
122
        if (this.layer instanceof FLyrVect) {
123
            FLyrVect vectorialLayer = (FLyrVect) layer;
124
            FeatureStore featureStore = vectorialLayer.getFeatureStore();
125
            try {
126
                FeatureType featureType = featureStore.getDefaultFeatureType();
127
                Iterator it = featureType.iterator();
128
                while (it.hasNext()) {
129
                    FeatureAttributeDescriptor attribute =
130
                        (FeatureAttributeDescriptor) it.next();
131
                    getFieldComboBox().addItem(attribute.getName());
132
                }
133

    
134
            } catch (DataException e) {
135
                LOG.error("Can't get defautl feature type of {}",
136
                    layer.getName(), e);
137
                getFieldComboBox().setVisible(false);
138
                return;
139
            }
140

    
141
            if (layerProperties instanceof VectorialLayerProperties3D) {
142
                VectorialLayerProperties3D vectorialProperties =
143
                    (VectorialLayerProperties3D) layerProperties;
144
                String elevationField = vectorialProperties.getElevationField();
145
                getFieldComboBox().setSelectedItem(elevationField);
146
            }
147
        } else {
148
            getFieldLabel().setVisible(false);
149
            getFieldComboBox().setVisible(false);
150
        }
151
    }
152

    
153
    private void fillLoadModes() {
154

    
155
        if (this.layer == null) {
156
            return;
157
        }
158

    
159
        I18nManager i18nManager = ToolsLocator.getI18nManager();
160
        JComboBox<String> loadModesComboBox = getLoadModesComboBox();
161

    
162
        if (loadModesComboBox.getItemCount() > 0) {
163
            loadModesComboBox.removeAllItems();
164
        }
165

    
166
        if (this.layer instanceof FLyrVect
167
            && layerProperties instanceof VectorialLayerProperties3D) {
168
            loadModesComboBox.addItem(i18nManager
169
                .getTranslation("rasterized_vectorial"));
170
            
171
            // TODO: Add elevation field when there is support to
172
            // load vectorial layer as elevation
173
            
174
        } else {
175
            loadModesComboBox.addItem(i18nManager
176
                .getTranslation("raster_image"));
177
            loadModesComboBox.addItem(i18nManager.getTranslation("elevation"));
178
        }        
179

    
180
        if (layerProperties.getElevation()) {
181
            loadModesComboBox.setSelectedItem(i18nManager
182
                .getTranslation("elevation"));
183
        } else {
184

    
185
            if (layerProperties instanceof VectorialLayerProperties3D) {
186
                loadModesComboBox.setSelectedItem(i18nManager
187
                    .getTranslation("rasterized_vectorial"));
188
            } else {
189
                loadModesComboBox.setSelectedItem(i18nManager
190
                    .getTranslation("raster_image"));
191
            }
192
        }
193
    }
194

    
195
    public FLayer getLayer() {
196
        return layer;
197
    }
198

    
199
    private void update(String loadMode) {
200

    
201
        I18nManager i18nManager = ToolsLocator.getI18nManager();
202
        if (loadMode.equalsIgnoreCase(i18nManager
203
            .getTranslation("rasterized_vectorial"))
204
            || loadMode.equalsIgnoreCase(i18nManager
205
                .getTranslation("raster_image"))) {
206
            enableComponents(getElevationPanel(), false);
207
        } else if (loadMode.equalsIgnoreCase(i18nManager
208
            .getTranslation("elevation"))) {
209
            enableComponents(getElevationPanel(), true);
210
        }
211
    }
212

    
213
    public void setLayer(FLayer theLayer) {
214
        this.layer = theLayer;
215

    
216
        fillPanel();
217
    }
218

    
219
    public String getElevationField() {
220
        return (String) getFieldComboBox().getSelectedItem();
221
    }
222

    
223
    public String getElevationUnits() {
224
        return (String) getUnitsComboBox().getSelectedItem();
225
    }
226

    
227
    public int getMaxLevel() {
228
        String value = getMaxTextField().getText();
229
        return Integer.valueOf(value);
230
    }
231

    
232
    public int getMinLevel() {
233
        String value = getMinTextField().getText();
234
        return Integer.valueOf(value);
235
    }
236

    
237
    public double getNoDataValue() {
238
        String value = getNoDataField().getText();
239
        return Double.valueOf(value);
240
    }
241

    
242
    public double getResolutionMultiplier() {
243
        // Operation to convert slider value to valid multiplier.
244
        if (getLevelZeroSlider().getValue() == 0) {
245
            return 1 / (0.5 / (getLevelZeroSlider().getMaximum() / 2.0));
246
        }
247
        return 1 / (getLevelZeroSlider().getValue() / (getLevelZeroSlider()
248
            .getMaximum() / 2.0));
249
    }
250

    
251
    public int getTileHeight() {
252
        String value = getHeightField().getText();
253
        return Integer.valueOf(value);
254
    }
255

    
256
    public int getTileWidth() {
257
        String value = getWidthField().getText();
258
        return Integer.valueOf(value);
259
    }
260

    
261
    public String getLoadMode() {
262
        return (String) getLoadModesComboBox().getSelectedItem();
263
    }
264
}