Brian, you are awesome! Can you create JIRA issues for some of these so they show up in CHANGES.txt? I know being at Google didn't make you forget that! :)
Cheers, Chris -----Original Message----- From: "[email protected]" <[email protected]> Reply-To: "[email protected]" <[email protected]> Date: Friday, May 2, 2014 9:32 AM To: "[email protected]" <[email protected]> Subject: svn commit: r1591965 - in /oodt/trunk/filemgr/src: main/java/org/apache/oodt/cas/filemgr/metadata/extractors/examples/DateTime ExpandMetExtractor.java test/org/apache/oodt/cas/filemgr/metadata/extractors/examples/TestDateTimeE xpandMetExtractor.java >Author: bfoster >Date: Fri May 2 16:32:32 2014 >New Revision: 1591965 > >URL: http://svn.apache.org/r1591965 >Log: >-Added new Filemgr MetExtractor which expands a given metadata date time >field out into multiple metadata fields (i.e. year, month, day, hour, >minute, and second) to enable more fine tune queries. > >Added: > >oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/metadata/extr >actors/examples/DateTimeExpandMetExtractor.java (with props) > >oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/metadata/extractor >s/examples/TestDateTimeExpandMetExtractor.java (with props) > >Added: >oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/metadata/extr >actors/examples/DateTimeExpandMetExtractor.java >URL: >http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/main/java/org/apache/o >odt/cas/filemgr/metadata/extractors/examples/DateTimeExpandMetExtractor.ja >va?rev=1591965&view=auto >========================================================================== >==== >--- >oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/metadata/extr >actors/examples/DateTimeExpandMetExtractor.java (added) >+++ >oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/metadata/extr >actors/examples/DateTimeExpandMetExtractor.java Fri May 2 16:32:32 2014 >@@ -0,0 +1,112 @@ >+/* >+ * Licensed to the Apache Software Foundation (ASF) under one or more >+ * contributor license agreements. See the NOTICE file distributed with >+ * this work for additional information regarding copyright ownership. >+ * The ASF licenses this file to You under the Apache License, Version >2.0 >+ * (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * >+ * http://www.apache.org/licenses/LICENSE-2.0 >+ * >+ * Unless required by applicable law or agreed to in writing, software >+ * distributed under the License is distributed on an "AS IS" BASIS, >+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >implied. >+ * See the License for the specific language governing permissions and >+ * limitations under the License. >+ */ >+package org.apache.oodt.cas.filemgr.metadata.extractors.examples; >+ >+// OODT imports >+import >org.apache.oodt.cas.filemgr.metadata.extractors.AbstractFilemgrMetExtracto >r; >+import org.apache.oodt.cas.filemgr.structs.Product; >+import org.apache.oodt.cas.metadata.Metadata; >+import org.apache.oodt.cas.metadata.exceptions.MetExtractionException; >+import org.apache.oodt.cas.metadata.util.PathUtils; >+ >+// Google imports >+import com.google.common.base.Strings; >+ >+/** >+ * Expands a given metadata date time field out into multiple metadata >fields (i.e. year, month, >+ * day, hour, minute, and second). >+ * >+ * @author [email protected] (Brian Foster) >+ */ >+public class DateTimeExpandMetExtractor extends >AbstractFilemgrMetExtractor { >+ >+ private static final String FULL_DATE_TIME_KEY = "FullDateTimeKey"; >+ private static final String FULL_DATE_TIME_FORMAT = >"FullDateTimeFormat"; >+ >+ private static final String YEAR_KEY = "YearKey"; >+ private static final String MONTH_KEY = "MonthKey"; >+ private static final String DAY_KEY = "DayKey"; >+ private static final String HOUR_KEY = "HourKey"; >+ private static final String MINUTE_KEY = "MinuteKey"; >+ private static final String SECOND_KEY = "SecondKey"; >+ >+ private String fullDateTimeKey; >+ private String fullDateTimeFormat; >+ private String yearKey; >+ private String monthKey; >+ private String dayKey; >+ private String hourKey; >+ private String minuteKey; >+ private String secondKey; >+ >+ @Override >+ public void doConfigure() { >+ fullDateTimeKey = getKey(FULL_DATE_TIME_KEY); >+ fullDateTimeFormat = getKey(FULL_DATE_TIME_FORMAT); >+ yearKey = getKey(YEAR_KEY); >+ monthKey = getKey(MONTH_KEY); >+ dayKey = getKey(DAY_KEY); >+ hourKey = getKey(HOUR_KEY); >+ minuteKey = getKey(MINUTE_KEY); >+ secondKey = getKey(SECOND_KEY); >+ } >+ >+ @Override >+ public Metadata doExtract(Product product, Metadata metadata) throws >MetExtractionException { >+ String fullDateTime = getFullDateTime(metadata); >+ >+ Metadata extractMetadata = new Metadata(); >+ createDateField(extractMetadata, yearKey, fullDateTime, >fullDateTimeFormat, "yyyy"); >+ createDateField(extractMetadata, monthKey, fullDateTime, >fullDateTimeFormat, "MM"); >+ createDateField(extractMetadata, dayKey, fullDateTime, >fullDateTimeFormat, "dd"); >+ createDateField(extractMetadata, hourKey, fullDateTime, >fullDateTimeFormat, "HH"); >+ createDateField(extractMetadata, minuteKey, fullDateTime, >fullDateTimeFormat, "mm"); >+ createDateField(extractMetadata, secondKey, fullDateTime, >fullDateTimeFormat, "ss"); >+ return extractMetadata; >+ } >+ >+ private String getKey(String key) { >+ if (configuration.containsKey(key)) { >+ return configuration.getProperty(key); >+ } else { >+ return null; >+ } >+ } >+ >+ private String getFullDateTime(Metadata metadata) >+ throws MetExtractionException { >+ if (!Strings.isNullOrEmpty(fullDateTimeKey)) { >+ return metadata.getMetadata(fullDateTimeKey); >+ } else { >+ throw new MetExtractionException("Failed to find DateTimeKey " + >fullDateTimeKey); >+ } >+ } >+ >+ private void createDateField(Metadata metadata, String fieldKey, >String fullDateTime, >+ String fullDateTimeFormat, String fieldFormat) throws >MetExtractionException { >+ if (!Strings.isNullOrEmpty(fieldKey)) { >+ try { >+ metadata.addMetadata(fieldKey, >PathUtils.doDynamicReplacement(String.format( >+ "[FORMAT(%s,%s,%s)]", fullDateTimeFormat, fullDateTime, >fieldFormat))); >+ } catch (Exception e) { >+ throw new MetExtractionException(String.format( >+ "Failed to create field for key %s from fullDateTime %s and >fullDateTimeFormat %s", >+ fieldKey, fullDateTime, fullDateTimeFormat), e); >+ } >+ } >+ } >+} > >Propchange: >oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/metadata/extr >actors/examples/DateTimeExpandMetExtractor.java >-------------------------------------------------------------------------- >---- > svn:mime-type = text/plain > >Added: >oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/metadata/extractor >s/examples/TestDateTimeExpandMetExtractor.java >URL: >http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/test/org/apache/oodt/c >as/filemgr/metadata/extractors/examples/TestDateTimeExpandMetExtractor.jav >a?rev=1591965&view=auto >========================================================================== >==== >--- >oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/metadata/extractor >s/examples/TestDateTimeExpandMetExtractor.java (added) >+++ >oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/metadata/extractor >s/examples/TestDateTimeExpandMetExtractor.java Fri May 2 16:32:32 2014 >@@ -0,0 +1,125 @@ >+/* >+ * Licensed to the Apache Software Foundation (ASF) under one or more >+ * contributor license agreements. See the NOTICE file distributed with >+ * this work for additional information regarding copyright ownership. >+ * The ASF licenses this file to You under the Apache License, Version >2.0 >+ * (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * >+ * http://www.apache.org/licenses/LICENSE-2.0 >+ * >+ * Unless required by applicable law or agreed to in writing, software >+ * distributed under the License is distributed on an "AS IS" BASIS, >+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >implied. >+ * See the License for the specific language governing permissions and >+ * limitations under the License. >+ */ >+package org.apache.oodt.cas.filemgr.metadata.extractors.examples; >+ >+// JUnit static imports >+import static org.hamcrest.Matchers.is; >+import static org.junit.Assert.assertThat; >+import static org.mockito.Mockito.when; >+ >+// JDK imports >+import java.util.Properties; >+ >+// OODT imports >+import org.apache.oodt.cas.metadata.Metadata; >+import org.apache.oodt.cas.metadata.exceptions.MetExtractionException; >+ >+// JUnit imports >+import org.junit.Before; >+import org.junit.Rule; >+import org.junit.Test; >+import org.junit.rules.ExpectedException; >+import org.junit.runner.RunWith; >+import org.junit.runners.JUnit4; >+ >+// Mockito imports >+import org.mockito.Mock; >+import org.mockito.MockitoAnnotations; >+ >+/** >+ * Test class for {@link DateTimeExpandMetExtractor}. >+ * >+ * @author [email protected] (Brian Foster) >+ */ >+@RunWith(JUnit4.class) >+public class TestDateTimeExpandMetExtractor { >+ >+ @Rule public ExpectedException expectedException = >ExpectedException.none(); >+ >+ @Mock private Properties configuration; >+ @Mock private Metadata metadata; >+ >+ private DateTimeExpandMetExtractor extractor; >+ >+ @Before >+ public void setUp() { >+ MockitoAnnotations.initMocks(this); >+ >+ >when(configuration.getProperty("FullDateTimeKey")).thenReturn("StartDateTi >me"); >+ >when(configuration.getProperty("FullDateTimeFormat")).thenReturn("yyyy-MM- >dd HH:mm:ss"); >+ when(configuration.getProperty("YearKey")).thenReturn("StartYear"); >+ when(configuration.getProperty("MonthKey")).thenReturn("StartMonth"); >+ when(configuration.getProperty("DayKey")).thenReturn("StartDay"); >+ when(configuration.getProperty("HourKey")).thenReturn("StartHour"); >+ >when(configuration.getProperty("MinuteKey")).thenReturn("StartMinute"); >+ >when(configuration.getProperty("SecondKey")).thenReturn("StartSecond"); >+ >+ when(metadata.getMetadata("StartDateTime")).thenReturn("2013-05-23 >03:02:01"); >+ >+ extractor = new DateTimeExpandMetExtractor(); >+ } >+ >+ @Test >+ public void testExpandAll() throws MetExtractionException { >+ when(configuration.containsKey("FullDateTimeKey")).thenReturn(true); >+ >when(configuration.containsKey("FullDateTimeFormat")).thenReturn(true); >+ when(configuration.containsKey("YearKey")).thenReturn(true); >+ when(configuration.containsKey("MonthKey")).thenReturn(true); >+ when(configuration.containsKey("DayKey")).thenReturn(true); >+ when(configuration.containsKey("HourKey")).thenReturn(true); >+ when(configuration.containsKey("MinuteKey")).thenReturn(true); >+ when(configuration.containsKey("SecondKey")).thenReturn(true); >+ >+ extractor.configure(configuration); >+ Metadata extractedMetadata = extractor.doExtract(null, metadata); >+ >+ assertThat(extractedMetadata.getMetadata("StartYear"), is("2013")); >+ assertThat(extractedMetadata.getMetadata("StartMonth"), is("05")); >+ assertThat(extractedMetadata.getMetadata("StartDay"), is("23")); >+ assertThat(extractedMetadata.getMetadata("StartHour"), is("03")); >+ assertThat(extractedMetadata.getMetadata("StartMinute"), is("02")); >+ assertThat(extractedMetadata.getMetadata("StartSecond"), is("01")); >+ } >+ >+ @Test >+ public void testExpandSome() throws MetExtractionException { >+ when(configuration.containsKey("FullDateTimeKey")).thenReturn(true); >+ >when(configuration.containsKey("FullDateTimeFormat")).thenReturn(true); >+ when(configuration.containsKey("YearKey")).thenReturn(true); >+ when(configuration.containsKey("MonthKey")).thenReturn(true); >+ when(configuration.containsKey("DayKey")).thenReturn(true); >+ >+ extractor.configure(configuration); >+ Metadata extractedMetadata = extractor.doExtract(null, metadata); >+ >+ assertThat(extractedMetadata.getMetadata("StartYear"), is("2013")); >+ assertThat(extractedMetadata.getMetadata("StartMonth"), is("05")); >+ assertThat(extractedMetadata.getMetadata("StartDay"), is("23")); >+ assertThat(extractedMetadata.containsKey("StartHour"), is(false)); >+ assertThat(extractedMetadata.containsKey("StartMinute"), is(false)); >+ assertThat(extractedMetadata.containsKey("StartSecond"), is(false)); >+ } >+ >+ @Test >+ public void testFailure() throws MetExtractionException { >+ when(configuration.containsKey("FullDateTimeKey")).thenReturn(false); >+ >+ extractor.configure(configuration); >+ expectedException.expect(MetExtractionException.class); >+ extractor.doExtract(null, metadata); >+ } >+} > >Propchange: >oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/metadata/extractor >s/examples/TestDateTimeExpandMetExtractor.java >-------------------------------------------------------------------------- >---- > svn:mime-type = text/plain > >
