Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / saveas / SaveAsTocMenuEntry.java @ 13328

History | View | Annotate | Download (10.1 KB)

1 11893 nacho
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.rastertools.saveas;
20
21 11904 nacho
import java.awt.Component;
22 11931 nacho
import java.beans.PropertyChangeEvent;
23
import java.beans.PropertyChangeListener;
24 11900 nacho
import java.io.File;
25 11960 nacho
import java.util.ArrayList;
26 11900 nacho
27 11893 nacho
import javax.swing.JFileChooser;
28 11904 nacho
import javax.swing.JOptionPane;
29 11893 nacho
30 12425 nacho
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
31 13300 nacho
import org.gvsig.fmap.raster.layers.IRasterLayerActions;
32 11900 nacho
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
33 11904 nacho
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
34 11900 nacho
import org.gvsig.raster.buffer.BufferInterpolation;
35 11904 nacho
import org.gvsig.raster.dataset.GeoRasterWriter;
36 13328 nacho
import org.gvsig.raster.dataset.IRasterDataSource;
37 11904 nacho
import org.gvsig.raster.dataset.NotSupportedExtensionException;
38
import org.gvsig.raster.dataset.Params;
39
import org.gvsig.raster.dataset.RasterDriverException;
40 12383 nacho
import org.gvsig.raster.hierarchy.IRasterDataset;
41
import org.gvsig.raster.hierarchy.IRasterGeoOperations;
42
import org.gvsig.raster.hierarchy.IRasterOperations;
43 11893 nacho
import org.gvsig.rastertools.RasterModule;
44 11931 nacho
import org.gvsig.rastertools.RasterToolsUtil;
45 11900 nacho
import org.gvsig.rastertools.cutting.CuttingProcess;
46
import org.gvsig.rastertools.cutting.WriterBufferServer;
47 11893 nacho
48
import com.iver.andami.PluginServices;
49 12502 nacho
import com.iver.andami.messages.NotificationManager;
50 11900 nacho
import com.iver.andami.ui.mdiManager.IWindow;
51 11893 nacho
import com.iver.cit.gvsig.fmap.layers.FLayer;
52 11900 nacho
import com.iver.cit.gvsig.project.documents.view.gui.View;
53 11893 nacho
import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
54
import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
55
56
/**
57 11973 nacho
 * <p>
58 13024 bsanchez
 * Entrada del TOC que corresponde con la opci?n "Salvar Como" de raster. Esta se apoya
59 11973 nacho
 * en el proceso de recorte de raster para salvar datos.
60 13024 bsanchez
 * </p>
61 11960 nacho
 * <p>
62 11973 nacho
 * Cuando se abre el dialogo de "Salvar como" se cargan las extensiones soportadas en el
63 11960 nacho
 * selector. Cada tipo de datos de la fuente soporta unas extensiones de escritura u otras.
64 13024 bsanchez
 * Por ejemplo, si la capa de entrada  es FLOAT no podremos escribir a JPG2000 porque no
65 11960 nacho
 * lo soporta, tendriamos que convertila primero a RGB.
66
 * </p>
67
 * <p>
68
 * Cambiando el tipo de extensi?n en el selector cambian el panel de propiedades asociado.
69
 * El fichero de salidad se salvar? con las propiedades ajustadas.
70
 * </P>
71 11893 nacho
 * @version 30/05/2007
72
 * @author Nacho Brodin (nachobrodin@gmail.com)
73
 *
74
 */
75 11931 nacho
public class SaveAsTocMenuEntry extends AbstractTocContextMenuAction implements PropertyChangeListener {
76 11893 nacho
77 11931 nacho
        private JFileChooser chooser = null;
78 11947 nacho
        private PropertiesComponent panelProperty = null;
79 13024 bsanchez
80 11893 nacho
        /*
81
         * (non-Javadoc)
82
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getGroup()
83
         */
84
        public String getGroup() {
85 12110 nacho
                return "Save";
86 11893 nacho
        }
87
88
        /*
89
         * (non-Javadoc)
90
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getGroupOrder()
91
         */
92
        public int getGroupOrder() {
93
                return 50;
94
        }
95
96
        /*
97
         * (non-Javadoc)
98
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getOrder()
99
         */
100
        public int getOrder() {
101
                return 1;
102
        }
103
104
        /*
105
         * (non-Javadoc)
106
         * @see com.iver.cit.gvsig.project.documents.IContextMenuAction#getText()
107
         */
108
        public String getText() {
109
                return PluginServices.getText(this, "saveas");
110
        }
111 13024 bsanchez
112 11893 nacho
        /*
113
         * (non-Javadoc)
114
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#isEnabled(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
115
         */
116
        public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
117
                return selectedItems.length == 1;
118
        }
