Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / properties / control / PanSharpeningControl.java @ 18014

History | View | Annotate | Download (7.69 KB)

1
package org.gvsig.rastertools.properties.control;
2

    
3
import java.awt.Component;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.io.File;
7
import java.util.ArrayList;
8

    
9
import javax.swing.JOptionPane;
10
import javax.swing.event.ChangeEvent;
11
import javax.swing.event.ChangeListener;
12
import javax.swing.event.TableModelEvent;
13

    
14
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
15
import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
16
import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
17
import org.gvsig.gui.beans.slidertext.listeners.SliderListener;
18
import org.gvsig.raster.Configuration;
19
import org.gvsig.raster.dataset.RasterDataset;
20
import org.gvsig.raster.grid.filter.FilterTypeException;
21
import org.gvsig.raster.grid.filter.RasterFilter;
22
import org.gvsig.raster.grid.filter.RasterFilterList;
23
import org.gvsig.raster.grid.filter.RasterFilterListManager;
24
import org.gvsig.raster.grid.filter.pansharp.PanSharpeningFilter;
25
import org.gvsig.raster.grid.filter.pansharp.PanSharpeningListManager;
26
import org.gvsig.raster.hierarchy.IRasterDataset;
27
import org.gvsig.raster.hierarchy.IRasterProperties;
28
import org.gvsig.raster.util.RasterToolsUtil;
29
import org.gvsig.rastertools.RasterModule;
30
import org.gvsig.rastertools.properties.panels.PanSharpeningPanel;
31

    
32
import com.iver.andami.PluginServices;
33
import com.iver.andami.Utilities;
34
import com.iver.cit.gvsig.exceptions.layers.LoadLayerException;
35
import com.iver.cit.gvsig.fmap.layers.FLayer;
36
/**
37
 * Clase que hace de interfaz entre los objetos que contienen la informaci?n de
38
 * pansharp y el panel.
39
 *
40
 * @author Nacho Brodin (nachobrodin@gmail.com)
41
 */
