Revision: 6491
          http://sourceforge.net/p/jump-pilot/code/6491
Author:   ma15569
Date:     2020-09-17 04:35:01 +0000 (Thu, 17 Sep 2020)
Log Message:
-----------
Extended save option to tif file

Modified Paths:
--------------
    core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java  
2020-09-17 04:32:14 UTC (rev 6490)
+++ core/trunk/src/org/openjump/core/ui/plugin/raster/RasterQueryDragTool.java  
2020-09-17 04:35:01 UTC (rev 6491)
@@ -34,37 +34,56 @@
 package org.openjump.core.ui.plugin.raster;
 
 import java.awt.BasicStroke;
+import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Cursor;
 import java.awt.Dialog;
 import java.awt.Dimension;
+import java.awt.FlowLayout;
 import java.awt.Image;
+import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.Window;
+import java.awt.event.ActionEvent;
 import java.awt.event.HierarchyEvent;
 import java.awt.event.HierarchyListener;
 import java.awt.geom.NoninvertibleTransformException;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.awt.image.IndexColorModel;
 import java.awt.image.Raster;
+import java.awt.image.WritableRaster;
+import java.io.File;
 import java.io.IOException;
 
 import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 import javax.swing.JTable;
 import javax.swing.SwingUtilities;
 import javax.swing.table.DefaultTableModel;
 
 import org.openjump.core.CheckOS;
+import org.openjump.core.apitools.IOTools;
+import org.openjump.core.rasterimage.RasterImageIO;
 import org.openjump.core.rasterimage.RasterImageLayer;
 import 
org.openjump.core.rasterimage.RasterImageLayer.RasterDataNotFoundException;
+import org.openjump.core.ui.io.file.FileNameExtensionFilter;
 
+import com.sun.media.jai.codecimpl.util.RasterFactory;
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.util.FileUtil;
+import com.vividsolutions.jump.workbench.JUMPWorkbench;
 import com.vividsolutions.jump.workbench.WorkbenchContext;
 import com.vividsolutions.jump.workbench.model.FenceLayerFinder;
 import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
 import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
+import com.vividsolutions.jump.workbench.ui.GUIUtil;
 import com.vividsolutions.jump.workbench.ui.JTablePanel;
 import com.vividsolutions.jump.workbench.ui.cursortool.RectangleTool;
 import com.vividsolutions.jump.workbench.ui.images.IconLoader;
@@ -185,7 +204,8 @@
         DefaultTableModel tableModel = new DefaultTableModel(data, 
columnNames);
       
         final JTablePanel jTablePanel = new JTablePanel(tableModel);
-        jTablePanel.getCommandPanel().removeAll();
+        //  jTablePanel.getCommandPanel().removeAll();
+        jTablePanel.getAllComponetsExceptTable().removeAll();
         jTablePanel.getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         jTablePanel.getTable().setTableHeader(null);
         
@@ -202,12 +222,127 @@
                        }
                }
        });
+        JPanel pan = new JPanel(new BorderLayout());
         
-        
-        jTablePanel.setPreferredSize(new Dimension(400,300));
-        
-        
-        JOptionPane.showOptionDialog(null, jTablePanel, 
I18N.get("org.openjump.core.ui.plugin.raster.RasterQueryPlugIn"), 
JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE, null, 
-                 new Object[]{}, null);
+        pan.setPreferredSize(new Dimension(400,300));
+        pan.add(jTablePanel, BorderLayout.CENTER);
+        pan.add( savePanel(jTablePanel.getTable()), BorderLayout.SOUTH);
+       
+      
+      JOptionPane.showOptionDialog(null, pan, 
I18N.get("org.openjump.core.ui.plugin.raster.RasterQueryPlugIn"), 
JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE, null, 
+                 new Object[]{}, null);
      }
