Package org.geotools.coverage.grid.io.imageio

Source Code of org.geotools.coverage.grid.io.imageio.ImageReaderWalker

package org.geotools.coverage.grid.io.imageio;

import java.io.IOException;
import java.io.Serializable;
import java.util.AbstractList;
import java.util.List;
import java.util.Map;

import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.spi.ImageInputStreamSpi;
import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.ImageInputStream;

import org.geotools.coverage.grid.io.AbstractGridCoverage2DReader;
import org.geotools.factory.GeoTools;
import org.geotools.factory.Hints;
import org.geotools.gce.RasterManager;
import org.geotools.gce.RasterManagerBuilder;

/**
*
*
* @source $URL$
*/
public abstract class ImageReaderWalker extends AbstractList<RasterManager> implements List<RasterManager>  {
  
    protected final Map<String, java.io.Serializable> sourceParams;
   
    /** Hints used by the {@link AbstractGridCoverage2DReader} subclasses. */
    private Hints hints = GeoTools.getDefaultHints();
   
    private List<RasterManager> elements;
   
    protected final  ImageInputStreamSpi inStreamSPI;
   
    protected final  ImageReaderSpi readerSPI;
   
    public ImageReaderWalker(Map<String, Serializable> sourceParams, Hints hints,
            ImageInputStreamSpi inStreamSPI, ImageReaderSpi readerSPI) {
        this.sourceParams = sourceParams;
        this.hints = hints;
        this.inStreamSPI = inStreamSPI;
        this.readerSPI = readerSPI;
    }
   
    public ImageInputStreamSpi getInStreamSPI() {
        return inStreamSPI;
    }

    public ImageReaderSpi getReaderSPI() {
        return readerSPI;
    }


    @Override
    public RasterManager get(int index) {
        return elements.get(index);
    }

    @Override
    public int size() {
        if(elements==null)
            return 0;
        return elements.size();
    }

    public Hints getHints() {
        return hints.clone();
    }
   

    protected void initialize() throws IOException {

        // get a raster manager builder
        final RasterManagerBuilder rasterManagerBuilder=getRasterManagerBuilder();
        if(rasterManagerBuilder==null){
            throw new IOException("Unable to obtain a RasterManagerBuilder");
        }
          
        //
        // Tell underlying implementation that we are starting to process
        //
        startWalk();
       
        //
        // Stream metadata
        //
        // now parse the stream metadata
        if(rasterManagerBuilder.needsStreamMetadata()){
            rasterManagerBuilder.parseStreamMetadata(getStreamMetadata());
        }       
       
       
        //
        // Main Loop on each image
        //
        // now start parsing metadata plus other info for each image we have
        final int numSteps=getNumElemements();
        for(int i=0; i<numSteps; i++){
            prepareElement(i);
            try{
                rasterManagerBuilder.addElement(i,acquireReader(i),getSource(i));
            } finally {
                releaseReader(i);
            }
        }
       
        //
        // Release Resources
        //
        endWalk();
       
        //
        // Create raster managers
        //
        this.elements=rasterManagerBuilder.create();
        rasterManagerBuilder.dispose();
    }

    protected abstract ImageReaderSource<?> getSource(int i)throws IOException;
   
    protected abstract ImageReader acquireReader(int i)throws IOException;
   
    protected abstract void releaseReader(int i)throws IOException;

    protected abstract void endWalk()throws IOException ;

    protected abstract void prepareElement(int i)throws IOException;

    protected abstract int getNumElemements()throws IOException;

    protected abstract void startWalk() throws IOException;
   
    protected abstract IIOMetadata getStreamMetadata() throws IOException;

    protected abstract RasterManagerBuilder getRasterManagerBuilder();

    protected abstract ImageInputStream createImageInputStream() throws IOException;

}
TOP

Related Classes of org.geotools.coverage.grid.io.imageio.ImageReaderWalker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.