/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2016, 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 static org.junit.Assert.assertEquals; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; import java.util.TimeZone; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.junit.Before; import org.junit.Test; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; public class DateRangeVisitorTest { private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone("UTC"); private static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; private SimpleDateFormat df; private SimpleFeatureBuilder fb; @Before public void setup() { df = new SimpleDateFormat(UTC_PATTERN); df.setTimeZone(UTC_TIME_ZONE); SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); tb.add("start", Date.class); tb.add("end", Date.class); tb.setName("test"); SimpleFeatureType featureType = tb.buildFeatureType(); fb = new SimpleFeatureBuilder(featureType); } SimpleFeature buildRangeFeature(String from, String to) throws ParseException { fb.add(df.parse(from)); fb.add(df.parse(to)); return fb.buildFeature(null); } @Test public void testSingleRange() throws ParseException { DateRangeVisitor visitor = new DateRangeVisitor("start", "end"); visitor.visit(buildRangeFeature("2008-10-31T00:00:00.000Z", "2008-11-01T00:00:00.000Z")); Set<String> range = visitor.getRange(); assertEquals(1, range.size()); assertEquals("2008-10-31T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1S", range.iterator().next()); } @Test public void testTwoRanges() throws ParseException { DateRangeVisitor visitor = new DateRangeVisitor("start", "end"); visitor.visit(buildRangeFeature("2008-10-31T00:00:00.000Z", "2008-11-01T00:00:00.000Z")); visitor.visit(buildRangeFeature("2008-11-05T00:00:00.000Z", "2008-11-07T00:00:00.000Z")); List<String> range = new ArrayList<String>(visitor.getRange()); assertEquals(2, range.size()); assertEquals("2008-10-31T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1S", range.get(0)); assertEquals("2008-11-05T00:00:00.000Z/2008-11-07T00:00:00.000Z/PT1S", range.get(1)); } @Test public void testThreeRangesOverlapFirst() throws ParseException { DateRangeVisitor visitor = new DateRangeVisitor("start", "end"); visitor.visit(buildRangeFeature("2008-10-28T00:00:00.000Z", "2008-10-31T12:00:00.000Z")); visitor.visit(buildRangeFeature("2008-10-31T00:00:00.000Z", "2008-11-01T00:00:00.000Z")); visitor.visit(buildRangeFeature("2008-11-05T00:00:00.000Z", "2008-11-07T00:00:00.000Z")); List<String> range = new ArrayList<String>(visitor.getRange()); assertEquals(2, range.size()); assertEquals("2008-10-28T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1S", range.get(0)); assertEquals("2008-11-05T00:00:00.000Z/2008-11-07T00:00:00.000Z/PT1S", range.get(1)); } @Test public void testThreeRangesOverlapLast() throws ParseException { DateRangeVisitor visitor = new DateRangeVisitor("start", "end"); visitor.visit(buildRangeFeature("2008-10-31T00:00:00.000Z", "2008-11-01T00:00:00.000Z")); visitor.visit(buildRangeFeature("2008-11-05T00:00:00.000Z", "2008-11-07T00:00:00.000Z")); visitor.visit(buildRangeFeature("2008-11-06T00:00:00.000Z", "2008-11-09T12:00:00.000Z")); List<String> range = new ArrayList<String>(visitor.getRange()); assertEquals(2, range.size()); assertEquals("2008-10-31T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1S", range.get(0)); assertEquals("2008-11-05T00:00:00.000Z/2008-11-09T12:00:00.000Z/PT1S", range.get(1)); } @Test public void testFourRanges() throws ParseException { DateRangeVisitor visitor = new DateRangeVisitor("start", "end"); visitor.visit(buildRangeFeature("2008-10-28T00:00:00.000Z", "2008-10-31T12:00:00.000Z")); visitor.visit(buildRangeFeature("2008-10-31T00:00:00.000Z", "2008-11-01T00:00:00.000Z")); visitor.visit(buildRangeFeature("2008-11-05T00:00:00.000Z", "2008-11-07T00:00:00.000Z")); visitor.visit(buildRangeFeature("2008-11-06T00:00:00.000Z", "2008-11-09T12:00:00.000Z")); List<String> range = new ArrayList<String>(visitor.getRange()); assertEquals(2, range.size()); assertEquals("2008-10-28T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1S", range.get(0)); assertEquals("2008-11-05T00:00:00.000Z/2008-11-09T12:00:00.000Z/PT1S", range.get(1)); } }