+    private JPanel savePanel(JTable jTable) {
+        final JPanel save = new JPanel();
+        save.setLayout(new FlowLayout(FlowLayout.RIGHT));
+        final JButton saveButton = new JButton(
+                I18N.get("deejump.plugin.SaveLegendPlugIn.Save"));
+        saveButton.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    File file = null;
+                    final FileNameExtensionFilter filter2 = new 
FileNameExtensionFilter(
+                            "Comma-Separated Values (csv)", "csv");
+                    final FileNameExtensionFilter filter3 = new 
FileNameExtensionFilter(
+                            "Tagged Image Format", "tif");
+                    final JFileChooser fc = new 
GUIUtil.FileChooserWithOverwritePrompting();
+
+                    fc.setFileFilter(filter3);
+                    fc.setFileFilter(filter2);
+                    fc.addChoosableFileFilter(filter2);
+                    final int returnVal = fc.showSaveDialog(JUMPWorkbench
+                            .getInstance().getFrame());
+                    if (returnVal == JFileChooser.APPROVE_OPTION) {
+                       if (fc.getFileFilter().equals(filter2)) {
+                        file = new File(fc.getSelectedFile() + ".csv");
+                        FileUtil.addExtensionIfNone(file, "csv");
+                        IOTools.saveCSV(jTable, file.getAbsolutePath());
+                        saved(file);
+                        } else if (fc.getFileFilter().equals(filter3)) {
+                                file = new File(fc.getSelectedFile() + ".tif");
+                               FileUtil.addExtensionIfNone(file, "tif");
+                               
+                               Envelope envWanted = 
getRectangle().getEnvelopeInternal();
+                                Rectangle subset = 
rLayer.getRectangleFromEnvelope(envWanted);
+                                Raster raster = rLayer.getRasterData(subset);
+                         if (rLayer.getImage().getColorModel() instanceof 
IndexColorModel) {
+                                 IndexColorModel indexColorModel = 
(IndexColorModel) rLayer
+                                         .getImage().getColorModel();
+                                 DataBuffer dataBufferIn = 
raster.getDataBuffer();
+                                 DataBufferByte dataBufferOut = new 
DataBufferByte(subset.width
+                                         * subset.height * 3, 3);
+                                 int index = 0;
+                                 int nCells = subset.height * subset.width;
+                                 for (int r = 0; r < subset.height; r++) {
+                                     for (int c = 0; c < subset.width; c++) {
+                                         int value = 
dataBufferIn.getElem(index);
+                                         dataBufferOut.setElem(0, index,
+                                                 
indexColorModel.getRed(value));
+                                         dataBufferOut.setElem(1, index + 
nCells,
+                                                 
indexColorModel.getGreen(value));
+                                         dataBufferOut.setElem(2, index + 
nCells * 2,
+                                                 
indexColorModel.getBlue(value));
+                                         index++;
+                                     }
+                                 }
+
+                                 int[] bankIndices = new int[3];
+                                 bankIndices[0] = 0;
+                                 bankIndices[1] = 1;
+                                 bankIndices[2] = 2;
+
+                                 int[] bandOffsets = new int[3];
+                                 bandOffsets[0] = 0;
+                                 bandOffsets[1] = raster.getWidth() * 
raster.getHeight();
+                                 bandOffsets[2] = 2 * raster.getWidth() * 
raster.getHeight();
+
+                                 WritableRaster wRaster = 
RasterFactory.createBandedRaster(
+                                         dataBufferOut, raster.getWidth(), 
raster.getHeight(),
+                                         raster.getWidth(), bankIndices, 
bandOffsets,
+                                         new Point(0, 0));
+                                 raster = wRaster;
+                             }
+
+                             RasterImageIO rasterImageIO = new RasterImageIO();
+
+                             rasterImageIO.writeImage(file , raster, envWanted,
+                                     rasterImageIO.new 
CellSizeXY(rLayer.getMetadata()
+                                             .getOriginalCellSize(), 
rLayer.getMetadata()
+                                             .getOriginalCellSize()), 
rLayer.getMetadata()
+                                             .getNoDataValue());
+                        
+                             saved(file);
+                       
+                        }
+
+                    }
+
+                } catch (final Exception ex) {
+                    notsaved();
+                }
+
+            }
+        });
+        save.add(saveButton);
+        return save;
+    }
+    
+    protected void saved(File file) {
+        JUMPWorkbench.getInstance().getFrame()
+                .setStatusMessage(sSaved + " :" + file.getAbsolutePath());
+    }
+
+    protected void notsaved() {
+        JUMPWorkbench.getInstance().getFrame().warnUser(SCouldNotSave);
+
+    }
+    
+ 
+    
+    private final String sSaved = I18N
+            
.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved");
+    private final String SCouldNotSave = I18N
+            
.get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Could-not-save-selected-result");
+
 }
\ No newline at end of file



_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to