You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by sh...@apache.org on 2009/04/06 00:50:11 UTC

svn commit: r762180 - in /lucene/solr/trunk/contrib/dataimporthandler: CHANGES.txt src/main/java/org/apache/solr/handler/dataimport/DateFormatTransformer.java

Author: shalin
Date: Sun Apr  5 22:50:10 2009
New Revision: 762180

URL: http://svn.apache.org/viewvc?rev=762180&view=rev
Log:
SOLR-1098 -- DateFormatTransformer can cache the format objects

Modified:
    lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DateFormatTransformer.java

Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=762180&r1=762179&r2=762180&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Sun Apr  5 22:50:10 2009
@@ -131,6 +131,9 @@
 3. SOLR-1004: Check for abort more frequently during delta-imports.
               (Marc Sturlese, shalin)
 
+4. SOLR-1098: DateFormatTransformer can cache the format objects.
+              (Noble Paul via shalin)
+
 Bug Fixes
 ----------------------
 1. SOLR-800:  Deep copy collections to avoid ConcurrentModificationException in XPathEntityprocessor while streaming

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DateFormatTransformer.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DateFormatTransformer.java?rev=762180&r1=762179&r2=762180&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DateFormatTransformer.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DateFormatTransformer.java Sun Apr  5 22:50:10 2009
@@ -19,10 +19,8 @@
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,6 +41,7 @@
  * @since solr 1.3
  */
 public class DateFormatTransformer extends Transformer {
+  private Map<String, SimpleDateFormat> fmtCache = new HashMap<String, SimpleDateFormat>();
   private static final Logger LOG = LoggerFactory
           .getLogger(DateFormatTransformer.class);
 
@@ -59,29 +58,35 @@
       try {
         Object o = aRow.get(srcCol);
         if (o instanceof List) {
-          List<String> inputs = (List<String>) o;
+          List inputs = (List) o;
           List<Date> results = new ArrayList<Date>();
-          for (String input : inputs) {
+          for (Object input : inputs) {
             results.add(process(input, fmt));
           }
           aRow.put(column, results);
         } else {
-          if (o != null)  {
-            aRow.put(column, process(o.toString(), fmt));
+          if (o != null) {
+            aRow.put(column, process(o, fmt));
           }
         }
       } catch (ParseException e) {
-        LOG.warn( "Could not parse a Date field ", e);
+        LOG.warn("Could not parse a Date field ", e);
       }
     }
     return aRow;
   }
 
-  private Date process(String value, String format) throws ParseException {
-    if (value == null || value.trim().length() == 0)
+  private Date process(Object value, String format) throws ParseException {
+    if (value == null) return null;
+    String strVal = value.toString().trim();
+    if (strVal.length() == 0)
       return null;
-
-    return new SimpleDateFormat(format).parse(value);
+    SimpleDateFormat fmt = fmtCache.get(format);
+    if (fmt == null) {
+      fmt = new SimpleDateFormat(format);
+      fmtCache.put(format, fmt);
+    }
+    return fmt.parse(strVal);
   }
 
   public static final String DATE_TIME_FMT = "dateTimeFormat";