Revision: 4723
          http://sourceforge.net/p/jump-pilot/code/4723
Author:   elnico
Date:     2015-12-29 16:13:05 +0000 (Tue, 29 Dec 2015)
Log Message:
-----------
Better date handling for ValueConverterFactory: try to read the date as String 
from FlexibleDateParser
Added new ISO 8601-compliant format for FlexibleDateParser
SQLite DATE and DATETIME column types now supported and converted to Java Date 
in OJ

Modified Paths:
--------------
    
core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java
    
core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java
    core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt
    core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt

Modified: 
core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java
    2015-12-29 14:08:54 UTC (rev 4722)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java
    2015-12-29 16:13:05 UTC (rev 4723)
@@ -1,6 +1,7 @@
 package com.vividsolutions.jump.datastore.jdbc;
 
 import com.vividsolutions.jump.feature.AttributeType;
+import com.vividsolutions.jump.util.FlexibleDateParser;
 
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
@@ -119,7 +120,22 @@
         public AttributeType getType() { return AttributeType.DATE; }
         public Object getValue(ResultSet rs, int columnIndex) throws 
SQLException {
           //return rs.getDate(columnIndex);
-          return rs.getTimestamp(columnIndex);
+          Object ret = null;
+          try {
+            ret = rs.getTimestamp(columnIndex);
+          } catch (Exception e) {
+            // try to read date from string, as some SpatialDatabases like 
SQLite
+            // can store DATE type in string
+            FlexibleDateParser parser = new FlexibleDateParser();
+            try {
+              ret = parser.parse(rs.getString(columnIndex), false);
+            } catch (Exception ee) {
+              System.err.println("cannot parse date value: \"" + 
rs.getString(columnIndex)
+              + "\" Defaulting to null.\n" + ee.getMessage());
+            }
+          }
+          
+          return ret;
         }
     }
 

Modified: 
core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java
    2015-12-29 14:08:54 UTC (rev 4722)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java
    2015-12-29 16:13:05 UTC (rev 4723)
@@ -46,11 +46,6 @@
 
     GeometricColumnType gcType = metadata.getGeoColTypesdMap().get(tableName + 
"." + columnName);
     if (gcType == null) {
-      // not a geo column, handle date/datetime columns by forcing text mode
-      // todo: use Joda to parse date string ?
-      if ("DATETIME".equalsIgnoreCase(dbTypeName) || 
"DATE".equalsIgnoreCase(dbTypeName)) {
-        return ValueConverterFactory.STRING_MAPPER;
-      }
       ValueConverter stdConverter = ValueConverterFactory.getConverter(rsm, 
columnIndex);
       if (stdConverter != null) {
         return stdConverter;

Modified: core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt
===================================================================
--- core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt      
2015-12-29 14:08:54 UTC (rev 4722)
+++ core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt      
2015-12-29 16:13:05 UTC (rev 4723)
@@ -34,6 +34,10 @@
 yyyy-MM-dd'T'HH:mm:ss
 # most informative format conforming the ISO 8601
 yyyy-MM-dd'T'HH:mm:ss.SSSZ
+# Nicolas Ribot: ISO 8601 compliant ? (used by sqlite for instance)
+# Nicolas Ribot: ISO8601 allows the usage of "Z" to indicate UTC instead of 
"+00:00".
+#(used by sqlite for instance)
+yyyy-MM-dd'T'HH:mm:ss'Z'
 yyyyMMddHHmmss
 MMMM d, yyyy
 yyyy.MM.dd hh:mm:ss

Modified: core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt
===================================================================
--- core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt      
2015-12-29 14:08:54 UTC (rev 4722)
+++ core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt      
2015-12-29 16:13:05 UTC (rev 4723)
@@ -72,6 +72,9 @@
 yyyy.MM.dd HH:mm:ss
 yyyy-Md HH:mm:ss
 yyyy-MM-dd-G-hh-mm-ss-z
+# Nicolas Ribot: ISO8601 allows the usage of "Z" to indicate UTC instead of 
"+00:00".
+#(used by sqlite for instance)
+yyyy-MM-dd'T'HH:mm:ss'Z'
 yyyy-MM-dd'T'HH:mm:ss
 yyyy-MM-dd hh:mm:ss
 yyyy-MM-dd HH:mm:sszzzzzzzzz


------------------------------------------------------------------------------
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to