/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2010, 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.data;
import org.apache.sis.feature.builder.FeatureTypeBuilder;
import org.apache.sis.storage.DataStoreException;
import org.geotoolkit.data.iterator.CheckCloseFeatureIterator;
import org.geotoolkit.data.memory.MemoryFeatureStore;
import org.geotoolkit.data.query.QueryBuilder;
import org.geotoolkit.util.NamesExt;
import org.junit.Test;
import static org.junit.Assert.*;
import org.opengis.feature.FeatureType;
import org.opengis.util.GenericName;
import org.apache.sis.internal.feature.AttributeConvention;
import org.opengis.filter.Filter;
/**
*
* @author Johann Sorel (Geomatys)
* @module
*/
public class DataUtilitiesTest extends org.geotoolkit.test.TestBase {
private final FeatureStore store;
private final GenericName name1;
private final GenericName name2;
private final GenericName name3;
public DataUtilitiesTest() throws DataStoreException{
store = new MemoryFeatureStore();
FeatureTypeBuilder builder = new FeatureTypeBuilder();
name1 = NamesExt.create("http://test.com", "type1");
name2 = NamesExt.create("http://test.com", "type2");
name3 = NamesExt.create("http://test.com", "type3");
builder = new FeatureTypeBuilder();
builder.setName(name1);
builder.addAttribute(String.class).setName(AttributeConvention.IDENTIFIER_PROPERTY);
builder.addAttribute(String.class).setName("att_string");
FeatureType sft1 = builder.build();
builder = new FeatureTypeBuilder();
builder.setName(name2);
builder.addAttribute(String.class).setName(AttributeConvention.IDENTIFIER_PROPERTY);
builder.addAttribute(String.class).setName("att_string");
FeatureType sft2 = builder.build();
builder = new FeatureTypeBuilder();
builder.setName(name3);
builder.addAttribute(String.class).setName(AttributeConvention.IDENTIFIER_PROPERTY);
builder.addAttribute(String.class).setName("att_string");
FeatureType sft3 = builder.build();
store.createFeatureType(sft1);
store.createFeatureType(sft2);
store.createFeatureType(sft3);
FeatureWriter writer = store.getFeatureWriter(QueryBuilder.filtered(name1.toString(),Filter.EXCLUDE));
for(int i=0; i<10; i++){
writer.next();
writer.write();
}
writer.close();
writer = store.getFeatureWriter(QueryBuilder.filtered(name2.toString(),Filter.EXCLUDE));
for(int i=0; i<10; i++){
writer.next();
writer.write();
}
writer.close();
writer = store.getFeatureWriter(QueryBuilder.filtered(name3.toString(),Filter.EXCLUDE));
for(int i=0; i<10; i++){
writer.next();
writer.write();
}
writer.close();
}
/**
* Test that the collection id is correctly set.
*/
@Test
public void testCollectionId() throws Exception{
FeatureTypeBuilder sftb = new FeatureTypeBuilder();
sftb.setName("temp");
sftb.addAttribute(String.class).setName("att1");
FeatureType ft = sftb.build();
FeatureCollection col = FeatureStoreUtilities.collection("myId", ft);
assertEquals("myId", col.getID());
}
@Test
public void testReaderSequence() throws DataStoreException{
CheckCloseFeatureIterator reader1 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name1)));
CheckCloseFeatureIterator reader2 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name2)));
CheckCloseFeatureIterator reader3 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name3)));
FeatureReader fr = FeatureStoreUtilities.sequence(reader1,reader2,reader3);
assertFalse(reader1.isClosed());
assertFalse(reader2.isClosed());
assertFalse(reader3.isClosed());
int i=0;
while(fr.hasNext()){
fr.next();
i++;
}
fr.close();
assertEquals(30,i);
assertTrue(reader1.isClosed());
assertTrue(reader2.isClosed());
assertTrue(reader3.isClosed());
//check ending in the middle--------------------------------------------
reader1 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name1)));
reader2 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name2)));
reader3 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name3)));
fr = FeatureStoreUtilities.sequence(reader1,reader2,reader3);
assertFalse(reader1.isClosed());
assertFalse(reader2.isClosed());
assertFalse(reader3.isClosed());
fr.next();
fr.next();
fr.close();
assertTrue(reader1.isClosed());
assertTrue(reader2.isClosed());
assertTrue(reader3.isClosed());
}
@Test
public void testIteratorSequence() throws DataStoreException{
CheckCloseFeatureIterator reader1 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name1)));
CheckCloseFeatureIterator reader2 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name2)));
CheckCloseFeatureIterator reader3 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name3)));
FeatureIterator fr = FeatureStoreUtilities.sequence((FeatureIterator)reader1,(FeatureIterator)reader2,(FeatureIterator)reader3);
assertFalse(reader1.isClosed());
assertFalse(reader2.isClosed());
assertFalse(reader3.isClosed());
int i=0;
while(fr.hasNext()){
fr.next();
i++;
}
fr.close();
assertEquals(30,i);
assertTrue(reader1.isClosed());
assertTrue(reader2.isClosed());
assertTrue(reader3.isClosed());
//check ending in the middle--------------------------------------------
reader1 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name1)));
reader2 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name2)));
reader3 = new CheckCloseFeatureIterator(store.getFeatureReader(QueryBuilder.all(name3)));
fr = FeatureStoreUtilities.sequence((FeatureIterator)reader1,(FeatureIterator)reader2,(FeatureIterator)reader3);
assertFalse(reader1.isClosed());
assertFalse(reader2.isClosed());
assertFalse(reader3.isClosed());
fr.next();
fr.next();
fr.close();
assertTrue(reader1.isClosed());
assertTrue(reader2.isClosed());
assertTrue(reader3.isClosed());
}
@Test
public void testCollectionSequence() throws DataStoreException{
FeatureCollection fc1 = store.createSession(false).getFeatureCollection(QueryBuilder.all(name1));
FeatureCollection fc2 = store.createSession(false).getFeatureCollection(QueryBuilder.all(name2));
FeatureCollection fc3 = store.createSession(false).getFeatureCollection(QueryBuilder.all(name3));
FeatureCollection col = FeatureStoreUtilities.sequence("id", fc1, fc2, fc3);
CheckCloseFeatureIterator reader = new CheckCloseFeatureIterator(col.iterator());
assertFalse(reader.isClosed());
int i=0;
while(reader.hasNext()){
reader.next();
i++;
}
reader.close();
assertEquals(30,i);
assertTrue(reader.isClosed());
//check ending in the middle--------------------------------------------
reader = new CheckCloseFeatureIterator(col.iterator());
assertFalse(reader.isClosed());
reader.next();
reader.next();
reader.close();
assertTrue(reader.isClosed());
}
}