Revision: 5698
          http://sourceforge.net/p/jump-pilot/code/5698
Author:   ma15569
Date:     2018-01-30 17:05:15 +0000 (Tue, 30 Jan 2018)
Log Message:
-----------
Reactivated SextanteAdditionalResult on the code. Fix export output raster 
problem

Modified Paths:
--------------
    
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/core/OpenJUMPRasterLayer.java
    
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/extensions/SextanteExtension.java

Modified: 
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/core/OpenJUMPRasterLayer.java
===================================================================
--- 
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/core/OpenJUMPRasterLayer.java
 2018-01-29 12:20:25 UTC (rev 5697)
+++ 
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/core/OpenJUMPRasterLayer.java
 2018-01-30 17:05:15 UTC (rev 5698)
@@ -3,10 +3,10 @@
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
-import java.awt.image.DataBuffer;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
 import java.io.BufferedWriter;
+import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -16,11 +16,23 @@
 
 import javax.media.jai.PlanarImage;
 import javax.media.jai.RasterFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
 
 import org.openjump.core.rasterimage.GeoTiffConstants;
 import org.openjump.core.rasterimage.RasterImageLayer;
+import org.openjump.core.rasterimage.Stats;
 import org.openjump.core.rasterimage.TiffTags;
 import org.openjump.core.rasterimage.WorldFileHandler;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 import com.sun.media.jai.codec.TIFFEncodeParam;
 import com.sun.media.jai.codec.TIFFField;
