/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2012, Geomatys
*
* 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.geotoolkit.storage.coverage;
import org.apache.sis.storage.DataStoreException;
import org.geotoolkit.coverage.StorageCountListener;
import org.geotoolkit.coverage.memory.MemoryCoverageStore;
import org.geotoolkit.coverage.grid.GridCoverage2D;
import org.geotoolkit.coverage.grid.GridCoverageBuilder;
import org.geotoolkit.coverage.io.GridCoverageWriter;
import org.geotoolkit.util.NamesExt;
import org.apache.sis.referencing.CommonCRS;
import org.junit.Test;
import org.opengis.util.GenericName;
import static org.junit.Assert.*;
/**
* Coverage store event tests.
*
* @author Johann Sorel (Geomatys)
*/
public abstract class AbstractCoverageStoreEventTest extends org.geotoolkit.test.TestBase {
protected abstract CoverageStore createStore() throws Exception ;
/**
* Check events
*/
@Test
public void testEvent() throws DataStoreException {
final StorageCountListener storelistener = new StorageCountListener();
final StorageCountListener reflistener = new StorageCountListener();
final MemoryCoverageStore store = new MemoryCoverageStore();
store.addStorageListener(storelistener);
assertEquals(0, store.getNames().size());
final GenericName name = NamesExt.create(store.getDefaultNamespace(), "test");
final CoverageReference ref = store.create(name);
assertNotNull(ref);
assertEquals(1, storelistener.numManageEvent);
assertEquals(0, storelistener.numContentEvent);
assertEquals(null, storelistener.lastContentEvent);
assertEquals(name, storelistener.lastManagementEvent.getCoverageName());
assertEquals(null, storelistener.lastManagementEvent.getPyramidId());
assertEquals(null, storelistener.lastManagementEvent.getMosaicId());
assertEquals(CoverageStoreManagementEvent.Type.COVERAGE_ADD, storelistener.lastManagementEvent.getType());
final float[][] data = new float[][]{{1}};
final GridCoverageBuilder gcb = new GridCoverageBuilder();
gcb.setCoordinateReferenceSystem(CommonCRS.WGS84.normalizedGeographic());
gcb.setRenderedImage(data);
gcb.setEnvelope(-180,-90,180,90);
final GridCoverage2D coverage = gcb.getGridCoverage2D();
ref.addStorageListener(reflistener);
final GridCoverageWriter writer = ref.acquireWriter();
writer.write(coverage, null);
ref.recycle(writer);
assertEquals(1, storelistener.numManageEvent);
assertEquals(1, storelistener.numContentEvent);
assertEquals(name, storelistener.lastContentEvent.getCoverageName());
assertEquals(null, storelistener.lastContentEvent.getPyramidId());
assertEquals(null, storelistener.lastContentEvent.getMosaicId());
assertEquals(null, storelistener.lastContentEvent.getTiles());
assertEquals(CoverageStoreContentEvent.Type.DATA_UPDATE, storelistener.lastContentEvent.getType());
assertEquals(0, reflistener.numManageEvent);
assertEquals(1, reflistener.numContentEvent);
assertEquals(null, reflistener.lastManagementEvent);
assertEquals(name, reflistener.lastContentEvent.getCoverageName());
assertEquals(null, reflistener.lastContentEvent.getPyramidId());
assertEquals(null, reflistener.lastContentEvent.getMosaicId());
assertEquals(null, reflistener.lastContentEvent.getTiles());
assertEquals(CoverageStoreContentEvent.Type.DATA_UPDATE, reflistener.lastContentEvent.getType());
}
}