119
120
        /*
121
         * (non-Javadoc)
122
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#isVisible(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
123
         */
124
        public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
125 13024 bsanchez
                if (isTocItemBranch(item))
126 13300 nacho
                        return( getNodeLayer(item) instanceof FLyrRasterSE &&
127
                                    ((FLyrRasterSE)getNodeLayer(item)).isActionEnabled(IRasterLayerActions.SAVEAS));
128 11893 nacho
                return false;
129
        }
130
131
        /*
132
         * (non-Javadoc)
133
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#execute(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
134
         */
135
        public void execute(ITocItem item, FLayer[] selectedItems) {
136
                FLayer fLayer = null;
137 11960 nacho
                IWindow w = PluginServices.getMDIManager().getActiveWindow();
138 13024 bsanchez
139 11893 nacho
                if (selectedItems.length != 1)
140
                        return;
141
142
                fLayer = selectedItems[0];
143
144 11960 nacho
                if (!(fLayer instanceof IRasterOperations))
145 11893 nacho
                        return;
146 13024 bsanchez
147 11931 nacho
                chooser = new JFileChooser(RasterModule.getPath());
148
                chooser.addPropertyChangeListener(this);
149 11900 nacho
                chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
150 13024 bsanchez
151
                // Cargamos las extensiones en la lista
152
                ArrayList extList = new ArrayList();
153 11960 nacho
                try {
154 13024 bsanchez
                        extList = GeoRasterWriter.getExtensionsSupported(((IRasterGeoOperations) fLayer).getDataType()[0], ((IRasterGeoOperations) fLayer).getBandCount());
155 11960 nacho
                } catch (RasterDriverException e2) {
156 12502 nacho
                        RasterToolsUtil.messageBoxError("extensiones_soportadas_error", chooser);
157
                        NotificationManager.addError("Error al obtener la lista de extensiones soportadas. No se puede exportar la capa", e2);
158 11960 nacho
                }
159 13024 bsanchez
                for (int i = 0; i < extList.size(); i++)
160
                        chooser.addChoosableFileFilter(new WriterFilter((String) extList.get(i)));
161
162
                // Cargamos el panel de propiedades en el selector
163
                panelProperty = loadPanelProperties((String) extList.get(extList.size() - 1));
164 11904 nacho
                chooser.setAccessory(panelProperty);
165 13024 bsanchez
166
                if (w instanceof View) {
167
                        if (chooser.showOpenDialog(((View) w).getComponent(0)) == JFileChooser.APPROVE_OPTION) {
168
                                // Creaci?n de par?metros
169 11900 nacho
                                String tit = PluginServices.getMDIManager().getWindowInfo(w).getTitle();
170
                                WriterBufferServer dataWriter = new WriterBufferServer();
171 13024 bsanchez
                                int[] dValues = new int[] { 0, (int) ((IRasterOperations) fLayer).getPxHeight(), (int) ((IRasterOperations) fLayer).getPxWidth(), 0 };
172 13328 nacho
                                IRasterDataSource dataset = (IRasterDataSource)((IRasterDataset) fLayer).getDataSource();
173 13024 bsanchez
                                int[] drawableBands = new int[((IRasterOperations) fLayer).getBandCount()];
174
                                for (int i = 0; i < ((IRasterOperations) fLayer).getBandCount(); i++)
175 11900 nacho
                                        drawableBands[i] = i;
176 11985 nacho
                                RasterModule.setPath(chooser.getCurrentDirectory().toString());
177 11947 nacho
                                String file = chooser.getSelectedFile().toString() + chooser.getFileFilter().getDescription();
178 13024 bsanchez
                                if (!RasterToolsUtil.canWrite(chooser.getCurrentDirectory().toString(), this))
179 11947 nacho
                                        return;
180
                                Params params = null;
181
                                try {
182
                                        params = GeoRasterWriter.getWriter(file).getParams();
183
                                } catch (NotSupportedExtensionException e1) {
184 12502 nacho
                                        RasterToolsUtil.messageBoxError("no_driver_escritura", this);
185
                                        NotificationManager.addError(PluginServices.getText(this, "no_driver_escritura"), e1);
186 11947 nacho
                                } catch (RasterDriverException e1) {
187 12502 nacho
                                        RasterToolsUtil.messageBoxError("no_driver_escritura", this);
188
                                        NotificationManager.addError(PluginServices.getText(this, "no_driver_escritura"), e1);
189 11947 nacho
                                }
190 13024 bsanchez
191
                                // Lanzamiento del proceso de guardado
192
                                CuttingProcess cuttingProcess = new CuttingProcess(false, tit, dValues, file, dataWriter, dataset, dataset.getAffineTransform(), drawableBands, false, BufferInterpolation.INTERPOLATION_NearestNeighbour);
193
                                if (params != null)
194 11960 nacho
                                        RasterToolsUtil.loadWriterParamsFromPropertiesPanel(panelProperty, params);
195 11931 nacho
                                cuttingProcess.setParams(params);
196 13024 bsanchez
                                cuttingProcess.setResolution((int) ((IRasterOperations) fLayer).getPxWidth(), (int) ((IRasterOperations) fLayer).getPxHeight());
197 11900 nacho
                                IncrementableTask incrementableTask = new IncrementableTask(dataWriter);
198
                                cuttingProcess.setIncrementableTask(incrementableTask);
199
                                incrementableTask.showWindow();
200
                                cuttingProcess.start();
201
                                incrementableTask.start();
202
                        }
203
                }
204 11893 nacho
        }
