root / trunk / extensions / extRemoteSensing / src / org / gvsig / remotesensing / decisiontrees / gui / listener / DecisionTreePanelListener.java @ 20872
History | View | Annotate | Download (22.2 KB)
1 | 17088 | gsdiego | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2006 Instituto de Desarrollo Regional 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 | * For more information, contact:
|
||
20 | *
|
||
21 | * Generalitat Valenciana
|
||
22 | * Conselleria d'Infraestructures i Transport
|
||
23 | * Av. Blasco Iba?ez, 50
|
||
24 | * 46010 VALENCIA
|
||
25 | * SPAIN
|
||
26 | *
|
||
27 | * +34 963862235
|
||
28 | * gvsig@gva.es
|
||
29 | * www.gvsig.gva.es
|
||
30 | *
|
||
31 | * or
|
||
32 | *
|
||
33 | * Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
|
||
34 | * Campus Universitario s/n
|
||
35 | * 02071 Alabacete
|
||
36 | * Spain
|
||
37 | *
|
||
38 | * +34 967 599 200
|
||
39 | */
|
||
40 | 16928 | gsdiego | package org.gvsig.remotesensing.decisiontrees.gui.listener; |
41 | |||
42 | 17773 | dguerrero | import java.awt.Color; |
43 | 20339 | dguerrero | import java.awt.Component; |
44 | 16928 | gsdiego | import java.awt.event.ActionEvent; |
45 | import java.awt.event.ActionListener; |
||
46 | 17255 | gsdiego | import java.awt.event.MouseEvent; |
47 | import java.awt.event.MouseListener; |
||
48 | 17757 | dguerrero | import java.io.File; |
49 | 20339 | dguerrero | import java.io.FileNotFoundException; |
50 | import java.io.FileReader; |
||
51 | import java.io.FileWriter; |
||
52 | import java.io.IOException; |
||
53 | 17773 | dguerrero | import java.util.ArrayList; |
54 | 17757 | dguerrero | import java.util.HashMap; |
55 | import java.util.Iterator; |
||
56 | 16928 | gsdiego | |
57 | 17757 | dguerrero | import javax.swing.JFileChooser; |
58 | 20339 | dguerrero | import javax.swing.JOptionPane; |
59 | import javax.swing.filechooser.FileFilter; |
||
60 | 17757 | dguerrero | |
61 | 20339 | dguerrero | import org.exolab.castor.xml.MarshalException; |
62 | import org.exolab.castor.xml.Marshaller; |
||
63 | import org.exolab.castor.xml.ValidationException; |
||
64 | 17757 | dguerrero | import org.gvsig.fmap.raster.layers.FLyrRasterSE; |
65 | 17255 | gsdiego | import org.gvsig.gui.beans.buttonspanel.ButtonsPanel; |
66 | 16928 | gsdiego | import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent; |
67 | import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener; |
||
68 | 18540 | nbrodin | import org.gvsig.raster.IProcessActions; |
69 | 20772 | dguerrero | import org.gvsig.raster.RasterLibrary; |
70 | 18540 | nbrodin | import org.gvsig.raster.RasterProcess; |
71 | 17757 | dguerrero | import org.gvsig.raster.buffer.BufferFactory; |
72 | import org.gvsig.raster.buffer.RasterBuffer; |
||
73 | import org.gvsig.raster.dataset.GeoRasterWriter; |
||
74 | import org.gvsig.raster.dataset.InvalidSetViewException; |
||
75 | import org.gvsig.raster.dataset.io.RasterDriverException; |
||
76 | 17773 | dguerrero | import org.gvsig.raster.datastruct.ColorItem; |
77 | import org.gvsig.raster.grid.filter.FilterTypeException; |
||
78 | 20772 | dguerrero | import org.gvsig.raster.util.ExtendedFileFilter; |
79 | 17773 | dguerrero | import org.gvsig.raster.util.RasterNotLoadException; |
80 | 17757 | dguerrero | import org.gvsig.raster.util.RasterToolsUtil; |
81 | 17773 | dguerrero | import org.gvsig.remotesensing.RemoteSensingUtils; |
82 | 17208 | gsdiego | import org.gvsig.remotesensing.decisiontrees.DecisionTreeNode; |
83 | 20393 | dguerrero | import org.gvsig.remotesensing.decisiontrees.DecisionTreeProcess; |
84 | 17517 | gsdiego | import org.gvsig.remotesensing.decisiontrees.gui.ClassEditorDialog; |
85 | 17208 | gsdiego | import org.gvsig.remotesensing.decisiontrees.gui.DecisionTreePanel; |
86 | 17255 | gsdiego | import org.gvsig.remotesensing.decisiontrees.gui.ExpressionEditorDialog; |
87 | 20393 | dguerrero | import org.gvsig.remotesensing.gridmath.NoAssignedVarsException; |
88 | 17757 | dguerrero | import org.gvsig.remotesensing.gui.beans.OptionsPanel; |
89 | 17208 | gsdiego | import org.jgraph.graph.DefaultGraphCell; |
90 | 20393 | dguerrero | import org.nfunk.jep.Variable; |
91 | 16928 | gsdiego | |
92 | 17255 | gsdiego | import com.iver.andami.PluginServices; |
93 | 17757 | dguerrero | import com.iver.andami.Utilities; |
94 | import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard; |
||
95 | import com.iver.cit.gvsig.fmap.layers.FLayer; |
||
96 | import com.iver.cit.gvsig.fmap.layers.FLayers; |
||
97 | 20339 | dguerrero | import com.iver.utiles.XMLEntity; |
98 | import com.iver.utiles.xmlEntity.generate.XmlTag; |
||
99 | 17255 | gsdiego | |
100 | 17088 | gsdiego | /**
|
101 | 17255 | gsdiego | * Listener del panel de ?rboles de decisi?n.
|
102 | 17088 | gsdiego | *
|
103 | * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
|
||
104 | *
|
||
105 | */
|
||
106 | 17773 | dguerrero | public class DecisionTreePanelListener implements ButtonsPanelListener, ActionListener, MouseListener, IProcessActions { |
107 | 17208 | gsdiego | |
108 | DecisionTreePanel decisionTreePanel = null;
|
||
109 | 16928 | gsdiego | |
110 | 17208 | gsdiego | public DecisionTreePanelListener(DecisionTreePanel decisionTreePanel) {
|
111 | this.decisionTreePanel = decisionTreePanel;
|
||
112 | } |
||
113 | |||
114 | 16928 | gsdiego | public void actionPerformed(ActionEvent e) { |
115 | 17208 | gsdiego | if (e.getSource()==decisionTreePanel.getAddMenuItem()){
|
116 | DefaultGraphCell cell = decisionTreePanel.getSelectedCell(); |
||
117 | 17757 | dguerrero | DecisionTreeNode node = (DecisionTreeNode)cell.getUserObject(); |
118 | int classId = node.getClassID();
|
||
119 | 20339 | dguerrero | node.setChildren(); |
120 | 17757 | dguerrero | node.getLeftChild().setClassID(classId); |
121 | node.getRightChild().setClassID(decisionTreePanel.generateClassId()); |
||
122 | 17208 | gsdiego | decisionTreePanel.reloadGraph(); |
123 | } |
||
124 | 17773 | dguerrero | |
125 | 17208 | gsdiego | else if (e.getSource()==decisionTreePanel.getDeleteMenuItem()){ |
126 | DefaultGraphCell cell = decisionTreePanel.getSelectedCell(); |
||
127 | 17773 | dguerrero | DecisionTreeNode node = (DecisionTreeNode)cell.getUserObject(); |
128 | 17208 | gsdiego | if(cell!=decisionTreePanel.getJGraph().getRoots()[0]){ |
129 | 17773 | dguerrero | node.deleteChildren(); |
130 | 17757 | dguerrero | decisionTreePanel.cleanClassColors(); |
131 | 17773 | dguerrero | node.setClassID(decisionTreePanel.generateClassId()); |
132 | 17208 | gsdiego | decisionTreePanel.reloadGraph(); |
133 | } |
||
134 | } |
||
135 | 17773 | dguerrero | |
136 | 17517 | gsdiego | else if (e.getSource()==decisionTreePanel.getExecuteMenuItem()){ |
137 | DefaultGraphCell cell = decisionTreePanel.getSelectedCell(); |
||
138 | DecisionTreeNode node = (DecisionTreeNode)cell.getUserObject(); |
||
139 | 17757 | dguerrero | executeTree(node); |
140 | 17517 | gsdiego | } |
141 | 20339 | dguerrero | |
142 | else if (e.getSource()==decisionTreePanel.getCloseMenuItem()){ |
||
143 | close(); |
||
144 | } |
||
145 | |||
146 | else if (e.getSource()==decisionTreePanel.getSaveMenuItem()){ |
||
147 | JFileChooser openFileChooser;
|
||
148 | openFileChooser = new JFileChooser(); |
||
149 | openFileChooser.setEnabled(false);
|
||
150 | openFileChooser.addChoosableFileFilter(new TreeFileFilter());
|
||
151 | int returnVal = openFileChooser.showSaveDialog(decisionTreePanel);
|
||
152 | if (returnVal == JFileChooser.APPROVE_OPTION) { |
||
153 | String fileName = openFileChooser.getSelectedFile().toString();
|
||
154 | if (!fileName.endsWith(".tree")){ |
||
155 | fileName = fileName + ".tree";
|
||
156 | } |
||
157 | File file = new File(fileName); |
||
158 | if (file.exists()){
|
||
159 | int resp = JOptionPane.showConfirmDialog( |
||
160 | (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"), |
||
161 | PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION); |
||
162 | if (resp != JOptionPane.YES_OPTION) { |
||
163 | return;
|
||
164 | } |
||
165 | } |
||
166 | FileWriter writer;
|
||
167 | try {
|
||
168 | writer = new FileWriter(fileName); |
||
169 | Marshaller m = new Marshaller(writer);
|
||
170 | m.setEncoding("ISO-8859-1");
|
||
171 | m.marshal(decisionTreePanel.getDecisionTree().getXMLEntity().getXmlTag()); |
||
172 | } catch (IOException e1) { |
||
173 | // TODO Auto-generated catch block
|
||
174 | e1.printStackTrace(); |
||
175 | } catch (MarshalException e1) { |
||
176 | // TODO Auto-generated catch block
|
||
177 | e1.printStackTrace(); |
||
178 | } catch (ValidationException e2) {
|
||
179 | // TODO Auto-generated catch block
|
||
180 | e2.printStackTrace(); |
||
181 | } |
||
182 | } |
||
183 | } |
||
184 | |||
185 | else if (e.getSource()==decisionTreePanel.getLoadMenuItem()){ |
||
186 | JFileChooser openFileChooser;
|
||
187 | openFileChooser = new JFileChooser(); |
||
188 | openFileChooser.setEnabled(false);
|
||
189 | openFileChooser.addChoosableFileFilter(new TreeFileFilter());
|
||
190 | int returnVal = openFileChooser.showOpenDialog(decisionTreePanel);
|
||
191 | if (returnVal == JFileChooser.APPROVE_OPTION) { |
||
192 | File inFile = openFileChooser.getSelectedFile();
|
||
193 | try {
|
||
194 | FileReader fileReader = new FileReader(inFile); |
||
195 | XmlTag xmlTag = (XmlTag) XmlTag.unmarshal(fileReader); |
||
196 | XMLEntity xmlDecisionTree = new XMLEntity(xmlTag);
|
||
197 | decisionTreePanel.getDecisionTree().setXMLEntity(xmlDecisionTree); |
||
198 | decisionTreePanel.reloadGraph(); |
||
199 | } catch (FileNotFoundException e2) { |
||
200 | // TODO Auto-generated catch block
|
||
201 | e2.printStackTrace(); |
||
202 | } catch (MarshalException e1) { |
||
203 | // TODO Auto-generated catch block
|
||
204 | e1.printStackTrace(); |
||
205 | } catch (ValidationException e3) {
|
||
206 | // TODO Auto-generated catch block
|
||
207 | e3.printStackTrace(); |
||
208 | } |
||
209 | } |
||
210 | } |
||
211 | |||
212 | else if (e.getSource()==decisionTreePanel.getImportMenuItem()){ |
||
213 | |||
214 | } |
||
215 | |||
216 | else if (e.getSource()==decisionTreePanel.getExportMenuItem()){ |
||
217 | |||
218 | } |
||
219 | 16928 | gsdiego | } |
220 | |||
221 | public void actionButtonPressed(ButtonsPanelEvent e) { |
||
222 | 17255 | gsdiego | // Al pulsar Aceptar o Aplicar se ejecuta el aceptar del panel
|
223 | 17757 | dguerrero | if (e.getButton() == ButtonsPanel.BUTTON_APPLY) {
|
224 | 20339 | dguerrero | executeTree(decisionTreePanel.getDecisionTree().getRoot()); |
225 | 17255 | gsdiego | } |
226 | |||
227 | // Al pulsar Cancelar la ventana se cierra y se refresca la vista
|
||
228 | 17757 | dguerrero | if (e.getButton() == ButtonsPanel.BUTTON_CLOSE) {
|
229 | 17255 | gsdiego | close(); |
230 | } |
||
231 | } |
||
232 | |||
233 | private void close() { |
||
234 | 17757 | dguerrero | try {
|
235 | PluginServices.getMDIManager().closeWindow(decisionTreePanel.getDecisionTreeDialog()); |
||
236 | } catch (ArrayIndexOutOfBoundsException e) { |
||
237 | //Si la ventana no se puede eliminar no hacemos nada
|
||
238 | } |
||
239 | 16928 | gsdiego | |
240 | } |
||
241 | 17255 | gsdiego | |
242 | public void mouseClicked(MouseEvent e) { |
||
243 | // TODO Auto-generated method stub
|
||
244 | |||
245 | } |
||
246 | |||
247 | public void mouseEntered(MouseEvent e) { |
||
248 | // TODO Auto-generated method stub
|
||
249 | |||
250 | } |
||
251 | |||
252 | public void mouseExited(MouseEvent e) { |
||
253 | // TODO Auto-generated method stub
|
||
254 | |||
255 | } |
||
256 | |||
257 | public void mousePressed(MouseEvent e) { |
||
258 | if (e.getButton() == MouseEvent.BUTTON3){ |
||
259 | showPopupMenu(e); |
||
260 | } |
||
261 | if (e.getClickCount() == 2) { |
||
262 | editCell(e); |
||
263 | } |
||
264 | } |
||
265 | |||
266 | public void mouseReleased(MouseEvent e) { |
||
267 | // TODO Auto-generated method stub
|
||
268 | |||
269 | } |
||
270 | |||
271 | private void editCell(MouseEvent e) { |
||
272 | int x = e.getX();
|
||
273 | int y = e.getY();
|
||
274 | DefaultGraphCell cell = (DefaultGraphCell) decisionTreePanel.getJGraph().getFirstCellForLocation(x, y); |
||
275 | if (cell!=null){ |
||
276 | 17517 | gsdiego | decisionTreePanel.setSelectedCell(cell); |
277 | 17255 | gsdiego | Object userObject = cell.getUserObject();
|
278 | if(userObject instanceof DecisionTreeNode){ |
||
279 | DecisionTreeNode node = (DecisionTreeNode)userObject; |
||
280 | |||
281 | 17773 | dguerrero | if(!node.isFinal()){
|
282 | 17517 | gsdiego | ExpressionEditorDialog expressionEditorDialog = new ExpressionEditorDialog(600,250,decisionTreePanel); |
283 | 20339 | dguerrero | expressionEditorDialog.getExpressionEditorPanel().getCalculatorPanel().setPersistentVarTable( |
284 | decisionTreePanel.getDecisionTree().getVariablesTable()); |
||
285 | 17517 | gsdiego | PluginServices.getMDIManager().addWindow(expressionEditorDialog); |
286 | } |
||
287 | else{
|
||
288 | 17773 | dguerrero | ClassEditorDialog classEditorDialog = new ClassEditorDialog(250,100,decisionTreePanel); |
289 | 17517 | gsdiego | PluginServices.getMDIManager().addWindow(classEditorDialog); |
290 | } |
||
291 | 17257 | gsdiego | decisionTreePanel.reloadGraph(); |
292 | 17255 | gsdiego | } |
293 | } |
||
294 | } |
||
295 | |||
296 | private void showPopupMenu(MouseEvent e) { |
||
297 | int x = e.getX();
|
||
298 | int y = e.getY();
|
||
299 | DefaultGraphCell cell = (DefaultGraphCell) decisionTreePanel.getJGraph().getFirstCellForLocation(x, y); |
||
300 | if (cell != null){ |
||
301 | if(cell.getUserObject() instanceof DecisionTreeNode){ |
||
302 | decisionTreePanel.getDeleteMenuItem().setVisible(true);
|
||
303 | decisionTreePanel.getAddMenuItem().setVisible(true);
|
||
304 | 17517 | gsdiego | decisionTreePanel.getExecuteMenuItem().setVisible(true);
|
305 | 17255 | gsdiego | if(cell == decisionTreePanel.getJGraph().getRoots()[0]) |
306 | decisionTreePanel.getDeleteMenuItem().setVisible(false);
|
||
307 | 17773 | dguerrero | if(!((DecisionTreeNode)cell.getUserObject()).isFinal())
|
308 | 17255 | gsdiego | decisionTreePanel.getAddMenuItem().setVisible(false);
|
309 | 17517 | gsdiego | else{
|
310 | decisionTreePanel.getDeleteMenuItem().setVisible(false);
|
||
311 | decisionTreePanel.getExecuteMenuItem().setVisible(false);
|
||
312 | } |
||
313 | 17255 | gsdiego | decisionTreePanel.setSelectedCell(cell); |
314 | decisionTreePanel.getJPopupMenu().show(e.getComponent(), x, y); |
||
315 | } |
||
316 | } |
||
317 | } |
||
318 | 17757 | dguerrero | |
319 | /**
|
||
320 | * Ejecuta el ?rbol desde el nodo indicado.
|
||
321 | *
|
||
322 | * @param root Nodo que se considera raiz en la ejecuci?n de ?rbol.
|
||
323 | */
|
||
324 | private void executeTree(DecisionTreeNode root){ |
||
325 | //Comprobar que todas laa variables est?n asignadas:
|
||
326 | boolean allVarsAsigned = true; |
||
327 | 20339 | dguerrero | for (Iterator iter = decisionTreePanel.getDecisionTree().getVariablesTable().keySet().iterator(); iter.hasNext();) { |
328 | 17757 | dguerrero | String varName = (String) iter.next(); |
329 | 20339 | dguerrero | String layerName = (String) decisionTreePanel.getDecisionTree().getVariablesTable().get(varName); |
330 | 17757 | dguerrero | if (layerName==null || layerName.equals("")){ |
331 | allVarsAsigned = false;
|
||
332 | break;
|
||
333 | } |
||
334 | } |
||
335 | |||
336 | if (allVarsAsigned){
|
||
337 | if (!root.hasError()){
|
||
338 | |||
339 | int nBand;
|
||
340 | String layerBand;
|
||
341 | String layerName;
|
||
342 | FLyrRasterSE rasterLayer; |
||
343 | |||
344 | String path = getFileSelected();
|
||
345 | if (path == null) |
||
346 | return;
|
||
347 | FLayers layers = decisionTreePanel.getView().getModel().getMapContext().getLayers(); |
||
348 | // Extent de salida personalizado.
|
||
349 | OptionsPanel outputOptionsPanel = decisionTreePanel.getOutputOptionsPanel(); |
||
350 | if (outputOptionsPanel.getRButtom2().isSelected()){
|
||
351 | try{
|
||
352 | outputOptionsPanel.getOutputExtent().setXRange(Double.parseDouble(outputOptionsPanel.getJTextRangoX1().getText()),Double.parseDouble(outputOptionsPanel.getJTextRangoX2().getText())); |
||
353 | outputOptionsPanel.getOutputExtent().setYRange(Double.parseDouble(outputOptionsPanel.getJTextRangoY1().getText()), Double.parseDouble(outputOptionsPanel.getJTextRangoY2().getText())); |
||
354 | 20827 | dguerrero | outputOptionsPanel.getOutputExtent().setCellSizeX(Double.parseDouble(outputOptionsPanel.getJTextCellSizeX().getText()));
|
355 | 20872 | dguerrero | outputOptionsPanel.getOutputExtent().setCellSizeY(Double.parseDouble(outputOptionsPanel.getJTextCellSizeY().getText()));
|
356 | 17757 | dguerrero | }catch (NumberFormatException e) { |
357 | RasterToolsUtil.messageBoxError(PluginServices.getText(this, "invalid_number"), this); |
||
358 | return;
|
||
359 | } |
||
360 | } |
||
361 | // Extent de salida a partir de una capa.
|
||
362 | else if(outputOptionsPanel.getRButtom4().isSelected()){ |
||
363 | try {
|
||
364 | FLayer layer = layers.getLayer(outputOptionsPanel.getJComboCapas().getSelectedIndex()); |
||
365 | outputOptionsPanel.getOutputExtent().setXRange(layer.getFullExtent().getMinX(), |
||
366 | layer.getFullExtent().getMaxX()); |
||
367 | outputOptionsPanel.getOutputExtent().setYRange(layer.getFullExtent().getMinY(), |
||
368 | layer.getFullExtent().getMaxY()); |
||
369 | 20827 | dguerrero | outputOptionsPanel.getOutputExtent().setCellSizeX(Double.parseDouble(outputOptionsPanel.getJTextCellSizeX().getText()));
|
370 | outputOptionsPanel.getOutputExtent().setCellSizeY(Double.parseDouble(outputOptionsPanel.getJTextCellSizeY().getText()));
|
||
371 | 17757 | dguerrero | outputOptionsPanel.extentHasChanged(); |
372 | } catch (Exception ex) { |
||
373 | ex.printStackTrace(); |
||
374 | } |
||
375 | } |
||
376 | |||
377 | // Crear un HashMap con los rasterbuffers de entrada indexados por el nombre de variable.
|
||
378 | RasterBuffer valor=null;
|
||
379 | HashMap buffers = new HashMap(); |
||
380 | 20339 | dguerrero | for (Iterator iter = decisionTreePanel.getDecisionTree().getVariablesTable().keySet().iterator(); iter.hasNext();) { |
381 | 17757 | dguerrero | String varName = (String) iter.next(); |
382 | |||
383 | 20339 | dguerrero | layerBand = (String)decisionTreePanel.getDecisionTree().getVariablesTable().get(varName);
|
384 | 17757 | dguerrero | layerName = layerBand.substring(0,layerBand.indexOf("[")); |
385 | nBand = Integer.valueOf(layerBand.substring(layerBand.lastIndexOf("Band")+4,layerBand.lastIndexOf("]"))).intValue(); |
||
386 | rasterLayer = (FLyrRasterSE)layers.getLayer(layerName); |
||
387 | BufferFactory bufferFactory= rasterLayer.getBufferFactory(); |
||
388 | |||
389 | double minX=0,minY=0,maxX=0,maxY=0; |
||
390 | minX= outputOptionsPanel.getOutputExtent().getMin().getX(); |
||
391 | minY= outputOptionsPanel.getOutputExtent().getMin().getY(); |
||
392 | maxX= outputOptionsPanel.getOutputExtent().getMax().getX(); |
||
393 | maxY =outputOptionsPanel.getOutputExtent().getMax().getY(); |
||
394 | |||
395 | try {
|
||
396 | bufferFactory.setAdjustToExtent(false);
|
||
397 | bufferFactory.setDrawableBands(new int[]{nBand-1}); |
||
398 | bufferFactory.setAreaOfInterest(minX,minY,maxX,maxY,outputOptionsPanel.getOutputExtent().getNX(), |
||
399 | outputOptionsPanel.getOutputExtent().getNY()); |
||
400 | valor=(RasterBuffer) bufferFactory.getRasterBuf(); |
||
401 | |||
402 | } catch (ArrayIndexOutOfBoundsException e) { |
||
403 | RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer"), this, e); |
||
404 | } catch (InvalidSetViewException e) {
|
||
405 | e.printStackTrace(); |
||
406 | } catch (InterruptedException e) { |
||
407 | Thread.currentThread().interrupt();
|
||
408 | } catch (RasterDriverException e) {
|
||
409 | e.printStackTrace(); |
||
410 | } |
||
411 | |||
412 | buffers.put(varName,new Object[]{valor,new Integer(valor.getDataType())}); |
||
413 | } |
||
414 | //Ejecutar el proceso:
|
||
415 | 17773 | dguerrero | /*
|
416 | 17757 | dguerrero | String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
|
417 | DecisionTreeProcess decisionTreeProcess = new DecisionTreeProcess(root, buffers, outputOptionsPanel.getOutputExtent(),
|
||
418 | viewName, path);
|
||
419 | IncrementableTask incrementableTask = new IncrementableTask(decisionTreeProcess);
|
||
420 | decisionTreeProcess.setIncrementableTask(incrementableTask);
|
||
421 | incrementableTask.showWindow();
|
||
422 | decisionTreeProcess.start();
|
||
423 | 17773 | dguerrero | incrementableTask.start();
|
424 | */
|
||
425 | |||
426 | //*********************************
|
||
427 | String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
|
||
428 | |||
429 | 20393 | dguerrero | //Comprobar que est?n todas las variables asignadas
|
430 | for (Iterator iter = root.getParser().getSymbolTable().values().iterator(); iter.hasNext();) { |
||
431 | Variable variable = (Variable) iter.next(); |
||
432 | if (!buffers.containsKey(variable.getName())){
|
||
433 | RasterToolsUtil.messageBoxError(PluginServices.getText(this,"variables_sin_asignar"),this); |
||
434 | return;
|
||
435 | } |
||
436 | } |
||
437 | |||
438 | RasterProcess decisionTreeProcess = new DecisionTreeProcess();
|
||
439 | 17773 | dguerrero | decisionTreeProcess.setActions(this);
|
440 | decisionTreeProcess.addParam("tree", root);
|
||
441 | decisionTreeProcess.addParam("varsTable", buffers);
|
||
442 | decisionTreeProcess.addParam("viewName", viewName);
|
||
443 | decisionTreeProcess.addParam("filename", path);
|
||
444 | decisionTreeProcess.addParam("resultExtent", outputOptionsPanel.getOutputExtent());
|
||
445 | |||
446 | decisionTreeProcess.start(); |
||
447 | 20393 | dguerrero | }else{
|
448 | RasterToolsUtil.messageBoxError(PluginServices.getText(this, "bad_expresion_in_tree"), this); |
||
449 | 17757 | dguerrero | } |
450 | } |
||
451 | 20772 | dguerrero | } |
452 | |||
453 | /**
|
||
454 | * Devuelve la ruta del fichero donde se va a guardar, en caso de guardarse
|
||
455 | * en memoria, calcula el nombre sin preguntar y devuelve la ruta.
|
||
456 | * @return string con la ruta de salida
|
||
457 | */
|
||
458 | public String getFileSelected() { |
||
459 | String path = ""; |
||
460 | if (decisionTreePanel.getOutputOptionsPanel().getRadioFile().isSelected()) {
|
||
461 | JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath()); |
||
462 | chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero")); |
||
463 | //A?adimos las extensiones que hayan sido registradas en el driver
|
||
464 | String[] extList = GeoRasterWriter.getDriversExtensions(); |
||
465 | for(int i=0;i<extList.length;i++) |
||
466 | chooser.addChoosableFileFilter(new ExtendedFileFilter(extList[i]));
|
||
467 | |||
468 | if (chooser.showOpenDialog(decisionTreePanel.getOutputOptionsPanel()) != JFileChooser.APPROVE_OPTION) |
||
469 | return null; |
||
470 | |||
471 | FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator))); |
||
472 | ExtendedFileFilter fileFilter = (ExtendedFileFilter) chooser.getFileFilter(); |
||
473 | path = fileFilter.getNormalizedFilename(chooser.getSelectedFile()); |
||
474 | } else {
|
||
475 | String file = decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText();
|
||
476 | path = Utilities.createTempDirectory() + File.separator + decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText() + ".tif"; |
||
477 | if(file.compareTo(RasterLibrary.getOnlyLayerName()) == 0) |
||
478 | RasterLibrary.usesOnlyLayerName(); |
||
479 | decisionTreePanel.getOutputOptionsPanel().updateNewLayerText(); |
||
480 | } |
||
481 | 17757 | dguerrero | |
482 | 20772 | dguerrero | return path;
|
483 | 17757 | dguerrero | } |
484 | 20772 | dguerrero | |
485 | 17757 | dguerrero | /**
|
486 | * @return string con el path del fichero de salida
|
||
487 | */
|
||
488 | 20772 | dguerrero | /* public String getFileSelected() {
|
489 | 17757 | dguerrero | String path = "";
|
490 | if (decisionTreePanel.getOutputOptionsPanel().getRadioFile().isSelected()) {
|
||
491 | JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath());
|
||
492 | chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
|
||
493 | |||
494 | //A?adimos las extensiones que hayan sido registradas en el driver
|
||
495 | String[] extList = GeoRasterWriter.getDriversExtensions();
|
||
496 | for(int i=0;i<extList.length;i++)
|
||
497 | chooser.addChoosableFileFilter(new WriterFilter(extList[i]));
|
||
498 | |||
499 | if (chooser.showOpenDialog(decisionTreePanel) != JFileChooser.APPROVE_OPTION)
|
||
500 | return null;
|
||
501 | |||
502 | String fName = chooser.getSelectedFile().toString();
|
||
503 | String ext = ((WriterFilter)chooser.getFileFilter()).getDescription();
|
||
504 | |||
505 | ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length());
|
||
506 | |||
507 | if ((fName != null) && !fName.equals(""))
|
||
508 | if (!fName.endsWith("." + ext))
|
||
509 | fName = fName + "." + ext;
|
||
510 | |||
511 | FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
|
||
512 | path = fName;
|
||
513 | } else {
|
||
514 | path = Utilities.createTempDirectory() + File.separator + decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText() + ".tif";
|
||
515 | 17847 | amunoz | decisionTreePanel.getOutputOptionsPanel().updateNewLayerText();
|
516 | 17757 | dguerrero | }
|
517 | return path;
|
||
518 | 20772 | dguerrero | }*/
|
519 | 17773 | dguerrero | |
520 | public void end(Object fileName) { |
||
521 | String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
|
||
522 | try {
|
||
523 | FLayer lyr = RasterToolsUtil.loadLayer(viewName,(String)fileName,null); |
||
524 | /*
|
||
525 | * Asignar la leyenda a la nueva capa:
|
||
526 | */
|
||
527 | ArrayList colorItems = new ArrayList(); |
||
528 | ColorItem colorItem = null;
|
||
529 | 20339 | dguerrero | HashMap classColors = decisionTreePanel.getDecisionTree().getColorTable();
|
530 | 17773 | dguerrero | for (Iterator iter = classColors.keySet().iterator(); iter.hasNext();) { |
531 | Integer classId = (Integer) iter.next(); |
||
532 | colorItem = new ColorItem();
|
||
533 | colorItem.setColor((Color)classColors.get(classId));
|
||
534 | colorItem.setNameClass("Class "+classId.toString());
|
||
535 | colorItem.setValue(classId.intValue()); |
||
536 | colorItems.add(colorItem); |
||
537 | } |
||
538 | |||
539 | RemoteSensingUtils.setLeyend(lyr, colorItems); |
||
540 | |||
541 | } catch (RasterNotLoadException e) {
|
||
542 | RasterToolsUtil.messageBoxError("error_load_layer", this, e); |
||
543 | } catch (FilterTypeException e) {
|
||
544 | RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_leyend"), this, e); |
||
545 | } |
||
546 | } |
||
547 | |||
548 | |||
549 | public void interrupted() { |
||
550 | } |
||
551 | 16928 | gsdiego | } |
552 | 17757 | dguerrero | |
553 | /**
|
||
554 | * @author Nacho Brodin <brodin_ign@gva.es>
|
||
555 | * Filtro para el selector de formatos de escritura
|
||
556 | */
|
||
557 | class WriterFilter extends javax.swing.filechooser.FileFilter { |
||
558 | private String filter; |
||
559 | |||
560 | public WriterFilter(String fil) { |
||
561 | this.filter = fil;
|
||
562 | } |
||
563 | |||
564 | public boolean accept(File f) { |
||
565 | return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter); |
||
566 | } |
||
567 | |||
568 | public String getDescription() { |
||
569 | return "." + filter; |
||
570 | } |
||
571 | } |
||
572 | 20339 | dguerrero | |
573 | /**
|
||
574 | * Filtro para el selector de expresiones matem?ticas.
|
||
575 | * @author Alejandro Mu?oz (alejandro.munoz@uclm.es)
|
||
576 | *
|
||
577 | */
|
||
578 | class TreeFileFilter extends FileFilter { |
||
579 | |||
580 | final static String exp = "tree"; |
||
581 | public boolean accept(File f) { |
||
582 | if (f.isDirectory()) {
|
||
583 | return true; |
||
584 | } |
||
585 | String s = f.getName();
|
||
586 | int i = s.lastIndexOf('.'); |
||
587 | |||
588 | if (i > 0 && i < s.length() - 1) { |
||
589 | String extension = s.substring(i+1).toLowerCase(); |
||
590 | if (exp.equals(extension)){
|
||
591 | return true; |
||
592 | } else {
|
||
593 | return false; |
||
594 | } |
||
595 | } |
||
596 | return false; |
||
597 | } |
||
598 | |||
599 | public String getDescription() { |
||
600 | return "Archivos .tree"; |
||
601 | } |
||
602 | |||
603 | } |