/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2007-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
package org.geotools.coverageio.gdal.jp2mrsid;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.logging.Level;
import javax.media.jai.PlanarImage;
import org.gdal.gdal.Driver;
import org.gdal.gdal.gdal;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridGeometry2D;
import org.geotools.coverage.grid.io.AbstractGridFormat;
import org.geotools.coverage.grid.io.GridFormatFactorySpi;
import org.geotools.coverage.grid.io.GridFormatFinder;
import org.geotools.coverageio.gdal.GDALTestCase;
import org.geotools.geometry.GeneralEnvelope;
import org.geotools.test.TestData;
import org.junit.Assert;
import org.junit.Test;
import org.opengis.parameter.GeneralParameterValue;
import org.opengis.parameter.ParameterValue;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
/**
* @author Daniele Romagnoli, GeoSolutions
* @author Simone Giannecchini (simboss), GeoSolutions
*
* Testing {@link JP2MrSIDReader}
*
* @source $URL$
*/
public final class JP2MrSIDTest extends GDALTestCase {
/**
* file name of a valid JP2K sample data to be used for tests.
*/
private final static String fileName = "sample.jp2";
static {
try {
gdal.AllRegister();
final Driver driverkak = gdal.GetDriverByName("JP2KAK");
final Driver driverecw = gdal.GetDriverByName("JP2ECW");
if (driverkak != null || driverecw != null) {
final StringBuffer skipDriver = new StringBuffer("");
if (driverkak != null)
skipDriver.append("JP2KAK ");
if (driverecw != null)
skipDriver.append("JP2ECW");
gdal.SetConfigOption("GDAL_SKIP", skipDriver.toString());
gdal.AllRegister();
}
} catch (UnsatisfiedLinkError e) {
if (LOGGER.isLoggable(Level.WARNING))
LOGGER.warning("GDAL library unavailable.");
}
}
/**
* Creates a new instance of JP2MrSIDTest
*
* @param name
*/
public JP2MrSIDTest() {
super("JP2MrSID", new JP2MrSIDFormatFactory());
}
@Test
public void test() throws Exception {
if (!testingEnabled()) {
return;
}
File file =null;
try {
file = TestData.file(this, fileName);
}catch (FileNotFoundException fnfe){
LOGGER.warning("test-data not found: " + fileName + "\nTests are skipped");
return;
} catch (IOException ioe) {
LOGGER.warning("test-data not found: " + fileName + "\nTests are skipped");
return;
}
final JP2MrSIDReader reader = new JP2MrSIDReader(file);
final ParameterValue gg = (ParameterValue) ((AbstractGridFormat) reader.getFormat()).READ_GRIDGEOMETRY2D
.createValue();
final GeneralEnvelope oldEnvelope = reader.getOriginalEnvelope();
gg.setValue(new GridGeometry2D(reader.getOriginalGridRange(), oldEnvelope));
final GridCoverage2D gc = (GridCoverage2D) reader.read(new GeneralParameterValue[] { gg });
Assert.assertNotNull(gc);
if (TestData.isInteractiveTest()) {
gc.show();
} else {
PlanarImage.wrapRenderedImage(gc.getRenderedImage()).getTiles();
}
if (TestData.isInteractiveTest()) {
// printing CRS information
LOGGER.info(gc.getCoordinateReferenceSystem().toWKT());
LOGGER.info(gc.getEnvelope().toString());
}
}
@Test
public void testIsAvailable() throws NoSuchAuthorityCodeException, FactoryException {
if (!testingEnabled()) {
return;
}
GridFormatFinder.scanForPlugins();
Iterator list = GridFormatFinder.getAvailableFormats().iterator();
boolean found = false;
GridFormatFactorySpi fac = null;
while (list.hasNext()) {
fac = (GridFormatFactorySpi) list.next();
if (fac instanceof JP2MrSIDFormatFactory) {
found = true;
break;
}
}
Assert.assertTrue("JP2MrSIDFormatFactory not registered", found);
Assert.assertTrue("JP2MrSIDFormatFactory not available", fac.isAvailable());
Assert.assertNotNull(new JP2MrSIDFormatFactory().createFormat());
}
}