205 11931 nacho
206
        /**
207 13024 bsanchez
         * Evento que se produce al cambiar el driver de escritura. Esto
208 11931 nacho
         * sustituye el panel properties por el del nuevo driver seleccionado
209
         */
210
        public void propertyChange(PropertyChangeEvent evt) {
211
                if(evt.getNewValue() instanceof WriterFilter) {
212
                        String ext = ((WriterFilter)evt.getNewValue()).getDescription();
213 11947 nacho
                        panelProperty = loadPanelProperties(ext);
214 11931 nacho
                        chooser.setAccessory(panelProperty);
215
                        chooser.revalidate();
216
                }
217
        }
218 13024 bsanchez
219 11900 nacho
        /**
220 11931 nacho
         * Obtiene el objeto PropertiesComponent para una extensi?n concreta de fichero
221
         * sobre el que se va a escribir.
222
         * @param file Fichero raster sobre el que se escribir?
223
         * @return PropertiesComponent
224
         */
225
        private PropertiesComponent loadPanelProperties(String file) {
226
                PropertiesComponent panelProperty = new PropertiesComponent();
227
                Params params = null;
228
                try {
229
                        params = GeoRasterWriter.getWriter(file).getParams();
230
                } catch (NotSupportedExtensionException e1) {
231
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), PluginServices.getText(this, "no_driver_escritura"));
232
                        return null;
233
                } catch (RasterDriverException e1) {
234
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), PluginServices.getText(this, "no_driver_escritura"));
235
                        return null;
236
                }
237
                RasterToolsUtil.loadPropertiesFromWriterParams(panelProperty, params);
238
                return panelProperty;
239
        }
240 13024 bsanchez
241 11931 nacho
        /**
242 11900 nacho
         * @author Nacho Brodin (nachobrodin@gmail.com) Filtro para el selector de
243
         *         formatos de escritura
244
         */
245
        class WriterFilter extends javax.swing.filechooser.FileFilter {
246 13024 bsanchez
                        private String filter;
247 11900 nacho
248 13024 bsanchez
                        public WriterFilter(String fil) {
249
                                        this.filter = fil;
250
                        }
251 11900 nacho
252 13024 bsanchez
                        public boolean accept(File f) {
253
                                        return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter);
254
                        }
255 11900 nacho
256 13024 bsanchez
                        public String getDescription() {
257
                                        return "." + filter;
258
                        }
259 11900 nacho
        }
260 11931 nacho
261 11893 nacho
}