/projects/geotools-9.2/modules/plugin/imagemosaic/src/test/java/org/geotools/gce/imagemosaic/CatalogBuilderTest.java
Java | 348 lines | 243 code | 57 blank | 48 comment | 12 complexity | c6aba578d0d1c4f62c5d3deac527924a MD5 | raw file
- /*
- * 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.gce.imagemosaic;
- import java.awt.Dimension;
- import java.awt.Rectangle;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.InetAddress;
- import java.util.Arrays;
- import java.util.Properties;
- import javax.media.jai.PlanarImage;
- import org.apache.commons.io.IOUtils;
- import org.geotools.coverage.grid.GridCoverage2D;
- import org.geotools.coverage.grid.GridEnvelope2D;
- import org.geotools.coverage.grid.GridGeometry2D;
- import org.geotools.coverage.grid.io.AbstractGridFormat;
- import org.geotools.gce.imagemosaic.catalog.GranuleCatalog;
- import org.geotools.gce.imagemosaic.catalogbuilder.CatalogBuilder;
- import org.geotools.gce.imagemosaic.catalogbuilder.CatalogBuilder.ExceptionEvent;
- import org.geotools.gce.imagemosaic.catalogbuilder.CatalogBuilder.ProcessingEvent;
- import org.geotools.gce.imagemosaic.catalogbuilder.CatalogBuilder.ProcessingEventListener;
- import org.geotools.gce.imagemosaic.catalogbuilder.CatalogBuilderConfiguration;
- import org.geotools.geometry.GeneralEnvelope;
- import org.geotools.test.TestData;
- import org.junit.Assert;
- import org.junit.Before;
- import org.junit.Test;
- import org.opengis.parameter.GeneralParameterValue;
- import org.opengis.parameter.ParameterValue;
- /**
- * Testing {@link CatalogBuilder} and its related subclasses.
- *
- * @author Simone Giannecchini, GeoSolutions SAS
- *
- *
- *
- *
- * @source $URL$
- */
- public class CatalogBuilderTest extends Assert {
-
- /** Used to avoid errors if building on a system where hostname is not defined */
- private boolean hostnameDefined;
-
- @Before
- public void setup() {
- try {
- InetAddress.getLocalHost();
- hostnameDefined = true;
- } catch (Exception ex) {
- hostnameDefined = false;
- }
- }
-
- private final class CatalogBuilderListener extends ProcessingEventListener{
- @Override
- public void exceptionOccurred(ExceptionEvent event) {
- throw new RuntimeException(event.getException());
-
- }
- @Override
- public void getNotification(ProcessingEvent event) {
-
- }
-
- }
- @Test
- public void catalogBuilderConfiguration() throws Exception{
- // create a stub configuration
- final CatalogBuilderConfiguration c1= new CatalogBuilderConfiguration();
- c1.setIndexName("index");
- c1.setLocationAttribute("location");
- c1.setAbsolute(true);
- c1.setRootMosaicDirectory(TestData.file(this,"/rgb").toString());
- c1.setIndexingDirectories(Arrays.asList(TestData.file(this,"/rgb").toString()));
- assertNotNull(c1.toString());
-
- // create a second stub configuration
- final CatalogBuilderConfiguration c2= new CatalogBuilderConfiguration();
- c2.setIndexName("index");
- c2.setLocationAttribute("location");
- c2.setAbsolute(true);
- c2.setRootMosaicDirectory(TestData.file(this,"/rgb").toString());
- c2.setIndexingDirectories(Arrays.asList(TestData.file(this,"/rgb").toString()));
- assertTrue(c1.equals(c2));
- assertEquals(c1.hashCode(), c2.hashCode());
-
- CatalogBuilderConfiguration c3 = c2.clone();
- assertTrue(c3.equals(c2));
- assertEquals(c3.hashCode(), c2.hashCode());
-
- //check errors
- final CatalogBuilderConfiguration c4= new CatalogBuilderConfiguration();
- assertNotNull(c4.toString());
-
- }
-
- @Test
- public void buildCatalog() throws FileNotFoundException, IOException{
- if (hostnameDefined){
- CatalogBuilder builder = null;
- ImageMosaicReader reader = null;
- ParameterValue<GridGeometry2D> gg = null;
- GeneralEnvelope envelope = null;
- Dimension dim = null;
- Rectangle rasterArea = null;
- GridEnvelope2D range = null;
- GridCoverage2D coverage = null;
- final ParameterValue<Boolean> useJai = AbstractGridFormat.USE_JAI_IMAGEREAD.createValue();
- useJai.setValue(false);
-
- final ParameterValue<String> tileSize = AbstractGridFormat.SUGGESTED_TILE_SIZE.createValue();
- tileSize.setValue("128,128");
-
- //build a relative index and then make it run
- CatalogBuilderConfiguration c1= new CatalogBuilderConfiguration();
- c1.setIndexName("shpindex");
- c1.setLocationAttribute("location");
- c1.setAbsolute(false);
- c1.setRootMosaicDirectory(TestData.file(this,"/overview").toString());
- c1.setIndexingDirectories(Arrays.asList(TestData.file(this,"/overview/0").toString()));
- assertNotNull(c1.toString());
- //build the index
- builder= new CatalogBuilder(c1);
- builder.addProcessingEventListener(new CatalogBuilderListener());
- builder.run();
- final File relativeMosaic=TestData.file(this,"/overview/"+c1.getIndexName()+".shp");
- assertTrue(relativeMosaic.exists());
-
- assertTrue(new ImageMosaicFormat().accepts(relativeMosaic));
- reader = (ImageMosaicReader) new ImageMosaicReader(relativeMosaic);
- // limit yourself to reading just a bit of it
- gg = AbstractGridFormat.READ_GRIDGEOMETRY2D.createValue();
- envelope = reader.getOriginalEnvelope();
- dim= new Dimension();
- dim.setSize(reader.getOriginalGridRange().getSpan(0)/2.0, reader.getOriginalGridRange().getSpan(1)/2.0);
- rasterArea=(( GridEnvelope2D)reader.getOriginalGridRange());
- rasterArea.setSize(dim);
- range= new GridEnvelope2D(rasterArea);
- gg.setValue(new GridGeometry2D(range,envelope));
-
- // use imageio with defined tiles
-
- // Test the output coverage
- coverage = (GridCoverage2D) reader.read(new GeneralParameterValue[] {gg,useJai ,tileSize});
- Assert.assertNotNull(coverage);
- PlanarImage.wrapRenderedImage( coverage.getRenderedImage()).getTiles();
-
- //caching should be false by default
- Properties props= new Properties();
- InputStream in= null;
- try{
- in= TestData.openStream(this, "/overview/"+c1.getIndexName()+".properties");
- assertNotNull("unable to find mosaic properties file",in);
- props.load(in);
-
- assertTrue(props.containsKey("Caching"));
- assertTrue(props.getProperty("Caching").equalsIgnoreCase("false"));
- } finally {
- if(in!=null){
- IOUtils.closeQuietly(in);
- }
- }
-
- // dispose
- coverage.dispose(true);
- reader.dispose();
-
- //build an absolute index and then make it run
- CatalogBuilderConfiguration c2= new CatalogBuilderConfiguration();
- c2.setIndexName("shpindex_absolute");
- c2.setLocationAttribute("location");
- c2.setAbsolute(true);
- c2.setCaching(true);
- c2.setRootMosaicDirectory(TestData.file(this,"/overview").toString());
- c2.setIndexingDirectories(Arrays.asList(TestData.file(this,"/overview/0").toString()));
- assertNotNull(c2.toString());
- //build the index
- builder= new CatalogBuilder(c2);
- builder.addProcessingEventListener(new CatalogBuilderListener());
- builder.run();
- final File absoluteMosaic=TestData.file(this,"/overview/"+c2.getIndexName()+".shp");
- assertTrue(absoluteMosaic.exists());
-
- //caching should be false by default
- props= new Properties();
- in= null;
- try{
- in= TestData.openStream(this, "/overview/"+c2.getIndexName()+".properties");
- assertNotNull("unable to find mosaic properties file",in);
- props.load(in);
-
- assertTrue(props.containsKey("Caching"));
- assertTrue(props.getProperty("Caching").equalsIgnoreCase("true"));
- } finally {
- if(in!=null){
- IOUtils.closeQuietly(in);
- }
- }
-
- assertTrue(new ImageMosaicFormat().accepts(absoluteMosaic));
- reader = (ImageMosaicReader) new ImageMosaicReader(absoluteMosaic);
- // limit yourself to reading just a bit of it
- gg = AbstractGridFormat.READ_GRIDGEOMETRY2D.createValue();
- envelope = reader.getOriginalEnvelope();
- dim= new Dimension();
- dim.setSize(reader.getOriginalGridRange().getSpan(0)/2.0, reader.getOriginalGridRange().getSpan(1)/2.0);
- rasterArea=(( GridEnvelope2D)reader.getOriginalGridRange());
- rasterArea.setSize(dim);
- range= new GridEnvelope2D(rasterArea);
- gg.setValue(new GridGeometry2D(range,envelope));
-
- // use imageio with defined tiles
-
- // Test the output coverage
- coverage = (GridCoverage2D) reader.read(new GeneralParameterValue[] {gg,useJai ,tileSize});
- Assert.assertNotNull(coverage);
- PlanarImage.wrapRenderedImage( coverage.getRenderedImage()).getTiles();
-
-
- // dispose
- coverage.dispose(true);
- reader.dispose();
- }
- }
-
-
- @Test
- public void buildCachingIndex() throws FileNotFoundException, IOException {
- if (hostnameDefined){
- CatalogBuilder builder = null;
- ImageMosaicReader reader = null;
- FileInputStream inStream = null;
- CatalogBuilderConfiguration c1 = new CatalogBuilderConfiguration();
- c1.setIndexName("shpindex");
- c1.setLocationAttribute("location");
- c1.setAbsolute(false);
- c1.setRootMosaicDirectory(TestData.file(this, "/caching").toString());
- c1.setIndexingDirectories(Arrays.asList(TestData.file(this,"/caching").toString()));
- Properties prop = new Properties();
-
-
- try {
-
- c1.setCaching(false);
-
-
- // build the index
- builder = new CatalogBuilder(c1);
- builder.addProcessingEventListener(new CatalogBuilderListener());
- builder.run();
- final File relativeMosaic = TestData.file(this, "/caching/" + c1.getIndexName() + ".shp");
- final File propertiesFile = TestData.file(this, "/caching/" + c1.getIndexName() + ".properties");
- assertTrue(relativeMosaic.exists());
- inStream = new FileInputStream(propertiesFile);
- prop.load(inStream);
- String value = prop.getProperty("Caching");
- assertNotNull(value);
- assertTrue (value.toLowerCase().equals("false"));
-
-
- assertTrue(new ImageMosaicFormat().accepts(relativeMosaic));
- reader = (ImageMosaicReader) new ImageMosaicReader(relativeMosaic);
-
- GranuleCatalog catalog = reader.rasterManager.granuleCatalog;
- assertTrue(catalog.getClass().toString().endsWith("GTDataStoreGranuleCatalog"));
- } finally {
- if (inStream != null){
- IOUtils.closeQuietly(inStream);
- }
-
- try {
- if (reader != null){
- reader.dispose();
- }
- } catch (Throwable t){
- //Eat exception
- }
- }
-
- try {
-
- c1.setCaching(true);
-
- // build the index
- builder = new CatalogBuilder(c1);
- builder.addProcessingEventListener(new CatalogBuilderListener());
- builder.run();
- final File relativeMosaic = TestData.file(this, "/caching/" + c1.getIndexName() + ".shp");
- final File propertiesFile = TestData.file(this, "/caching/" + c1.getIndexName() + ".properties");
- inStream = new FileInputStream(propertiesFile);
- prop.load(inStream);
-
- String value = prop.getProperty("Caching");
- assertNotNull(value);
- assertTrue (value.toLowerCase().equals("true"));
-
- assertTrue(relativeMosaic.exists());
-
- assertTrue(new ImageMosaicFormat().accepts(relativeMosaic));
- reader = (ImageMosaicReader) new ImageMosaicReader(relativeMosaic);
-
- GranuleCatalog catalog = reader.rasterManager.granuleCatalog;
- assertTrue(catalog.getClass().toString().endsWith("STRTreeGranuleCatalog"));
- } finally {
- if (inStream != null){
- IOUtils.closeQuietly(inStream);
- }
-
- try {
- if (reader != null){
- reader.dispose();
- }
- } catch (Throwable t){
- //Eat exception
- }
- }
- }
- }
- }