new processor for adding time from granule name. updated tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/commit/42a3379a Tree: http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/tree/42a3379a Diff: http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/diff/42a3379a Branch: refs/heads/master Commit: 42a3379a0867cb7b705dd518b46246037a7ecd9d Parents: fe2f7e6 Author: Frank Greguska <[email protected]> Authored: Tue Jan 2 15:42:37 2018 -0800 Committer: Frank Greguska <[email protected]> Committed: Tue Jan 2 15:42:37 2018 -0800 ---------------------------------------------------------------------- .../processors/AddDayOfYearAttribute.java | 9 +-- .../processors/AddTimeFromGranuleName.java | 73 +++++++++++++++++ .../processors/TestAddTimeFromGranuleName.java | 82 ++++++++++++++++++++ .../processors/TestAddTimeToSpatialSpec.java | 20 +++++ 4 files changed, 178 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/blob/42a3379a/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddDayOfYearAttribute.java ---------------------------------------------------------------------- diff --git a/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddDayOfYearAttribute.java b/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddDayOfYearAttribute.java index 11ed428..d5acd10 100644 --- a/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddDayOfYearAttribute.java +++ b/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddDayOfYearAttribute.java @@ -13,7 +13,7 @@ import java.util.regex.Pattern; public class AddDayOfYearAttribute { - private String regex; + private Pattern regex; /** * Reuqires regex that defines EXACTLY one capturing group that contains the day of year when matched with the @@ -24,7 +24,7 @@ public class AddDayOfYearAttribute { */ @Autowired public AddDayOfYearAttribute(String regex) { - this.regex = regex; + this.regex = Pattern.compile(regex); } /** @@ -35,11 +35,8 @@ public class AddDayOfYearAttribute { */ public NexusContent.NexusTile setDayOfYearFromGranuleName(NexusContent.NexusTile nexusTile) { - Pattern thePattern = Pattern.compile(this.regex); - - String granuleName = nexusTile.getSummary().getGranule(); - Matcher granuleNameMatcher = thePattern.matcher(granuleName); + Matcher granuleNameMatcher = this.regex.matcher(granuleName); Boolean granuleNameMatched = granuleNameMatcher.find(); if (!granuleNameMatched) { http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/blob/42a3379a/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddTimeFromGranuleName.java ---------------------------------------------------------------------- diff --git a/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddTimeFromGranuleName.java b/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddTimeFromGranuleName.java new file mode 100644 index 0000000..8530f44 --- /dev/null +++ b/src/main/java/gov/nasa/jpl/nexus/ningester/processors/AddTimeFromGranuleName.java @@ -0,0 +1,73 @@ +/***************************************************************************** +* Copyright (c) 2018 Jet Propulsion Laboratory, +* California Institute of Technology. All rights reserved +*****************************************************************************/ +package gov.nasa.jpl.nexus.ningester.processors; + +import org.nasa.jpl.nexus.ingest.wiretypes.NexusContent; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class AddTimeFromGranuleName{ + + + private Pattern regex; + private SimpleDateFormat dateFormat; + + public AddTimeFromGranuleName(String regex, String dateFormat) { + this.regex = Pattern.compile(regex); + this.dateFormat = new SimpleDateFormat(dateFormat, Locale.US); + this.dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + public NexusContent.NexusTile setTimeFromGranuleName(NexusContent.NexusTile inputTile) { + + NexusContent.NexusTile.Builder outTileBuilder = NexusContent.NexusTile.newBuilder().mergeFrom(inputTile); + + switch(inputTile.getTile().getTileTypeCase()){ + case GRID_TILE: + + String granuleName = inputTile.getSummary().getGranule(); + Matcher granuleNameMatcher = this.regex.matcher(granuleName); + Boolean granuleNameMatched = granuleNameMatcher.find(); + + if (!granuleNameMatched) { + throw new RuntimeException("regex did not match granuleName."); + } + + if (granuleNameMatcher.groupCount() != 1) { + throw new RuntimeException("regex does not have exactly one capturing group."); + } + + if (granuleNameMatcher.group(1).length() <= 0) { + throw new RuntimeException("group does not contain match."); + } + + String dateTimeString = granuleNameMatcher.group(1); + Date dateTime = null; + try { + dateTime = dateFormat.parse(dateTimeString); + } catch (ParseException e) { + throw new RuntimeException(e); + } + + Long secondsSinceEpoch = (dateTime.getTime() / 1000); + + outTileBuilder.getTileBuilder().getGridTileBuilder().setTime(secondsSinceEpoch); + outTileBuilder.getSummaryBuilder().getStatsBuilder().setMinTime(secondsSinceEpoch); + outTileBuilder.getSummaryBuilder().getStatsBuilder().setMaxTime(secondsSinceEpoch); + break; + default: + throw new UnsupportedOperationException("Can only handle GridTile at this time."); + } + + return outTileBuilder.build(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/blob/42a3379a/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeFromGranuleName.java ---------------------------------------------------------------------- diff --git a/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeFromGranuleName.java b/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeFromGranuleName.java new file mode 100644 index 0000000..161541b --- /dev/null +++ b/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeFromGranuleName.java @@ -0,0 +1,82 @@ +/***************************************************************************** + * Copyright (c) 2018 Jet Propulsion Laboratory, + * California Institute of Technology. All rights reserved + *****************************************************************************/ +package gov.nasa.jpl.nexus.ningester.processors; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.nasa.jpl.nexus.ingest.wiretypes.NexusContent; + +import java.text.ParseException; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.isA; +import static org.hamcrest.MatcherAssert.assertThat; + + +public class TestAddTimeFromGranuleName { + + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void testSuccessfulMatch() { + String regex = "^.*(\\d{7})\\."; + String dateFormat = "yyyyDDD"; + + String granuleName = "A2012001.L3m_DAY_NSST_sst_4km.nc"; + Long expectedTime = 1325376000L; // 01/01/2012 00:00:00 in epoch time + NexusContent.NexusTile nexusTile = NexusContent.NexusTile.newBuilder().setSummary( + NexusContent.TileSummary.newBuilder() + .setGranule(granuleName) + .build() + ).setTile( + NexusContent.TileData.newBuilder() + .setGridTile( + NexusContent.GridTile.newBuilder( + + ).build() + ).build() + ).build(); + + AddTimeFromGranuleName processor = new AddTimeFromGranuleName(regex, dateFormat); + + NexusContent.NexusTile result = processor.setTimeFromGranuleName(nexusTile); + + assertThat(result.getTile().getGridTile().getTime(), is(expectedTime)); + assertThat(result.getSummary().getStats().getMinTime(), is(expectedTime)); + assertThat(result.getSummary().getStats().getMaxTime(), is(expectedTime)); + } + + @Test + public void testUnparseable() { + String regex = "^.*(\\d{7})\\."; + String dateFormat = "yyyyDDDss"; + + String granuleName = "A2012001.L3m_DAY_NSST_sst_4km.nc"; + + thrown.expect(RuntimeException.class); + thrown.expectCause(isA(ParseException.class)); + + NexusContent.NexusTile nexusTile = NexusContent.NexusTile.newBuilder().setSummary( + NexusContent.TileSummary.newBuilder() + .setGranule(granuleName) + .build() + ).setTile( + NexusContent.TileData.newBuilder() + .setGridTile( + NexusContent.GridTile.newBuilder( + + ).build() + ).build() + ).build(); + + AddTimeFromGranuleName processor = new AddTimeFromGranuleName(regex, dateFormat); + + NexusContent.NexusTile result = processor.setTimeFromGranuleName(nexusTile); + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-sdap-ningester/blob/42a3379a/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeToSpatialSpec.java ---------------------------------------------------------------------- diff --git a/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeToSpatialSpec.java b/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeToSpatialSpec.java index 302ae04..9650c93 100644 --- a/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeToSpatialSpec.java +++ b/src/test/java/gov/nasa/jpl/nexus/ningester/processors/TestAddTimeToSpatialSpec.java @@ -30,4 +30,24 @@ public class TestAddTimeToSpatialSpec { Assert.assertEquals(expected, result); } + @Test + public void testTimeVarName() { + + String testSpec = "test:0:1,script:3:4"; + String timeVarName = "theTime"; + + AddTimeToSectionSpec processor = new AddTimeToSectionSpec(4, "afilepath"); + processor.setTimeVar(timeVarName); + + String expected = "theTime:0:1,test:0:1,script:3:4;" + + "theTime:1:2,test:0:1,script:3:4;" + + "theTime:2:3,test:0:1,script:3:4;" + + "theTime:3:4,test:0:1,script:3:4;" + + "file://afilepath"; + + String result = processor.process(testSpec); + + Assert.assertEquals(expected, result); + } + } \ No newline at end of file
