/**
*
*/
package org.geotools.utils.imageoverviews;
import it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReaderSpi;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.media.jai.JAI;
import junit.framework.Assert;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.geotools.test.TestData;
import org.geotools.util.logging.Logging;
import org.geotools.utils.progress.ExceptionEvent;
import org.geotools.utils.progress.ProcessingEvent;
import org.geotools.utils.progress.ProcessingEventListener;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
/**
* Testing {@link OverviewsEmbedder}.
*
* @author Simone Giannecchini, GeoSolutions SAS
*
*/
public class OverviewEmbedderTest extends Assert{
private final static Logger LOGGER = Logging.getLogger(OverviewEmbedderTest.class);
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
File inputFile=TestData.file(this, "DEM.tiff");
FileUtils.copyFile(inputFile, new File(inputFile.getParent(), "DEM_.tiff"));
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
FileUtils.deleteQuietly(TestData.temp(this, "DEM_.tiff"));
}
@Test
// @Ignore
public void nearestExternal() throws Exception{
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Nearest.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setExternalOverviews(true);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
oe.addProcessingEventListener(new ProcessingEventListener() {
@Override
public void getNotification(ProcessingEvent event) {
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
}
});
oe.run();
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertTrue(reader.getNumImages(true)==1);
reader.reset();
assertTrue(org.geotools.test.TestData.file(this, "DEM_.tif.ovr").exists());
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tif.ovr")));
assertTrue(reader.getNumImages(true)==5);
assertTrue(reader.isImageTiled(0));
assertEquals(256,reader.getTileHeight(0));
assertEquals(256,reader.getTileWidth(0));
reader.dispose();
}
@Test
public void nearest() throws Exception{
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Nearest.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
oe.addProcessingEventListener(new ProcessingEventListener() {
private double lastProgress=-1;
@Override
public void getNotification(ProcessingEvent event) {
assertTrue(lastProgress<=event.getPercentage());
lastProgress=event.getPercentage();
assertTrue(lastProgress<=100);
assertTrue(lastProgress>=0);
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
}
});
oe.run();
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertTrue(reader.getNumImages(true)==6);
reader.dispose();
}
@Test
// @Ignore
public void nearestMultiple() throws Exception{
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Nearest.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
oe.addProcessingEventListener(new ProcessingEventListener() {
private double lastProgress=-1;
@Override
public void getNotification(ProcessingEvent event) {
assertTrue(lastProgress<=event.getPercentage());
lastProgress=event.getPercentage();
assertTrue(lastProgress<=100);
assertTrue(lastProgress>=0);
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
}
});
oe.run();
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertTrue(reader.getNumImages(true)==6);
reader.dispose();
}
@Test
// @Ignore
public void average() throws Exception{
// JAI.getDefaultInstance().getTileCache().setMemoryCapacity(512*1024*1024);
// JAI.getDefaultInstance().getTileScheduler().setParallelism(10);
// JAI.getDefaultInstance().getTileScheduler().setPrefetchParallelism(10);
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Average.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
oe.addProcessingEventListener(new ProcessingEventListener() {
@Override
public void getNotification(ProcessingEvent event) {
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
}
});
oe.run();
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertTrue(reader.getNumImages(true)==6);
reader.dispose();
}
@Test
// @Ignore
public void bicubic() throws Exception{
// JAI.getDefaultInstance().getTileCache().setMemoryCapacity(512*1024*1024);
// JAI.getDefaultInstance().getTileScheduler().setParallelism(10);
// JAI.getDefaultInstance().getTileScheduler().setPrefetchParallelism(10);
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Bicubic.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
oe.addProcessingEventListener(new ProcessingEventListener() {
@Override
public void getNotification(ProcessingEvent event) {
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
}
});
oe.run();
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertTrue(reader.getNumImages(true)==6);
reader.dispose();
}
@Test
// @Ignore
public void bilinear() throws Exception{
// JAI.getDefaultInstance().getTileCache().setMemoryCapacity(512*1024*1024);
// JAI.getDefaultInstance().getTileScheduler().setParallelism(10);
// JAI.getDefaultInstance().getTileScheduler().setPrefetchParallelism(10);
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Bilinear.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
oe.addProcessingEventListener(new ProcessingEventListener() {
@Override
public void getNotification(ProcessingEvent event) {
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
}
});
oe.run();
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertTrue(reader.getNumImages(true)==6);
reader.dispose();
}
@Test
@Ignore
public void filtered() throws Exception{
// JAI.getDefaultInstance().getTileCache().setMemoryCapacity(512*1024*1024);
// JAI.getDefaultInstance().getTileScheduler().setParallelism(10);
// JAI.getDefaultInstance().getTileScheduler().setPrefetchParallelism(10);
final OverviewsEmbedder oe= new OverviewsEmbedder();
oe.setDownsampleStep(2);
oe.setNumSteps(5);
oe.setScaleAlgorithm(OverviewsEmbedder.SubsampleAlgorithm.Filtered.toString());
// use default
oe.setTileCache(JAI.getDefaultInstance().getTileCache());
oe.setTileWidth(256);
oe.setTileHeight(256);
oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
final List<Throwable> exceptions = new ArrayList<Throwable>();
oe.addProcessingEventListener(new ProcessingEventListener() {
@Override
public void getNotification(ProcessingEvent event) {
LOGGER.info(event.toString());
}
@Override
public void exceptionOccurred(ExceptionEvent event) {
LOGGER.warning(event.toString());
exceptions.add(event.getException());
event.getException().printStackTrace();
}
});
oe.run();
// fail if any exception was reported
if(exceptions.size() > 0) {
exceptions.get(0).printStackTrace();
fail("Failed with " + exceptions.size() + " exceptions during overview embedding: ");
}
// now red it back and check that things are coherent
final ImageReader reader= new TIFFImageReaderSpi().createReaderInstance();
reader.setInput(ImageIO.createImageInputStream(org.geotools.test.TestData.file(this, "DEM_.tiff")));
assertEquals(6, reader.getNumImages(true));
reader.dispose();
}
// @Test
// public void wrong() throws FileNotFoundException, IOException{
// // JAI.getDefaultInstance().getTileCache().setMemoryCapacity(512*1024*1024);
// // JAI.getDefaultInstance().getTileScheduler().setParallelism(10);
// // JAI.getDefaultInstance().getTileScheduler().setPrefetchParallelism(10);
//
// final OverviewsEmbedder oe= new OverviewsEmbedder();
// oe.setDownsampleStep(0);
// oe.setNumSteps(-3);
// oe.setScaleAlgorithm("geosolutionsrocks!");
// // use default
// oe.setTileCache(JAI.getDefaultInstance().getTileCache());
// oe.setTileWidth(0);
// oe.setTileHeight(256);
// oe.setSourcePath(TestData.file(this, "DEM_.tiff").getAbsolutePath());
// oe.addProcessingEventListener(new ProcessingEventListener() {
//
// @Override
// public void getNotification(ProcessingEvent event) {
// LOGGER.info(event.toString());
//
// }
//
// @Override
// public void exceptionOccurred(ExceptionEvent event) {
// LOGGER.warning(event.toString());
// }
//
// });
// oe.run();
//
//
//
// }
}