Statistics
| Revision:

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

History | View | Annotate | Download (7.62 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.RasterLibrary;
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.properties.panels.PanSharpeningPanel;
30

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

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

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

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

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

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

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

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

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

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

    
179
                                
180
                                applyPansharpeningProcess();
181
                        
182
                        }
183

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

    
234

    
235
}
236

    
237