42

    
43
public class PanSharpeningControl implements ActionListener, SliderListener, ChangeListener  {
44

    
45
        private PanSharpeningPanel                         pansharpPanel=null;
46
        protected RasterDataset[]                         grd = null;
47
        private FLayer                                                 fLayer = null;
48
        private RasterFilterList            filterList = null;
49
        private IRasterDataset                                dataset = null;
50
        private boolean                                         aplicado=false;
51
        String fileNameOutput=null;
52
        private AbstractPanelGroup              panelGroup = null;
53
        
54
        public void actionValueChanged(SliderEvent e) {
55
                // TODO Auto-generated method stub        
56
        }
57

    
58
        public void actionValueDragged(SliderEvent e) {
59
                // TODO Auto-generated method stub
60
        }
61

    
62
        public PanSharpeningControl(AbstractPanelGroup panelGroup, PanSharpeningPanel pP,IRasterDataset dataset,IRasterProperties prop,FLayer lyr,RasterFilterList rfl) {
63
                this.panelGroup = panelGroup;
64
                this.pansharpPanel = pP;
65
                this.dataset = dataset;
66
                this.filterList = rfl;
67
                fLayer= lyr;
68
                pP.getCbActiveSharpening().addActionListener(this);
69
                pP.getJSlider().addChangeListener(this);
70
                pP.getJSlider1().addChangeListener(this);
71
        }
72
        
73
        
74
        public void init(IRasterDataset dset, IRasterProperties prop, FLayer lyr) {
75
                this.dataset = dset;
76
                fLayer = lyr;
77
        }
78
        
79
        public void stateChanged(ChangeEvent e) {
80
                //Ponemos el valor del texto del coeficiente 
81
                if (e.getSource().equals(pansharpPanel.getJSlider())) {
82
                        pansharpPanel.getJTextField().setText(String.valueOf((pansharpPanel.getJSlider().getValue()/200.0)));
83
                }
84

    
85
                if (e.getSource().equals(pansharpPanel.getJSlider1())) {
86
                        pansharpPanel.getJTextField1().setText(String.valueOf((pansharpPanel.getJSlider1().getValue()/2)));
87
                }
88
        }
89

    
90
        public void actionPerformed(ActionEvent e) {
91
                if (e.getSource() == pansharpPanel.getCbActiveSharpening()) {
92

    
93
                        if (this.pansharpPanel.getCbActiveSharpening().isSelected()) {
94
                                pansharpPanel.setTableEnabled(true);
95
                        }else{
96
                                pansharpPanel.setTableEnabled(false);
97
                        }
98
                }
99
        }
100
                                
101
                /* (non-Javadoc)
102
                         * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
103
                         */
104
                        public void tableChanged(TableModelEvent e) {
105
                                        pansharpPanel.getBandTable().revalidate();
106
                                        pansharpPanel.getRBandPane().revalidate();
107
                        }
108

    
109
                        // Control de si se ha aplicado el procedimiento de 
110
                        private boolean isAplicado(){
111
                                return aplicado;
112
                        }
113
                        
114
                        // Aciones tras aceptar
115
                        public void  apply(){
116
                                try {
117
                                setValuesFromPanelToFilter();
118
                        } catch (FilterTypeException e) {
119
                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
120
                        }
121
                                aplicado=true;
122
                        }
123
                        
124
                        public void accept(){
125
                                if(isAplicado()==false)
126
                                try {
127
                                        setValuesFromPanelToFilter();
128
                                } catch (FilterTypeException e) {
129
                                        RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
130
                                }
131
                                 pansharpPanel.getCbActiveSharpening().setSelected(false);
132
                                // Se elimina el filtro de la lista de filtros, ya ha sido aplicado
133
                                
134
                        }
135
                        
136
                        public void cancel(){
137
                                restoreStatus();
138
                        }
139
                
140
                        public void restoreStatus(){
141
                                filterList.setStatus((ArrayList) panelGroup.getProperties().get("filterStatus"));
142

    
143
                        if (fLayer != null)
144
                                fLayer.getMapContext().invalidate();
145
                        }
146
                                 
147
                        /**
148
                 * Carga los valores del filtro de Pansharpening desde el panel
149
                         * @throws FilterTypeException 
150
                 */
151
                private void setValuesFromPanelToFilter() throws FilterTypeException {
152
                        
153
                        RasterFilterListManager manager = new RasterFilterListManager(filterList);
154
                        // PANSHARPENING FILTER
155
                        PanSharpeningListManager bcManager = (PanSharpeningListManager) manager.getManagerByClass(PanSharpeningListManager.class);
156
                
157
                        // Fichero de salida
158
                        String fileName = RasterModule.usesOnlyLayerName();
159
                        fileNameOutput = Utilities.createTempDirectory() + File.separator + fileName + ".tif";
160
                        if (pansharpPanel.getCbActiveSharpening().isSelected()){                
161
                                // Tomar los parametros de la interfas pharsharpPanel
162
                                int posPancromatica= pansharpPanel.getBandTable().getSelectedRow();
163
                                // Array con el orden de las bandas asignadas a RGB
164
                                ArrayList orden = (ArrayList) panelGroup.getProperties().get("renderBands");
165
                                String method = "brovey";
166
                                 if(pansharpPanel.getRbHSL().isSelected())
167
                                         method = "hsl";        
168
                                 double coef = 0D;
169
                                 if(pansharpPanel.getRbHSL().isSelected())
170
                                         coef = Double.parseDouble(pansharpPanel.getJTextField().getText());
171
                                 int coefBrovey = 0;
172
                                 if(pansharpPanel.getRbBrovey().isSelected())
173
                                         coefBrovey = Integer.parseInt(pansharpPanel.getJTextField1().getText());        
174
                                 //                                 A?adir el filtro                 
175
                                if(posPancromatica!=-1)
176
                                        bcManager.addPanSharpeningFilter(dataset,posPancromatica, orden, 1, method, coef, coefBrovey, fileNameOutput);        
177
                                else
178
                                filterList.remove(PanSharpeningFilter.class);
179

    
180
                                
181
                                applyPansharpeningProcess();
182
                        
183
                        }
184

    
185
                }
186
                        
187
                /**
188
                 * Lanza la ejecucion del filtro y carga el resultado en la vista
189
                 * @throws FilterTypeException  
190
                 */
191
                void applyPansharpeningProcess() throws FilterTypeException {
192
                        
193
//                         Ejecucion del filtro de pansharpening
194
                                try {
195
                                filterList.getFilterByBaseClass(PanSharpeningFilter.class).execute();
196
                        } catch (InterruptedException e) {
197
                                // TODO Auto-generated catch block
198
                                e.printStackTrace();
199
                        }
200
                        
201
                        // Aplicado el filtro lo borramos de la lista
202
                        filterList.remove(PanSharpeningFilter.class);
203
                                
204
                                String fileName=fileNameOutput;
205
                        int endIndex = fileName.lastIndexOf(".");
206
                        if (endIndex < 0)
207
                                 endIndex = fileName.length();
208
                        
209
                        
210
                        FLayer lyr = null;
211
                        
212
                        try {
213
                         
214
                                 lyr = FLyrRasterSE.createLayer(fileNameOutput.substring(
215
                                                 fileNameOutput.lastIndexOf(File.separator) + 1, endIndex),new File(fileNameOutput), dataset.getDataSource().getDataset(0)[0].getProjection(), Configuration.getSingleton());
216
                        } catch (LoadLayerException e) {
217
                                 
218
                                 JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
219
                                 PluginServices.getText(this, "error_cargar_capa"));
220
                         }
221
                        fLayer.getMapContext().getLayers().addLayer(lyr);
222
                                
223
                        
224
                }
225
                        
226
                
227
                private int hasFilter(ArrayList filter, String name) {
228
                        for (int i = 0; i < filter.size(); i++) {
229
                                if (((RasterFilter) filter.get(i)).getName().equals(name))
230
                                        return i;
231
                        }
232
                        return -1;
233
                }
234

    
235

    
236
}
237

    
238