@@ -35,9 +47,6 @@
 import es.unex.sextante.outputs.IOutputChannel;
 
 public class OpenJUMPRasterLayer extends AbstractRasterLayer {
-
-    private static final double DEFAULT_NO_DATA_VALUE = -99999.;
-
     private String m_sFilename;
     private String m_sName = "";
     private AnalysisExtent m_LayerExtent;
@@ -45,94 +54,74 @@
     private Raster m_Raster;
     RasterImageLayer m_Layer;
 
-    public void create(final RasterImageLayer layer) throws IOException {
+    public void create(RasterImageLayer layer) throws IOException {
+        this.m_Layer = layer;
+        this.m_Raster = layer.getRasterData(null);
+        this.m_sName = layer.getName();
+        this.m_sFilename = layer.getImageFileName();
+        Envelope env = layer.getWholeImageEnvelope();
+        this.m_LayerExtent = new AnalysisExtent();
+        this.m_LayerExtent.setCellSize((env.getMaxX() - env.getMinX())
+                / this.m_Raster.getWidth());
+        this.m_LayerExtent.setXRange(env.getMinX(), env.getMaxX(), true);
+        this.m_LayerExtent.setYRange(env.getMinY(), env.getMaxY(), true);
+        this.m_dNoDataValue = layer.getNoDataValue();
 
-        // [Giuseppe Aruta 8 Oct. 2016] add few modification to correct bug 
#410
-
-        /*
-         * [sstein 26 Oct. 2010] - don't use code below because the raster data
-         * should be loaded new from file. It happened in tests that with the
-         * code below data from another raster, created last, was used instead.
-         * (e.g. calculated Point-KDE first, and then Line-KDE=> then getting
-         * the polygon grid from the point-KDE raster delivered the Line-KDE
-         * raster as poly grid)
-         * 
-         * m_BaseDataObject = layer; //[sstein 2 Aug 2010], changed so we work
-         * now with the raster and not the image, which may be scaled for
-         * display. //m_Raster = layer.getImage().getData(); m_Raster =
-         * layer.getRasterData(); //-- end m_sName = layer.getName();
-         * m_sFilename = layer.getImageFileName(); Envelope env =
-         * layer.getEnvelope(); m_LayerExtent = new GridExtent();
-         * m_LayerExtent.setXRange(env.getMinX(), env.getMaxX());
-         * m_LayerExtent.setYRange(env.getMinY(), env.getMaxY());
-         * m_LayerExtent.setCellSize((env.getMaxX() - env.getMinX()) /
-         * (double)m_Raster.getWidth()); m_dNoDataValue = 
DEFAULT_NO_DATA_VALUE;
-         */
-
+        // [Giuseppe Aruta 30 Gen. 2018] deactivated as OJ calculate anyhow
+        // statistics (and writes .xml file) when loads raster
+        // m_Stats = stats(layer);
+        // ------------------------------------------
+        // [Giuseppe Aruta 30 Gen. 2018] - Uncomment [8 Oct. 2016] and reused
+        // the previous version (Sextante
+        // 0.6) as the previous method duplicates layer name ("rastername" ->
+        // "rastername (2)").
+        // this behaviour used to create confusion on some Sextante Algorithm,
+        // like Calculus>Raster Calculator
+        // ------------------------------------------
         // [sstein 26 Oct. 2010] using the new method instead
         // so I do not need to change the code in all the cases
         // where #.create(layer) is used
+
         // System.out.println("creation of raster layer");
         // create(layer, true);
-
-        // [Giuseppe Aruta 29 Oct. 2016]
-        // Uncomment pevious modification made by sstein.
-        // It seems that after modification made in those years
-        // (Raster framework now always save data/load data as file)
-        // the previous described bug is not evident
-        // I restored the previous code (with some modifications)
-        // As it solves some problems on algorithms (Raster calculator) and
-        // on Sextante Command Plugin
-        m_Layer = layer;
-        m_Raster = layer.getRasterData(null);
-        m_sName = layer.getName();
-        m_sFilename = layer.getImageFileName();
-        final Envelope env = layer.getWholeImageEnvelope();
-        m_LayerExtent = new AnalysisExtent();
-        m_LayerExtent.setCellSize((env.getMaxX() - env.getMinX())
-                / m_Raster.getWidth());
-        m_LayerExtent.setXRange(env.getMinX(), env.getMaxX(), true);
-        m_LayerExtent.setYRange(env.getMinY(), env.getMaxY(), true);
-        m_dNoDataValue = layer.getNoDataValue();
-
     }
 
-    public void create(final RasterImageLayer layer, final boolean 
loadFromFile)
+    public void create(RasterImageLayer layer, boolean loadFromFile)
             throws IOException {
+        if (!loadFromFile) {
+            this.m_Layer = layer;
 
-        if (loadFromFile == false) {
-            m_Layer = layer;
             // [sstein 2 Aug 2010], changed so we work now with the raster and
             // not the image, which may be scaled for display.
             // m_Raster = layer.getImage().getData();
-            m_Raster = layer.getRasterData(null);
-            // -- end
-            m_sName = layer.getName();
-            m_sFilename = layer.getImageFileName();
-            final Envelope env = layer.getWholeImageEnvelope();
-            m_LayerExtent = new AnalysisExtent();
+            this.m_Raster = layer.getRasterData(null);
+
+            this.m_sName = layer.getName();
+            this.m_sFilename = layer.getImageFileName();
+            Envelope env = layer.getWholeImageEnvelope();
+            this.m_LayerExtent = new AnalysisExtent();
             // [sstein 18 Mar 2013], set cell size first, and then the extent,
             // otherwise maxX and maxY will be reset
-            m_LayerExtent.setCellSize((env.getMaxX() - env.getMinX())
-                    / m_Raster.getWidth());
-            m_LayerExtent.setXRange(env.getMinX(), env.getMaxX(), true);
-            m_LayerExtent.setYRange(env.getMinY(), env.getMaxY(), true);
+            this.m_LayerExtent.setCellSize((env.getMaxX() - env.getMinX())
+                    / this.m_Raster.getWidth());
+            this.m_LayerExtent.setXRange(env.getMinX(), env.getMaxX(), true);
+            this.m_LayerExtent.setYRange(env.getMinY(), env.getMaxY(), true);
             // [Giuseppe Aruta 8 Oct. 2016] using selected rasterlayer no data
             // value instead
-            m_dNoDataValue = layer.getNoDataValue();
             // m_dNoDataValue = DEFAULT_NO_DATA_VALUE;
+            this.m_dNoDataValue = layer.getNoDataValue();
         } else {
-            final RasterImageLayer rasterLayer = new RasterImageLayer(
+            RasterImageLayer rasterLayer = new RasterImageLayer(
                     layer.getName(), layer.getLayerManager(),
                     layer.getImageFileName(), null,
                     layer.getWholeImageEnvelope());
-            m_Layer = rasterLayer;
-            m_Raster = rasterLayer.getRasterData(null);
-            // -- end
-            m_sName = rasterLayer.getName();
-            m_sFilename = rasterLayer.getImageFileName();
-            final Envelope env = rasterLayer.getWholeImageEnvelope();
-            m_LayerExtent = new AnalysisExtent();
+            this.m_Layer = rasterLayer;
+            this.m_Raster = rasterLayer.getRasterData(null);
+
+            this.m_sName = rasterLayer.getName();
+            this.m_sFilename = rasterLayer.getImageFileName();
+            Envelope env = rasterLayer.getWholeImageEnvelope();
+            this.m_LayerExtent = new AnalysisExtent();
             // [sstein 18 Mar 2013], set cell size first, and then the extent,
             // otherwise maxX and maxY will be reset
             m_LayerExtent.setCellSize((env.getMaxX() - env.getMinX())
@@ -144,116 +133,96 @@
             m_dNoDataValue = layer.getNoDataValue();
             // m_dNoDataValue = DEFAULT_NO_DATA_VALUE;
         }
-
     }
 
-    public void create(final String name, final String filename,
-            final AnalysisExtent ge, final int dataType, final int numBands,
-            final Object crs) {
-
-        m_Raster = RasterFactory.createBandedRaster(dataType, ge.getNX(),
+    public void create(String name, String filename, AnalysisExtent ge,
+            int dataType, int numBands, Object crs) {
+        this.m_Raster = RasterFactory.createBandedRaster(dataType, ge.getNX(),
                 ge.getNY(), numBands, null);
 
-        final OpenJUMPOutputFactory fact = (OpenJUMPOutputFactory) SextanteGUI
+        OpenJUMPOutputFactory fact = (OpenJUMPOutputFactory) SextanteGUI
                 .getOutputFactory();
 
-        final Envelope envelope = new Envelope();
+        Envelope envelope = new Envelope();
         envelope.init(ge.getXMin(), ge.getXMax(), ge.getYMin(), ge.getYMax());
-        final ColorModel colorModel = PlanarImage.createColorModel(m_Raster
+        ColorModel colorModel = PlanarImage.createColorModel(this.m_Raster
                 .getSampleModel());
-        final BufferedImage bufimg = new BufferedImage(colorModel,
-                (WritableRaster) m_Raster, false, null);
-        // final PlanarImage pimage = PlanarImage.wrapRenderedImage(bufimg);
-        m_Layer = new RasterImageLayer(name, fact.getContext()
+        BufferedImage bufimg = new BufferedImage(colorModel,
+                (WritableRaster) this.m_Raster, false, null);
+
+        this.m_Layer = new RasterImageLayer(name, fact.getContext()
                 .getLayerManager(), filename, bufimg, envelope);
-        m_sName = name;
-        m_sFilename = filename;
-        m_LayerExtent = ge;
+        this.m_sName = name;
+        this.m_sFilename = filename;
+        this.m_LayerExtent = ge;
         // [Giuseppe Aruta 8 Oct. 2016] using Sextante GUI to get no data value
         // instead
         m_dNoDataValue = 
SextanteGUI.getOutputFactory().getDefaultNoDataValue();
         // m_dNoDataValue = DEFAULT_NO_DATA_VALUE;
-
     }
 
+    @Override
     public int getBandsCount() {
-
-        if (m_Raster != null) {
-            return m_Raster.getNumBands();
-        } else {
-            return 0;
+        if (this.m_Raster != null) {
+            return this.m_Raster.getNumBands();
         }
-
+        return 0;
     }
 
-    public double getCellValueInLayerCoords(final int x, final int y,
-            final int band) {
-
+    @Override
+    public double getCellValueInLayerCoords(int x, int y, int band) {
         try {
-            if (m_Raster != null) {
-                return m_Raster.getSampleDouble(x, y, band);
-            } else {
-                return getNoDataValue();
+            if (this.m_Raster != null) {
+                return this.m_Raster.getSampleDouble(x, y, band);
             }
-        } catch (final Exception e) {
             return getNoDataValue();
+        } catch (Exception e) {
         }
-
+        return getNoDataValue();
     }
 
+    @Override
     public int getDataType() {
-
-        if (m_Raster != null) {
-            return m_Raster.getDataBuffer().getDataType();
-        } else {
-            return DataBuffer.TYPE_DOUBLE;
+        if (this.m_Raster != null) {
+            return this.m_Raster.getDataBuffer().getDataType();
         }
-
+        return 5;
     }
 
+    @Override
     public double getLayerCellSize() {
-
-        if (m_LayerExtent != null) {
-            return m_LayerExtent.getCellSize();
-        } else {
-            return 0;
+        if (this.m_LayerExtent != null) {
+            return this.m_LayerExtent.getCellSize();
         }
-
+        return 0.0D;
     }
 
+    @Override
     public AnalysisExtent getLayerGridExtent() {
-
-        return m_LayerExtent;
-
+        return this.m_LayerExtent;
     }
 
+    @Override
     public double getNoDataValue() {
-
-        return m_dNoDataValue;
-
+        return this.m_dNoDataValue;
     }
 
-    public void setCellValue(final int x, final int y, final int band,
-            final double value) {
-
-        if (m_Raster instanceof WritableRaster) {
-            if (this.getWindowGridExtent().containsCell(x, y)) {
-                ((WritableRaster) m_Raster).setSample(x, y, band, value);
-            }
+    @Override
+    public void setCellValue(int x, int y, int band, double value) {
+        if (((this.m_Raster instanceof WritableRaster))
+                && (getWindowGridExtent().containsCell(x, y))) {
+            ((WritableRaster) this.m_Raster).setSample(x, y, band, value);
         }
-
     }
 
-    public void setNoDataValue(final double noDataValue) {
-
-        m_dNoDataValue = noDataValue;
-
+    @Override
+    public void setNoDataValue(double noDataValue) {
+        this.m_dNoDataValue = noDataValue;
     }
 
+    @Override
     public Object getCRS() {
-
         return null;
-
     }
 
     /**
@@ -261,25 +230,26 @@
      * 
      * @return the extent of the layer
      */
+    @Override
     public Rectangle2D getFullExtent() {
-
-        if (m_Layer != null) {
-            final Envelope envelope = m_Layer.getWholeImageEnvelope();
+        if (this.m_Layer != null) {
+            Envelope envelope = this.m_Layer.getWholeImageEnvelope();
             return new Rectangle2D.Double(envelope.getMinX(),
                     envelope.getMinY(), envelope.getWidth(),
                     envelope.getHeight());
-        } else {
-            return null;
         }
-
+        return null;
     }
 
+    @Override
     public void open() {
     }
 
+    @Override
     public void close() {
     }
 
+    @Override
     public void postProcess() throws Exception {
 
         if (m_Layer != null) {
@@ -327,7 +297,10 @@
                     m_sFilename, false);
             worldFileHandler.writeWorldFile(envelope, image.getWidth(),
                     image.getHeight());
-
+            // [Giuseppe Aruta 30 Gen. 2018] deactivated as OJ calculate anyhow
+            // statistics (and writes .xml file) when loads raster
+            // String outXML = m_sFilename + ".aux.xml";
+            // writeXLM(new File(outXML));
             // Switch RAM mode of the RasterImage
             m_Layer.setImageFileName(m_sFilename);
             m_Layer.setNeedToKeepImage(false);
@@ -336,148 +309,84 @@
 
     }
 
-    public boolean export(final String sFilename) {
-
+    public boolean export(String sFilename) {
         if (sFilename.endsWith("asc")) {
             return exportToArcInfoASCIIFile(sFilename);
-        } else if (sFilename.endsWith("tif")) {
+        }
+        if (sFilename.endsWith("tif")) {
             return exportToGeoTIFFFile(sFilename);
-        } else {
-            return exportToGeoTIFFFile(sFilename);
         }
-
+        return exportToGeoTIFFFile(sFilename);
     }
 
-    /*
-     * public void postProces() throws Exception {
-     * 
-     * if (m_Layer != null) {
-     * 
-     * final FileOutputStream tifOut = new FileOutputStream(m_sFilename); final
-     * TIFFEncodeParam param = new TIFFEncodeParam();
-     * param.setCompression(TIFFEncodeParam.COMPRESSION_NONE); TIFFField[]
-     * tiffFields = new TIFFField[2];
-     * 
-     * // Cell size
-     * 
-     * 
-     * 
-     * // No data String noDataS = Double.toString(getNoDataValue()); byte[]
-     * bytes = noDataS.getBytes(); tiffFields[0] = new
-     * TIFFField(TiffTags.TIFFTAG_GDAL_NODATA, TIFFField.TIFF_BYTE,
-     * noDataS.length(), bytes);
-     * 
-     * // Tie point final Envelope envelope = m_Layer.getWholeImageEnvelope();
-     * tiffFields[1] = new TIFFField(GeoTiffConstants.ModelTiepointTag,
-     * TIFFField.TIFF_DOUBLE, 6, new double[] { 0, 0, 0, envelope.getMinX(),
-     * envelope.getMaxY(), 0 }); param.setExtraFields(tiffFields); final
-     * TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec
-     * .createImageEncoder("tiff", tifOut, param); // -- [sstein 2 Aug 2010] //
-     * BufferedImage image = layer.getImage().getAsBufferedImage(); final
-     * ColorModel colorModel = PlanarImage.createColorModel(m_Raster
-     * .getSampleModel()); final BufferedImage image = new
-     * BufferedImage(colorModel, (WritableRaster) m_Raster, false, null); // --
-     * end encoder.encode(image); tifOut.close();
-     * 
-     * 
-     * 
-     * final WorldFileHandler worldFileHandler = new WorldFileHandler(
-     * m_sFilename, false); worldFileHandler.writeWorldFile(envelope,
-     * image.getWidth(), image.getHeight());
-     * 
-     * // Switch RAM mode of the RasterImage
-     * m_Layer.setImageFileName(m_sFilename); 
m_Layer.setNeedToKeepImage(false);
-     * 
-     * }
-     * 
-     * }
-     */
-
-    private boolean exportToGeoTIFFFile(final String sFilename) {
+    private boolean exportToGeoTIFFFile(String sFilename) {
         try {
-            final FileOutputStream tifOut = new FileOutputStream(m_sFilename);
-            final TIFFEncodeParam param = new TIFFEncodeParam();
-            param.setCompression(TIFFEncodeParam.COMPRESSION_NONE);
+            FileOutputStream tifOut = new FileOutputStream(this.m_sFilename);
+            TIFFEncodeParam param = new TIFFEncodeParam();
+            param.setCompression(1);
             TIFFField[] tiffFields = new TIFFField[3];
 
-            // [Giuseppe Aruta 8 Oct. 2016] the following parameters come from
-            // RasterImageIO class
-            // and add cell size, nodata value and Tie point to the new created
-            // file.
+            tiffFields[0] = new TIFFField(33550, 12, 2, new double[] {
+                    getLayerCellSize(), getLayerCellSize() });
 
-            // Cell size
-            tiffFields[0] = new TIFFField(GeoTiffConstants.ModelPixelScaleTag,
-                    TIFFField.TIFF_DOUBLE, 2, new double[] {
-                            getLayerCellSize(), getLayerCellSize() });
-            // No data
             String noDataS = Double.toString(getNoDataValue());
             byte[] bytes = noDataS.getBytes();
-            tiffFields[1] = new TIFFField(TiffTags.TIFFTAG_GDAL_NODATA,
-                    TIFFField.TIFF_BYTE, noDataS.length(), bytes);
-            // Tie point
-            final Envelope envelope = m_Layer.getWholeImageEnvelope();
-            tiffFields[2] = new TIFFField(GeoTiffConstants.ModelTiepointTag,
-                    TIFFField.TIFF_DOUBLE, 6, new double[] { 0, 0, 0,
-                            envelope.getMinX(), envelope.getMaxY(), 0 });
+            tiffFields[1] = new TIFFField(42113, 1, noDataS.length(), bytes);
+
+            Envelope envelope = this.m_Layer.getWholeImageEnvelope();
+            tiffFields[2] = new TIFFField(33922, 12, 6, new double[] { 0.0D,
+                    0.0D, 0.0D, envelope.getMinX(), envelope.getMaxY(), 0.0D 
});
             param.setExtraFields(tiffFields);
-            final TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec
+            TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec
                     .createImageEncoder("tiff", tifOut, param);
-            // -- [sstein 2 Aug 2010]
-            // BufferedImage image = layer.getImage().getAsBufferedImage();
-            final ColorModel colorModel = PlanarImage.createColorModel(m_Raster
+
+            ColorModel colorModel = PlanarImage.createColorModel(this.m_Raster
                     .getSampleModel());
-            final BufferedImage image = new BufferedImage(colorModel,
-                    (WritableRaster) m_Raster, false, null);
-            // -- end
+            BufferedImage image = new BufferedImage(colorModel,
+                    (WritableRaster) this.m_Raster, false, null);
+
             encoder.encode(image);
             tifOut.close();
 
-            /* save geodata: */
-            // final Envelope envelope = m_Layer.getWholeImageEnvelope();
-
-            final WorldFileHandler worldFileHandler = new WorldFileHandler(
-                    m_sFilename, false);
+            WorldFileHandler worldFileHandler = new WorldFileHandler(
+                    this.m_sFilename, false);
             worldFileHandler.writeWorldFile(envelope, image.getWidth(),
                     image.getHeight());
 
-            // Switch RAM mode of the RasterImage
-            m_Layer.setImageFileName(m_sFilename);
-            m_Layer.setNeedToKeepImage(false);
-
-        } catch (final Exception e) {
+            this.m_Layer.setImageFileName(this.m_sFilename);
+            this.m_Layer.setNeedToKeepImage(false);
+        } catch (Exception e) {
             return false;
         }
-
         return true;
     }
 
-    private boolean exportToArcInfoASCIIFile(final String sFilename) {
-
+    private boolean exportToArcInfoASCIIFile(String sFilename) {
         try {
-            final FileWriter f = new FileWriter(sFilename);
-            final BufferedWriter fout = new BufferedWriter(f);
-            final DecimalFormat df = new DecimalFormat("##.###");
+            FileWriter f = new FileWriter(sFilename);
+            BufferedWriter fout = new BufferedWriter(f);
+            DecimalFormat df = new DecimalFormat("##.###");
             df.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
             df.setDecimalSeparatorAlwaysShown(true);
 
-            fout.write("ncols " + Integer.toString(m_LayerExtent.getNX()));
+            fout.write("ncols " + 
Integer.toString(this.m_LayerExtent.getNX()));
             fout.newLine();
-            fout.write("nrows " + Integer.toString(m_LayerExtent.getNY()));
+            fout.write("nrows " + 
Integer.toString(this.m_LayerExtent.getNY()));
             fout.newLine();
-            fout.write("xllcorner " + 
Double.toString(m_LayerExtent.getXMin()));
+            fout.write("xllcorner "
+                    + Double.toString(this.m_LayerExtent.getXMin()));
             fout.newLine();
-            fout.write("yllcorner " + 
Double.toString(m_LayerExtent.getYMin()));
+            fout.write("yllcorner "
+                    + Double.toString(this.m_LayerExtent.getYMin()));
             fout.newLine();
-            // ArcInfo ASCII does not support individual x/y cell sizes. But 
who
-            // cares?
+
             fout.write("cellsize "
-                    + Double.toString(m_LayerExtent.getCellSize()));
+                    + Double.toString(this.m_LayerExtent.getCellSize()));
             fout.newLine();
             fout.write("nodata_value " + Double.toString(getNoDataValue()));
             fout.newLine();
-
-            for (int i = 0; i < m_LayerExtent.getNY(); i++) {
-                for (int j = 0; j < m_LayerExtent.getNX(); j++) {
+            for (int i = 0; i < this.m_LayerExtent.getNY(); i++) {
+                for (int j = 0; j < this.m_LayerExtent.getNX(); j++) {
                     fout.write(df.format(getCellValueAsDouble(j, i)) + " ");
                 }
                 fout.newLine();
@@ -484,50 +393,194 @@
             }
             fout.close();
             f.close();
-        } catch (final Exception e) {
+        } catch (Exception e) {
             return false;
         }
-
         return true;
-
     }
 
+    @Override
     public String getName() {
+        return this.m_sName;
+    }
 
-        return m_sName;
+    @Override
+    public void setName(String sName) {
+        this.m_sName = sName;
+        if (this.m_Layer != null) {
+            this.m_Layer.setName(sName);
+        }
+    }
 
+    @Override
+    public void free() {
     }
 
-    public void setName(final String sName) {
+    @Override
+    public Object getBaseDataObject() {
+        return this.m_Layer;
+    }
 
-        m_sName = sName;
+    @Override
+    public IOutputChannel getOutputChannel() {
+        return new FileOutputChannel(this.m_sFilename);
+    }
 
-        if (m_Layer != null) {
-            m_Layer.setName(sName);
-        }
-
+    public String getFilename() {
+        return this.m_sFilename;
     }
 
-    public void free() {
-        // TODO Auto-generated method stub
+    // [Giuseppe Aruta 30 Gen. 2018] The following code is used to a) calculate
+    // statistics of the layer
+    // b) resume srs from input raster c) write sidecar .xml file with 
statistic
+    // e srs.
+    // I deactivated for now as OJ will rewrite .xml file anyhow when loads
+    // output file and srs writing need more
+    // test.
+    private Stats m_Stats;
 
+    public static Stats stats(RasterImageLayer layer) {
+        return layer.getMetadata().getStats();
     }
 
-    public Object getBaseDataObject() {
+    public void writeXLM(File auxXmlFile) throws Exception {
+        Stats stats = m_Stats;
+        DocumentBuilderFactory docFactory = DocumentBuilderFactory
+                .newInstance();
+        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+        Document doc;
 
-        return m_Layer;
+        Element pamDatasetElement;
+        NodeList pamRasterBandNodeList;
+        doc = docBuilder.newDocument();
 
-    }
+        // Check if PAMDataset element exists and, if not, create it
+        String pamDatasetTagName = "PAMDataset";
+        pamDatasetElement = (Element) doc.getElementsByTagName(
+                pamDatasetTagName).item(0);
+        if (pamDatasetElement == null) {
+            pamDatasetElement = doc.createElement(pamDatasetTagName);
+        }
 
-    public IOutputChannel getOutputChannel() {
+        String pamRasterBandTagName = "PAMRasterBand";
+        String pamRasterSridTagName = "SRS";
+        String bandAttribute = "band";
+        String metadataElementName = "Metadata";
 
-        return new FileOutputChannel(m_sFilename);
+        String SRID = null;
+        // String fileSourcePath = m_Layer.getImageFileName();
+        // //// String srsCode = m_Layer.getSRSInfo().getCode();
 
+        // SRSInfo srsInfo = SridLookupTable.getSrsAndUnitFromCode(srsCode);
+
+        /*
+         * String extension = FileUtil.getExtension(m_sFilename).toLowerCase();
+         * 
+         * if (extension.equals("tif") || extension.equals("tiff")) {
+         * TiffTags.TiffMetadata metadata = TiffTags.readMetadata(new File(
+         * fileSourcePath)); if (metadata.isGeoTiff()) {
+         * 
+         * srsInfo = metadata.getSRSInfo(); } else { srsInfo =
+         * ProjUtils.getSRSInfoFromAuxiliaryFile(fileSourcePath);
+         * 
+         * } } else { srsInfo =
+         * ProjUtils.getSRSInfoFromAuxiliaryFile(fileSourcePath);
+         * 
+         * }
+         */
+        // m_Srid = srsCode;
+
+        // //// if (!srsCode.equals("0")) {
+        // //// SRID = SridLookupTable.getOGCWKTFromWkidCode(srsCode);
+        // //// if (!SRID.isEmpty()) {
+        // ////
+        // //// Element SRS = doc.createElement(pamRasterSridTagName);
+        // //// SRS.appendChild(doc.createTextNode(SRID));
+        // //// pamDatasetElement.appendChild(doc);
+        // //// }
+        // //// }
+
+        pamRasterBandNodeList = pamDatasetElement
+                .getElementsByTagName(pamRasterBandTagName);
+        if (pamRasterBandNodeList != null
+                && pamRasterBandNodeList.getLength() > 0) {
+            for (int b = 0; b < pamRasterBandNodeList.getLength(); b++) {
+                Element pamRasterBandElement = (Element) pamRasterBandNodeList
+                        .item(b);
+                int bandNr = Integer.parseInt(pamRasterBandElement
+                        .getAttribute(bandAttribute));
+
+                if (bandNr == b + 1) {
+
+                    Element metadataElement = (Element) pamRasterBandElement
+                            .getElementsByTagName(metadataElementName).item(0);
+                    metadataElement = updateMetadataElement(doc,
+                            metadataElement, m_Layer, bandNr);
+
+                    pamRasterBandElement.appendChild(metadataElement);
+                    pamDatasetElement.appendChild(pamRasterBandElement);
+
+                }
+            }
+        } else {
+            for (int b = 0; b < stats.getBandCount(); b++) {
+
+                Element pamRasterBandElement = doc
+                        .createElement(pamRasterBandTagName);
+                Attr attr = doc.createAttribute(bandAttribute);
+                attr.setValue(Integer.toString(b + 1));
+                pamRasterBandElement.setAttributeNode(attr);
+
+                Element metadataElement = doc
+                        .createElement(metadataElementName);
+                metadataElement = updateMetadataElement(doc, metadataElement,
+                        m_Layer, b + 1);
+                pamRasterBandElement.appendChild(metadataElement);
+                pamDatasetElement.appendChild(pamRasterBandElement);
+            }
+
+            doc.appendChild(pamDatasetElement);
+        }
+
+        // write the content into xml file
+        TransformerFactory transformerFactory = TransformerFactory
+                .newInstance();
+        Transformer transformer = transformerFactory.newTransformer();
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+        transformer.setOutputProperty(
+                "{http://xml.apache.org/xslt}indent-amount";, "2");
+        DOMSource source = new DOMSource(doc);
+        StreamResult result = new StreamResult(auxXmlFile);
+        transformer.transform(source, result);
+
     }
 
-    // [sstein 26. Oct. 2012] added method back-in
-    public String getFilename() {
-        return m_sFilename;
+    private Element updateMetadataElement(Document doc,
+            Element metadataElement, RasterImageLayer layer, int band) {
+        Stats stats = m_Stats;
+        ;
+        Element mdi = doc.createElement("MDI");
+        mdi.setAttribute("key", "STATISTICS_MINIMUM");
+        mdi.setTextContent(Double.toString(stats.getMin(band)));
+        metadataElement.appendChild(mdi);
+
+        mdi = doc.createElement("MDI");
+        mdi.setAttribute("key", "STATISTICS_MAXIMUM");
+        mdi.setTextContent(Double.toString(stats.getMax(band)));
+        metadataElement.appendChild(mdi);
+
+        mdi = doc.createElement("MDI");
+        mdi.setAttribute("key", "STATISTICS_MEAN");
+        mdi.setTextContent(Double.toString(stats.getMean(band)));
+        metadataElement.appendChild(mdi);
+
+        mdi = doc.createElement("MDI");
+        mdi.setAttribute("key", "STATISTICS_STDDEV");
+        mdi.setTextContent(Double.toString(stats.getStdDev(band)));
+        metadataElement.appendChild(mdi);
+
+        return metadataElement;
+
     }
 
 }

Modified: 
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/extensions/SextanteExtension.java
===================================================================
--- 
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/extensions/SextanteExtension.java
     2018-01-29 12:20:25 UTC (rev 5697)
+++ 
plug-ins/SextantePlugIn/src/es/unex/sextante/openjump/extensions/SextanteExtension.java
     2018-01-30 17:05:15 UTC (rev 5698)
@@ -1,122 +1,69 @@
 package es.unex.sextante.openjump.extensions;
 
-import java.io.File;
-import java.net.JarURLConnection;
-import java.net.URL;
-
-import com.vividsolutions.jump.workbench.Logger;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
 import com.vividsolutions.jump.workbench.plugin.Extension;
 import com.vividsolutions.jump.workbench.plugin.PlugInContext;
 import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
 
-import es.unex.sextante.core.Sextante;
-import es.unex.sextante.gui.core.SextanteGUI;
-import es.unex.sextante.openjump.core.OpenJUMPOutputFactory;
-import es.unex.sextante.openjump.gui.OpenJUMPGUIFactory;
-import es.unex.sextante.openjump.gui.OpenJUMPInputFactory;
-import es.unex.sextante.openjump.gui.OpenJUMPPostProcessTaskFactory;
-
 public class SextanteExtension extends Extension {
 
-  /*
-   * Version History
-   * 
-   * @ Sextante 1.0 2013-04-01 Sextante 1.0 Internationalized 2013-05-25 (Add
-   * Language codes from Kosmo Sextante (ca,es,fi,hr,it), add French)
-   * 
-   * @ Sextante 1.0.1 2016-08-10 Correct bug #480. Added Sextante Data Explorer
-   * 
-   * @ Sextante 1.0.2 2016-10-31 Added Pick coordinates plugin. Better
-   * integration between OpenJUMP and Sextante data model Upgraded 
documentation
-   * with a new help dialog style Fix bugs #410 and #427
-   * 
-   * @ Sextante 1.0.2b 2016-10-31 Help dialog now shows all documentation
-   * related to algorithm. Convert Help Dialog to Detached windows
-   * 
-   * @ Sextante 1.0 OpenJUMP binding 2016-11-28 Help framework now works also 
on
-   * other plugins and algorithms. Solved bug related on Advanced option panel.
-   * Added new icons to Results, Pick coordinates and Layer explorer. Changed
-   * number version as Sextante embedded into GvSIGCE is 1.0.0 and it is newer
-   * than OpenJUMP one (2009?)
-   */
+    /*
+     * Version History
+     * 
+     * @ Sextante 1.0 2013-04-01 Sextante 1.0 Internationalized 2013-05-25 (Add
+     * Language codes from Kosmo Sextante (ca,es,fi,hr,it), add French)
+     * 
+     * @ Sextante 1.0.1 2016-08-10 Correct bug #480. Added Sextante Data
+     * Explorer
+     * 
+     * @ Sextante 1.0.2 2016-10-31 Added Pick coordinates plugin. Better
+     * integration between OpenJUMP and Sextante data model Upgraded
+     * documentation with a new help dialog style Fix bugs #410 and #427
+     * 
+     * @ Sextante 1.0.2b 2016-10-31 Help dialog now shows all documentation
+     * related to algorithm. Convert Help Dialog to Detached windows
+     * 
+     * @ Sextante 1.0 OpenJUMP binding 2016-11-28 Help framework now works also
+     * on other plugins and algorithms. Solved bug related on Advanced option
+     * panel. Added new icons to Results, Pick coordinates and Layer explorer.
+     * Changed number version as Sextante embedded into GvSIGCE is 1.0.0 and it
+     * is newer than OpenJUMP one (2009?)
+     */
 
-  private static final String NAME = "Sextante 1.0";
-  private static final String VERSION = "OpenJUMP binding 2016-12-27";
+    private static final String NAME = "Sextante 1.0";
+    private static final String VERSION = "OpenJUMP binding 2016-12-06";
 
-  public String getName() {
-    return NAME;
-  }
-
-  public String getVersion() {
-    return VERSION;
-  }
-
-  public void configure(PlugInContext context) throws Exception {
-
-    Logger.debug(">> starting Sextante initialization");
-
-    URL sextGUIJarUrl = SextanteGUI.class.getProtectionDomain().getCodeSource()
-        .getLocation();
-    Logger.debug("SextanteGUI claims to be in " + sextGUIJarUrl);
-
-    if (sextGUIJarUrl == null) {
-      Logger.error("Location of SextanteGUI is null.");
-      return;
+    @Override
+    public String getName() {
+        return NAME;
     }
 
-    // strip possible "jar:<file:\path\to\sextante_gui.jar>!.." wrapping
-    if (sextGUIJarUrl.getProtocol().equalsIgnoreCase("jar")){
-      JarURLConnection connection =
-          (JarURLConnection) sextGUIJarUrl.openConnection();
-      sextGUIJarUrl = connection.getJarFileURL();
+    @Override
+    public String getVersion() {
+        return VERSION;
     }
 
-    File sextGUIJarFile = new File(sextGUIJarUrl.getPath());
-    if (!sextGUIJarFile.isFile()) {
-      Logger.error(sextGUIJarFile + " is not a file!");
-      return;
-    }
+    @Override
+    public void configure(PlugInContext context) throws Exception {
+        WorkbenchContext workbenchContext = context.getWorkbenchContext();
+        FeatureInstaller featureInstaller = new FeatureInstaller(
+                workbenchContext);
 
-    File sextDir = sextGUIJarFile.getParentFile();
-    if (!sextDir.isDirectory()) {
-      Logger.error("Sextante folder " + sextDir + " is not a folder!");
-      return;
-    }
+        new SextanteToolboxPlugin().initialize(context);
+        new SextanteModelerPlugin().initialize(context);
+        new SextanteHistoryPlugin().initialize(context);
+        new SextanteCommandLinePlugin().initialize(context);
+        // new AdditionalResultsPlugIn().initialize(context);
+        new SextanteResultsPlugin().initialize(context);
+        new SextanteDataExplorerPlugin().initialize(context);
+        new SextantePickCoordinatesPlugIn().initialize(context);
+        featureInstaller.addMenuSeparator(new String[] { "Sextante" });
+        new SextanteSettingsPlugin().initialize(context);
 
-    // sextante folder needs to be absolute so Help shows pictures properly
-    String sextDirString = sextDir.getAbsolutePath();
-    Logger.debug("found sextante folder " + sextDirString);
+        featureInstaller.addMenuSeparator(new String[] { "Sextante" });
 
-    // String sextHelpDirString = new File(sextDir, "help").toString();
+        new SextanteHelpPlugIn().initialize(context);
 
-    Sextante.initialize(sextDirString);
-    SextanteGUI.setSextantePath(sextDirString);
-    SextanteGUI.initialize(sextDirString);
+    }
 
-    SextanteGUI.setGUIFactory(new OpenJUMPGUIFactory());
-    SextanteGUI.setMainFrame(context.getWorkbenchFrame());
-
-    SextanteGUI.setInputFactory(new OpenJUMPInputFactory(context
-        .getWorkbenchContext()));
-    SextanteGUI.setOutputFactory(new OpenJUMPOutputFactory(context
-        .getWorkbenchContext()));
-    SextanteGUI.setPostProcessTaskFactory(new 
OpenJUMPPostProcessTaskFactory());
-
-    FeatureInstaller featureInstaller = FeatureInstaller.getInstance();
-    new SextanteToolboxPlugin().initialize(context);
-    new SextanteModelerPlugin().initialize(context);
-    new SextanteHistoryPlugin().initialize(context);
-    new SextanteCommandLinePlugin().initialize(context);
-    //[Giuseppe Aruta 2017-12-12] deactivated as integrated (from OJ 1.12)into 
OpenJUMP
-    //new SextanteResultsPlugin().initialize(context);
-    new SextanteDataExplorerPlugin().initialize(context);
-    new SextantePickCoordinatesPlugIn().initialize(context);
-    featureInstaller.addMenuSeparator(new String[] { "Sextante" });
-    new SextanteSettingsPlugin().initialize(context);
-    featureInstaller.addMenuSeparator(new String[] { "Sextante" });
-    new SextanteHelpPlugIn().initialize(context);
-
-    Logger.debug("<< Successfully finished Sextante initialization.");
-  }
-
 }


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to