Revision: 6502
          http://sourceforge.net/p/jump-pilot/code/6502
Author:   edso
Date:     2020-09-20 21:39:16 +0000 (Sun, 20 Sep 2020)
Log Message:
-----------
de-abstract GeoRaster, it's totally valid to use it independent 
ReferencedGeoRaster functionality
minor refinements
make errors in fixed_reader final
little cleanup, removed obsolete code

Modified Paths:
--------------
    
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java
    
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java  
    2020-09-20 19:02:12 UTC (rev 6501)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java  
    2020-09-20 21:39:16 UTC (rev 6502)
@@ -81,8 +81,9 @@
 import com.vividsolutions.jump.workbench.model.Disposable;
 import com.vividsolutions.jump.workbench.model.Prioritized;
 
-public abstract class GeoRaster implements Disposable {
+public class GeoRaster implements Disposable {
   protected String imageFileLocation;
+  private URI uri = null;
   protected Object fixed_reader = null;
   protected RenderedOp src = null;
   private ImageReader src_reader = null;
@@ -128,9 +129,12 @@
   public GeoRaster(String imageFileLocation, Object fixed_reader) {
     this.imageFileLocation = imageFileLocation;
     this.fixed_reader = fixed_reader;
+  }
 
+  protected URI getURI() {
+    return uri;
   }
-
+  
   /**
    * Basic fetchRasters retrieves a raster from a file. To get a raster from
    * somewhere else, override this method in subclasses.
@@ -140,12 +144,17 @@
    * @throws ReferencedImageException
    */
   protected void fetchRaster() throws ReferencedImageException {
-    final URI uri;
+    // we accept either URI strings or string file paths
     try {
       uri = new URI(imageFileLocation);
     } catch (URISyntaxException e) {
-      throw new ReferencedImageException(e);
+      Logger.debug("not an URI, will treat as path -> "+imageFileLocation, e);
+      File file = new File(imageFileLocation);
+      uri = file.toURI();
     }
+    // check availability early
+    if (!new File(uri).canRead())
+      throw new ReferencedImageException("cannot read file -> 
"+imageFileLocation);
 
     // prepare jai parameters
     final ParameterBlockJAI pbjImageRead;
@@ -153,77 +162,77 @@
     pbjImageRead = new ParameterBlockJAI("ImageRead");
     pbjImageRead.setParameter("readParam", param);
 
-    try {
-      // route, if fixed_reader was set
-      List<ImageReaderSpi> affirmed_readers;
-      // default case, auto detection
-      if (fixed_reader == null) {
-        affirmed_readers = new ArrayList(listValidImageIOReaders(uri, null));
-        // sort readers by priority
-        Collections.sort(affirmed_readers, new Comparator<ImageReaderSpi>() {
-          public int compare(final ImageReaderSpi o1, final ImageReaderSpi o2) 
{
-            final Prioritized p1 = new Prioritized() {
-              public int getPriority() {
-                return GeoImageFactory.getPriority(o1);
-              }
-            };
-            final Prioritized p2 = new Prioritized() {
-              public int getPriority() {
-                return GeoImageFactory.getPriority(o2);
-              }
-            };
+    // route, if fixed_reader was set
+    List<ImageReaderSpi> affirmed_readers;
+    // default case, auto detection
+    if (fixed_reader == null) {
+      affirmed_readers = new ArrayList(listValidImageIOReaders(uri, null));
+      // sort readers by priority
+      Collections.sort(affirmed_readers, new Comparator<ImageReaderSpi>() {
+        public int compare(final ImageReaderSpi o1, final ImageReaderSpi o2) {
+          final Prioritized p1 = new Prioritized() {
+            public int getPriority() {
+              return GeoImageFactory.getPriority(o1);
+            }
+          };
+          final Prioritized p2 = new Prioritized() {
+            public int getPriority() {
+              return GeoImageFactory.getPriority(o2);
+            }
+          };
 //            
System.out.println(o1+"="+p1.getPriority()+"/"+o2+"="+p2.getPriority());
-            return Prioritized.COMPARATOR.compare(p1, p2);
-          }
-        });
-      }
-      // fixed reader is imageio reader
-      else if (fixed_reader instanceof ImageReaderSpi)
-        affirmed_readers = Collections.singletonList((ImageReaderSpi) 
fixed_reader);
-      else {
-        // fixed reader is something else, hopefully jai codec ;)
-        // simply define an empty imageio reader list here to skip to jai below
-        affirmed_readers = Collections.emptyList();
-      }
+          return Prioritized.COMPARATOR.compare(p1, p2);
+        }
+      });
+    }
+    // fixed reader is imageio reader
+    else if (fixed_reader instanceof ImageReaderSpi)
+      affirmed_readers = Collections.singletonList((ImageReaderSpi) 
fixed_reader);
+    else {
+      // fixed reader is something else, hopefully jai codec ;)
+      // simply define an empty imageio reader list here to skip to jai below
+      affirmed_readers = Collections.emptyList();
+    }
 
-      // this is skipped if list is empty
-      // TODO: not sure looping makes sense here as image is
-      // actually rendered much later
-      for (Iterator<ImageReaderSpi> i = affirmed_readers.listIterator(); i
-          .hasNext();) {
+    // this is skipped if list is empty
+    // TODO: not sure looping makes sense here as image is
+    // actually rendered much later
+    for (Iterator<ImageReaderSpi> i = affirmed_readers.listIterator(); i
+        .hasNext();) {
 
-        ImageReaderSpi readerSpi = ((ImageReaderSpi) i.next());
+      ImageReaderSpi readerSpi = ((ImageReaderSpi) i.next());
 
-        Logger.trace("Trying reader "+GeoImageFactory.loaderString(readerSpi));
+      Logger.trace("Trying reader "+GeoImageFactory.loaderString(readerSpi));
 
-        try {
-          src_input = createInput(uri, readerSpi);
+      try {
+        src_input = createInput(uri, readerSpi);
 
-          src_reader = readerSpi.createReaderInstance(/* src_input */);
+        src_reader = readerSpi.createReaderInstance(/* src_input */);
 
-          src_reader.setInput(src_input);
-          pbjImageRead.setParameter("Input", src_input);
-          pbjImageRead.setParameter("Reader", src_reader);
-  
-          src = JAI.create("ImageRead", pbjImageRead, null);
+        src_reader.setInput(src_input);
+        pbjImageRead.setParameter("Input", src_input);
+        pbjImageRead.setParameter("Reader", src_reader);
 
-          // success OR dispose & try plain JAI below
-          if (src != null && src.getWidth() > 0) {
-            // set info vars
-            type = src_reader.getFormatName();
-            used_loader = src_reader;
-            return;
-          }
-          else
-            dispose();
-        } catch (Exception e) {
-          // ok, this didn't work try the next one
-          Logger.trace(e);
+        src = JAI.create("ImageRead", pbjImageRead, null);
+
+        // success OR dispose & try plain JAI below
+        if (src != null && src.getWidth() > 0) {
+          // set info vars
+          type = src_reader.getFormatName();
+          used_loader = src_reader;
+          return;
+        }
+        else
           dispose();
-        }
+      } catch (Exception e) {
+        // if fixed_reader failed, it failed finally and we'll have to throw 
the reason
+        if (fixed_reader != null && fixed_reader == readerSpi)
+          throw new ReferencedImageException(e);
+        // ok, this didn't work try the next one
+        Logger.trace(e);
+        // clean up any residue
+        dispose();
       }
-    } catch (IOException e) {
-      throw new ReferencedImageException(e);
     }
 
     // try JAI codec as fallthrough or if defined
@@ -304,6 +313,7 @@
     return used_loader;
   }
 
+  // TODO: probably better moved to GeoImage where the rendering is actually 
handled
   public RenderingHints createCacheRenderingHints() {
     if (src instanceof RenderedOp && src.getWidth() > 2000
         && src.getHeight() > 2000 && cache_hints == null) {
@@ -433,7 +443,7 @@
    * create a list of ImageReaderSpi's supposedly able to open the URI
    */
   static protected List<ImageReaderSpi> listValidImageIOReaders(URI uri,
-      Class filter) throws IOException {
+      Class filter) {
 
     resetGDALReaderSelection();
 

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
    2020-09-20 19:02:12 UTC (rev 6501)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
    2020-09-20 21:39:16 UTC (rev 6502)
@@ -68,8 +68,6 @@
 
 public class GeoReferencedRaster extends GeoRaster {
   private final String MSG_GENERAL = "This is not a valid GeoTIFF file.";
-  String fileName;
-
   Envelope envModel_image;
   Envelope envModel_image_backup;
 
@@ -79,8 +77,6 @@
   private double dblModelUnitsPerRasterUnit_X;
   private double dblModelUnitsPerRasterUnit_Y;
 
-  // boolean hoPatch = false;
-
   /**
    * Called by Java2XML
    * 
@@ -93,7 +89,6 @@
   public GeoReferencedRaster(String location, Object reader)
       throws ReferencedImageException {
     super(location, reader);
-    fileName = imageFileLocation;
     readRasterfile();
   }
 
@@ -257,7 +252,7 @@
     // String name = worldFileName();
     InputStream is = null;
     try {
-      is = WorldFile.find(fileName);
+      is = WorldFile.find(getURI().toString());
       // Read the tags from the tiff worldfile.
       List lines = FileUtil.getContents(is);
       double[] tags = new double[6];
@@ -285,12 +280,7 @@
   protected void readRasterfile() throws ReferencedImageException {
     super.readRasterfile();
 
-    URI uri;
-    try {
-      uri = new URI(imageFileLocation);
-    } catch (URISyntaxException e) {
-      throw new ReferencedImageException(e);
-    }
+    URI uri = getURI();
 
     // Try to find and parse world file.
     try {



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

Reply via email to