/*
* Copyright (C) 2011 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program 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 General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package org.esa.snap.opendap.ui;
import org.esa.snap.opendap.datamodel.OpendapLeaf;
import org.esa.snap.util.TimeStampExtractor;
import org.junit.Test;
import thredds.catalog.InvDataset;
import ucar.nc2.units.DateRange;
import javax.swing.JCheckBox;
import java.util.GregorianCalendar;
import static org.junit.Assert.*;
/**
* @author Thomas Storm
* @author Tonio Fincke
*/
public class TimeRangeFilterTest {
@Test
public void testAccept_UserStartFileStart() throws Exception {
final JCheckBox filterCheckBox = new JCheckBox();
filterCheckBox.setSelected(true);
TimeRangeFilter filter = new TimeRangeFilter(filterCheckBox);
filter.startDate = new GregorianCalendar(2010, 0, 1, 12, 37, 15).getTime();
filter.endDate = null;
filter.timeStampExtractor = new TimeStampExtractor("yyyyMMdd:hhmmss", "*${startDate}*");
assertTrue(filter.accept(new OpendapLeaf("sth__20100101:192345.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345.nc", createNullDataset())));
assertTrue(filter.accept(new OpendapLeaf("does_not_match_naming_pattern", createNullDataset())));
}
@Test
public void testAccept_UserStartFileBoth() throws Exception {
final JCheckBox filterCheckBox = new JCheckBox();
filterCheckBox.setSelected(true);
TimeRangeFilter filter = new TimeRangeFilter(filterCheckBox);
filter.startDate = new GregorianCalendar(2010, 0, 1, 12, 37, 15).getTime();
filter.endDate = null;
filter.timeStampExtractor = new TimeStampExtractor("yyyyMMdd:hhmmss", "*${startDate}*${endDate}*");
assertTrue(filter.accept(new OpendapLeaf("sth__20100101:192345___20100102:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345___20100102:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345___20091231:233012__.nc", createNullDataset())));
}
@Test
public void testAccept_UserEndFileStart() throws Exception {
final JCheckBox filterCheckBox = new JCheckBox();
filterCheckBox.setSelected(true);
TimeRangeFilter filter = new TimeRangeFilter(filterCheckBox);
filter.startDate = null;
filter.endDate = new GregorianCalendar(2010, 0, 2, 12, 37, 15).getTime();
filter.timeStampExtractor = new TimeStampExtractor("yyyyMMdd:hhmmss", "*${startDate}*");
assertTrue(filter.accept(new OpendapLeaf("sth__20080101:192345.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20111231:192345.nc", createNullDataset())));
}
@Test
public void testAccept_UserEndFileBoth() throws Exception {
TimeRangeFilter filter = new TimeRangeFilter(new JCheckBox());
filter.startDate = null;
filter.endDate = new GregorianCalendar(2010, 0, 2, 12, 37, 15).getTime();
filter.timeStampExtractor = new TimeStampExtractor("yyyyMMdd:hhmmss", "*${startDate}*${endDate}*");
assertTrue(filter.accept(new OpendapLeaf("sth__20100101:192345___20100102:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345___20100103:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20100103:192345___20100103:233012__.nc", createNullDataset())));
}
@Test
public void testAccept_UserBothFileStart() throws Exception {
TimeRangeFilter filter = new TimeRangeFilter(new JCheckBox());
filter.startDate = new GregorianCalendar(2010, 0, 1, 12, 37, 15).getTime();
filter.endDate = new GregorianCalendar(2010, 0, 2, 12, 37, 15).getTime();
filter.timeStampExtractor = new TimeStampExtractor("yyyyMMdd:hhmmss", "*${startDate}*");
assertTrue(filter.accept(new OpendapLeaf("sth__20100101:192345.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20111231:192345.nc", createNullDataset())));
assertTrue(filter.accept(new OpendapLeaf("does_not_match_naming_pattern", createNullDataset())));
}
private static InvDataset createNullDataset() {
return new InvDataset(null, "") {
};
}
@Test
public void testAccept_UserBothFileBoth() throws Exception {
TimeRangeFilter filter = new TimeRangeFilter(new JCheckBox());
filter.startDate = new GregorianCalendar(2010, 0, 1, 12, 37, 15).getTime();
filter.endDate = new GregorianCalendar(2010, 0, 2, 12, 37, 15).getTime();
filter.timeStampExtractor = new TimeStampExtractor("yyyyMMdd:hhmmss", "*${startDate}*${endDate}*");
assertTrue(filter.accept(new OpendapLeaf("sth__20100101:192345___20100102:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345___20100102:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20100101:192345___20100103:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345___20100103:012345__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20091231:192345___20091231:233012__.nc", createNullDataset())));
assertFalse(filter.accept(new OpendapLeaf("sth__20100103:004523___20100103:012345__.nc", createNullDataset())));
assertTrue(filter.accept(new OpendapLeaf("sth__20100101:192345_does_not_match_naming_pattern.nc", createNullDataset())));
assertTrue(filter.accept(new OpendapLeaf("sth__20100104:192345_does_not_match_naming_pattern.nc", createNullDataset())));
assertTrue(filter.accept(new OpendapLeaf("does_not_match_naming_pattern", createNullDataset())));
}
@Test
public void testAccept_ServerSpecifiedTimeRange() throws Exception {
TimeRangeFilter filter = new TimeRangeFilter(new JCheckBox());
filter.startDate = new GregorianCalendar(2010, 0, 1).getTime();
filter.endDate = new GregorianCalendar(2010, 0, 2).getTime();
OpendapLeaf leaf = createLeaf();
assertFalse(filter.accept(leaf));
filter.startDate = new GregorianCalendar(2010, 0, 1).getTime();
filter.endDate = new GregorianCalendar(2011, 0, 2).getTime();
assertTrue(filter.accept(leaf));
filter.startDate = new GregorianCalendar(2010, 0, 2).getTime();
filter.endDate = null;
assertFalse(filter.accept(leaf));
filter.startDate = null;
filter.endDate = new GregorianCalendar(2010, 11, 31).getTime();
assertFalse(filter.accept(leaf));
filter.startDate = new GregorianCalendar(2009, 11, 31).getTime();
filter.endDate = null;
assertTrue(filter.accept(leaf));
filter.startDate = null;
filter.endDate = new GregorianCalendar(2011, 11, 31).getTime();
assertTrue(filter.accept(leaf));
}
private OpendapLeaf createLeaf() {
return new OpendapLeaf("", new InvDataset(null, "") {
@Override
public DateRange getTimeCoverage() {
return new DateRange(new GregorianCalendar(2010, 0, 1).getTime(), new GregorianCalendar(2011, 0, 1).getTime());
}
});
}
}