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 / loader / raster / JRasterLoaderParametersController.java @ 773

History | View | Annotate | Download (8.01 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2017 gvSIG Association
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.view3d.swing.impl.loader.raster;
25

    
26
import java.util.Hashtable;
27

    
28
import javax.swing.JComponent;
29
import javax.swing.JLabel;
30

    
31
import org.gvsig.tools.ToolsLocator;
32
import org.gvsig.tools.dataTypes.CoercionException;
33
import org.gvsig.tools.dataTypes.DataTypes;
34
import org.gvsig.tools.dataTypes.DataTypesManager;
35
import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
36
import org.gvsig.tools.i18n.I18nManager;
37
import org.gvsig.view3d.lib.api.View3DLocator;
38
import org.gvsig.view3d.lib.api.View3DManager;
39
import org.gvsig.view3d.lib.api.exception.FactoryNotRegisteredException;
40
import org.gvsig.view3d.lib.api.loader.LoaderFactory;
41
import org.gvsig.view3d.lib.api.loader.LoaderParameters;
42
import org.gvsig.view3d.lib.api.loader.RasterLoaderParameters;
43
import org.gvsig.view3d.swing.api.exception.InvalidLoaderParametersException;
44
import org.gvsig.view3d.swing.api.loader.JLoaderParameters;
45
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
47

    
48
/**
49
 * 
50
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
51
 *
52
 */
53
public class JRasterLoaderParametersController extends JRasterLoaderParametersView implements
54
    JLoaderParameters {
55

    
56
    private static final Logger LOG = LoggerFactory
57
        .getLogger(JRasterLoaderParametersController.class);
58

    
59
    private static final long serialVersionUID = -8873888391149630710L;
60

    
61
    private RasterLoaderParameters parameters;
62

    
63
    /**
64
     * 
65
     * @param layer
66
     * @param parameters
67
     */
68
    public JRasterLoaderParametersController(LoaderParameters parameters) {
69

    
70
        this.parameters = (RasterLoaderParameters) parameters;
71

    
72
        translate();
73
        initComponents();
74
    }
75

    
76
    private void initComponents() {
77
        
78
        // Slider
79
        Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer,JLabel>();
80
        I18nManager i18nManager = ToolsLocator.getI18nManager();
81
        labelTable.put(new Integer(0), new JLabel(i18nManager.getTranslation("low")));
82
        labelTable.put(new Integer(10), new JLabel(i18nManager.getTranslation("high")));
83
        zeroLevelResolution.setLabelTable(labelTable);
84
        zeroLevelResolution.setPaintLabels(true);
85
        zeroLevelResolution.setMajorTickSpacing(1);
86
        zeroLevelResolution.setPaintTicks(true);
87

    
88
        try {
89
            fill(parameters);
90
        } catch (CoercionException e) {
91
            LOG.warn("Can not parse loader parameters to fill panel. Setting default values", e);
92
            View3DManager manager = View3DLocator.getManager();
93
            LoaderFactory loaderFactory = null;
94
            try {
95
                loaderFactory = manager.getLoaderFactory(RasterLoaderParameters.NAME);
96
                this.parameters =
97
                    (RasterLoaderParameters) loaderFactory.createParameters(parameters.getLayer());
98
                fill(parameters);
99
            } catch (FactoryNotRegisteredException e1) {
100
                LOG.error("There are not registered loader factory with {} name",
101
                    new String[] { RasterLoaderParameters.NAME }, e1);
102
                throw new IllegalArgumentException("Raster loader is not registered.");
103
            } catch (CoercionException e2) {
104
                LOG.error(
105
                    "Default values of RasterLoader can not be parsed to fill JRasterLoader panel",
106
                    new String[] { RasterLoaderParameters.NAME }, e2);
107
                throw new IllegalArgumentException(
108
                    "Default Raster loader parameter values are not valid");
109
            }
110
        }
111
    }
112

    
113
    private void fill(RasterLoaderParameters parameters) throws CoercionException {
114
        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
115
        Coercion stringCoercion = dataTypesManager.getCoercion(DataTypes.STRING);
116
        this.minDetailLevel.setText((String) stringCoercion.coerce(parameters.getMinLevel()));
117
        this.maxDetailLevel.setText((String) stringCoercion.coerce(parameters.getMaxLevel()));
118
        this.zeroLevelResolution
119
            .setValue((int) ((1 / parameters.getLevelZeroResolution()) * (this.zeroLevelResolution
120
                .getMaximum() / 2)));
121
        this.tileSize.setText((String) stringCoercion.coerce(parameters.getTileSize()));
122
        this.noData.setText((String) stringCoercion.coerce(parameters.getNoData()));
123
    }
124

    
125
    private void translate() {
126
        I18nManager i18nManager = ToolsLocator.getI18nManager();
127
        minDetailLevelText.setText(i18nManager.getTranslation(minDetailLevelText.getText()));
128
        maxDetailLevelText.setText(i18nManager.getTranslation(maxDetailLevelText.getText()));
129
        zeroLevelResolutionText.setText(i18nManager.getTranslation(zeroLevelResolutionText
130
            .getText()));
131
        tileSizeText.setText(i18nManager.getTranslation(tileSizeText.getText()));
132
        noDataText.setText(i18nManager.getTranslation(noDataText.getText()));
133
    }
134

    
135
    @Override
136
    public JComponent asJComponent() {
137
        return this;
138
    }
139

    
140
    @Override
141
    public LoaderParameters getLoaderParameters() throws InvalidLoaderParametersException {
142
        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
143
        
144
        Coercion doubleCoercion = dataTypesManager.getCoercion(DataTypes.DOUBLE);
145
        Coercion intCoercion = dataTypesManager.getCoercion(DataTypes.INT);
146
        try {
147
            this.parameters.setMinLevel((int) intCoercion.coerce(minDetailLevel.getText()));
148
        } catch (CoercionException e) {
149
            LOG.warn("Can not cource minimum detail level", e);
150
            throw new InvalidLoaderParametersException("Minimum detail level has to be a number",
151
                "minimum_detail_level_has_to_be_a_number", e);
152
        }
153
        try {
154
            this.parameters.setMaxLevel((int) intCoercion.coerce(maxDetailLevel.getText()));
155
        } catch (CoercionException e) {
156
            LOG.warn("Can not cource maximum detail level", e);
157
            throw new InvalidLoaderParametersException("Maximum detail level has to be a number",
158
                "maximum_detail_level_has_to_be_a_number", e);
159
        }
160
        try {
161
            this.parameters.setTileSize((int) intCoercion.coerce(tileSize.getText()));
162
        } catch (CoercionException e) {
163
            LOG.warn("Can not cource tile size", e);
164
            throw new InvalidLoaderParametersException("Tile size has to be a number",
165
                "tile_size_has_to_be_a_number", e);
166
        }
167
        try {
168
            this.parameters.setNoData((double) doubleCoercion.coerce(this.noData.getText()));
169
        } catch (CoercionException e) {
170
            LOG.warn("Can not cource no data value", e);
171
            throw new InvalidLoaderParametersException("NoData value has to be a number",
172
                "nodata_value_has_to_be_a_number", e);
173
        }
174
        this.parameters.setLevelZeroResolution(getResolutionMultiplier());
175
        return this.parameters;
176
    }
177
    
178
    private double getResolutionMultiplier() {
179
        // Operation to convert slider value to valid multiplier.
180
        if (zeroLevelResolution.getValue() == 0) {
181
            return 1 / (0.5 / (zeroLevelResolution.getMaximum() / 2.0));
182
        }
183
        return 1 / (zeroLevelResolution.getValue() / (zeroLevelResolution.getMaximum() / 2.0));
184
    }
185
}