231 lines
10 KiB
Java
231 lines
10 KiB
Java
/*
|
|
* GeoTools - The Open Source Java GIS Toolkit
|
|
* http://geotools.org
|
|
*
|
|
* (C) 2002-2011, 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 it.geosolutions.geoserver.rest.manager;
|
|
|
|
import it.geosolutions.geoserver.rest.GeoserverRESTTest;
|
|
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList;
|
|
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList.RESTStructuredCoverageGranule;
|
|
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema;
|
|
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema.RESTStructuredCoverageIndexAttribute;
|
|
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy;
|
|
import it.geosolutions.geoserver.rest.encoder.coverage.GSImageMosaicEncoder;
|
|
import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder;
|
|
import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation;
|
|
|
|
import java.net.URL;
|
|
import java.util.Iterator;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
|
/**
|
|
* Self contained test for working with Structured readers
|
|
*
|
|
*
|
|
* @author Simone Giannecchini, simone.giannecchini@geo-solutions.it
|
|
* @author Daniele Romagnoli, GeoSolutions SAS
|
|
*
|
|
*/
|
|
public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest {
|
|
|
|
private final static Logger LOGGER = LoggerFactory.getLogger(GeoServerRESTImageMosaicManagerTest.class);
|
|
|
|
|
|
@Test
|
|
public void createAndDelete() throws Exception{
|
|
if (!enabled()) {
|
|
return;
|
|
}
|
|
GeoServerRESTStructuredGridCoverageReaderManager manager =
|
|
new GeoServerRESTStructuredGridCoverageReaderManager(new URL(RESTURL), RESTUSER, RESTPW);
|
|
|
|
// create mosaic
|
|
boolean create=manager.create("it.geosolutions", "mosaic",new ClassPathResource("testdata/granules/mosaic.zip").getFile().getAbsolutePath());
|
|
assertTrue(create);
|
|
|
|
// enable dimension
|
|
fixDimensions("it.geosolutions", "mosaic", "mosaic");
|
|
|
|
// check index format
|
|
RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema("it.geosolutions", "mosaic","mosaic");
|
|
assertTrue(create);
|
|
|
|
assertNotNull(indexFormat);
|
|
assertFalse(indexFormat.isEmpty());
|
|
assertEquals(5, indexFormat.size());
|
|
Iterator<RESTStructuredCoverageIndexAttribute> iterator = indexFormat.iterator();
|
|
while (iterator.hasNext()) {
|
|
final RESTStructuredCoverageIndexAttribute element = iterator.next();
|
|
final String elementName = element.getName();
|
|
if (elementName.equals("location")) {
|
|
assertEquals("0", element.getMinOccurs());
|
|
assertEquals("1", element.getMaxOccurs());
|
|
assertEquals("true", element.getNillable());
|
|
assertEquals("java.lang.String", element.getBinding());
|
|
} else if (elementName.equals("time")) {
|
|
assertEquals("0", element.getMinOccurs());
|
|
assertEquals("1", element.getMaxOccurs());
|
|
assertEquals("true", element.getNillable());
|
|
assertEquals("java.util.Date", element.getBinding());
|
|
} else if (elementName.equals("date")) {
|
|
assertEquals("0", element.getMinOccurs());
|
|
assertEquals("1", element.getMaxOccurs());
|
|
assertEquals("true", element.getNillable());
|
|
assertEquals("java.lang.String", element.getBinding());
|
|
} else if (elementName.equals("depth")) {
|
|
assertEquals("0", element.getMinOccurs());
|
|
assertEquals("1", element.getMaxOccurs());
|
|
assertEquals("true", element.getNillable());
|
|
assertEquals("java.lang.Integer", element.getBinding());
|
|
}
|
|
}
|
|
|
|
RESTStructuredCoverageGranulesList granulesList = null;
|
|
RESTStructuredCoverageGranule granule = null;
|
|
// get some granules by id
|
|
// manager.getGranuleById("it.geosolutions", "mosaic","mosaic","2");
|
|
// assertNotNull(granulesList);
|
|
// assertSame(1, granulesList.size());
|
|
// assertFalse(granulesList.isEmpty());
|
|
// RESTStructuredCoverageGranule granule = granulesList.get(0);
|
|
// assertNotNull(granule);
|
|
// assertEquals(granule.getAttributeByIndex(4), "1250.0");
|
|
// assertEquals(granule.getAttributeByName("elevation"), "1250.0");
|
|
|
|
|
|
// get with paging
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic" , null, 0, 1);
|
|
assertNotNull(granulesList);
|
|
assertEquals(1, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, 2);
|
|
assertNotNull(granulesList);
|
|
assertEquals(2, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null);
|
|
assertNotNull(granulesList);
|
|
assertEquals(4, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", "depth = 100", null, null);
|
|
assertNotNull(granulesList);
|
|
assertEquals(2, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", "depth = 100 AND date='20081101T0000000'", null, null);
|
|
assertNotNull(granulesList);
|
|
assertEquals(1, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
// remove by filter
|
|
final String fileLocation = "NCOM_wattemp_100_20081101T0000000_12.tiff";
|
|
boolean result = manager.removeGranulesByCQL("it.geosolutions", "mosaic", "mosaic", "location = '" + fileLocation + "'");
|
|
Assert.assertTrue(result);
|
|
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null);
|
|
assertNotNull(granulesList);
|
|
assertEquals(3, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
// Readding that granule
|
|
// use reflection to get the store URL since coveragestore only returns name and workspace
|
|
result = manager.harvestExternal("it.geosolutions", "mosaic", "imagemosaic", new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() );
|
|
Assert.assertTrue(result);
|
|
|
|
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null);
|
|
assertNotNull(granulesList);
|
|
assertEquals(4, granulesList.size());
|
|
assertFalse(granulesList.isEmpty());
|
|
granule = granulesList.get(0);
|
|
assertNotNull(granule);
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* This method enables the various dimensions for the coverage autocreated for this test.
|
|
*
|
|
* @param wsName the workspace
|
|
* @param coverageStoreName the coverage store name
|
|
* @param csname the coverage name
|
|
*/
|
|
private void fixDimensions(String wsName, String coverageStoreName, String csname) {
|
|
|
|
final GSImageMosaicEncoder coverageEncoder = new GSImageMosaicEncoder();
|
|
/*
|
|
* unused in mosaic creation
|
|
* this is only useful if you want to modify an existing coverage:
|
|
* publisher.configureCoverage(ce, wsname, csname);
|
|
* or create a new one from an existing store:
|
|
* publisher.createCoverage(ce, wsname, csname);
|
|
*/
|
|
coverageEncoder.setName("mosaic");
|
|
|
|
coverageEncoder.setAllowMultithreading(true);
|
|
coverageEncoder.setBackgroundValues("");
|
|
coverageEncoder.setFilter("");
|
|
coverageEncoder.setInputTransparentColor("");
|
|
coverageEncoder.setLatLonBoundingBox(-180, -90, 180, 90, "EPSG:4326");
|
|
coverageEncoder.setMaxAllowedTiles(11);
|
|
coverageEncoder.setNativeBoundingBox(-180, -90, 180, 90, "EPSG:4326");
|
|
coverageEncoder.setProjectionPolicy(ProjectionPolicy.NONE);
|
|
coverageEncoder.setSRS("EPSG:4326");
|
|
|
|
// activate time
|
|
final GSDimensionInfoEncoder time=new GSDimensionInfoEncoder(true);
|
|
time.setUnit("Seconds");
|
|
time.setUnitSymbol("s");
|
|
time.setPresentation(Presentation.LIST);
|
|
coverageEncoder.setMetadataDimension("time", time);
|
|
|
|
// activate date
|
|
final GSDimensionInfoEncoder date=new GSDimensionInfoEncoder(true);
|
|
date.setPresentation(Presentation.LIST);
|
|
coverageEncoder.setMetadataDimension("custom_dimension_DATE", date);
|
|
|
|
// activate depth
|
|
final GSDimensionInfoEncoder depth=new GSDimensionInfoEncoder(true);
|
|
depth.setPresentation(Presentation.LIST);
|
|
depth.setUnit("Meters");
|
|
depth.setUnitSymbol("m");
|
|
coverageEncoder.setMetadataDimension("custom_dimension_DEPTH", depth);
|
|
|
|
|
|
boolean config=publisher.configureCoverage(coverageEncoder, wsName, csname);
|
|
assertTrue(config);
|
|
|
|
}
|
|
|
|
}
|