Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / layerdatatype / LayerDatatypeTocMenuEntry.java @ 2101

History | View | Annotate | Download (5.5 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
package org.gvsig.raster.tools.app.basic.tool.layerdatatype;
23

    
24
import java.awt.event.ActionEvent;
25
import java.awt.event.ActionListener;
26

    
27
import javax.swing.Icon;
28

    
29
import org.gvsig.andami.IconThemeHelper;
30
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
31
import org.gvsig.app.project.documents.view.toc.ITocItem;
32
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
33
import org.gvsig.fmap.mapcontext.layers.FLayer;
34
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
35
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
36
import org.gvsig.i18n.Messages;
37
import org.gvsig.raster.algorithm.BasicAPISwingPanel;
38
import org.gvsig.raster.algorithm.process.DataProcess;
39
import org.gvsig.raster.fmap.layers.FLyrRaster;
40
import org.gvsig.raster.fmap.layers.ILayerState;
41
import org.gvsig.raster.fmap.layers.IRasterLayerActions;
42
import org.gvsig.raster.tools.algorithm.swing.AlgorithmSwingLocator;
43
import org.gvsig.raster.tools.app.basic.MainWindow;
44
import org.gvsig.raster.tools.app.basic.RasterToolsUtil;
45
import org.gvsig.raster.tools.app.basic.raster.gui.IGenericToolBarMenuItem;
46

    
47
/**
48
 * <code>LayerDatatypeMenuEntry</code> entry point to change the data type of a layer
49
 *
50
 * @author Nacho Brodin (nachobrodin@gmail.com)
51
 */
52
public class LayerDatatypeTocMenuEntry extends AbstractTocContextMenuAction 
53
        implements IGenericToolBarMenuItem, ActionListener {
54
        static private LayerDatatypeTocMenuEntry       singleton              = null;
55
        private MainWindow                             window                 = null;
56
        private BasicAPISwingPanel                     panel                  = null;
57
        private FLyrRaster                             inputLayer             = null;
58
        
59
        /**
60
         * Nobody can instantiate this object. It's necessary to use getSingleton method
61
         */
62
        private LayerDatatypeTocMenuEntry() {}
63

    
64
        /**
65
         * Gets a unique instance of this class
66
         * @return
67
         */
68
        public static LayerDatatypeTocMenuEntry getSingleton() {
69
                if (singleton == null)
70
                        singleton = new LayerDatatypeTocMenuEntry();
71
                return singleton;
72
        }
73

    
74
        public String getGroup() {
75
                return "RasterExport";
76
        }
77

    
78
        public int getGroupOrder() {
79
                return 50;
80
        }
81

    
82
        public int getOrder() {
83
                return 2;
84
        }
85

    
86
        public String getText() {
87
                return Messages.getText("change_datatype");
88
        }
89

    
90
        public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
91
                if ((selectedItems == null) || (selectedItems.length != 1))
92
                        return false;
93

    
94
                if (!(selectedItems[0] instanceof ILayerState))
95
                        return false;
96

    
97
                if (!((ILayerState) selectedItems[0]).isOpen())
98
                        return false;
99
                return true;
100
        }
101

    
102
        public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
103
                if ((selectedItems == null) || (selectedItems.length != 1))
104
                        return false;
105

    
106
                if (!(selectedItems[0] instanceof IRasterLayerActions))
107
                        return false;
108

    
109
                return ((IRasterLayerActions) selectedItems[0]).isActionEnabled(IRasterLayerActions.CLIPPING);
110
        }
111

    
112
        public void execute(ITocItem item, FLayer[] selectedItems) {
113
                FLayer fLayer = null;
114

    
115
                if (selectedItems.length != 1)
116
                        return;
117

    
118
                fLayer = selectedItems[0];
119

    
120
                if (!(fLayer instanceof FLyrRaster))
121
                        return;
122
                inputLayer = (FLyrRaster)fLayer;
123
                
124
                panel = AlgorithmSwingLocator.getSwingManager().createLayerDatatypePanel(
125
                                inputLayer.getDataStore(), 
126
                                getDataType(inputLayer),
127
                                inputLayer.getName());
128
                window = new MainWindow(panel.getComponent(), 
129
                                null, 
130
                                Messages.getText("change_datatype"), 
131
                                350, 290, 
132
                                this);
133
                
134
                RasterToolsUtil.addWindow(window);
135
        }
136
        
137
        /**
138
         * Gets the data type of the input layer as String
139
         * @param fLayer
140
         * @return
141
         */
142
        private String getDataType(FLyrRaster fLayer) {
143
                int dt = fLayer.getDataStore().getDataType()[0];
144
                if(dt == Buffer.TYPE_BYTE)
145
                        return "BYTE";
146
                if(dt == Buffer.TYPE_SHORT)
147
                        return "SHORT";
148
                if(dt == Buffer.TYPE_INT)
149
                        return "INTEGER";
150
                if(dt == Buffer.TYPE_FLOAT)
151
                        return "FLOAT";
152
                if(dt == Buffer.TYPE_DOUBLE)
153
                        return "DOUBLE";
154
                return "";
155
        }
156
        
157
        public void actionPerformed(ActionEvent e) {
158
                if( e.getSource() == ((DefaultButtonsPanel)window).getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY) ||
159
                                e.getSource() == ((DefaultButtonsPanel)window).getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT)) {
160
                        DataProcess task = null;
161
                        try {
162
                                task = (DataProcess)panel.getResult();
163
                        } catch (Exception e1) {
164
                                Messages.getText("error_getting_process");
165
                        }
166
                        task.setActions(new ProcessEndActions(window, inputLayer));
167
                        task.init();
168
                        task.start();
169
                }
170
        }
171

    
172
        public Icon getIcon() {
173
                return IconThemeHelper.getImageIcon("datatype-icon");
174
        }
175
}