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

Reply via email to