Author: mriou
Date: Fri Jun 15 11:19:22 2007
New Revision: 547752

URL: http://svn.apache.org/viewvc?view=rev&rev=547752
Log:
XMLCalendar is buggy, use ISO8601DateParser instead.

Removed:
    
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XMLCalendar.java
Modified:
    
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/ISO8601DateParser.java
    
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XSTypes.java

Modified: 
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/ISO8601DateParser.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/ISO8601DateParser.java?view=diff&rev=547752&r1=547751&r2=547752
==============================================================================
--- 
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/ISO8601DateParser.java
 (original)
+++ 
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/ISO8601DateParser.java
 Fri Jun 15 11:19:22 2007
@@ -19,6 +19,7 @@
 package org.apache.ode.utils;
 
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.TimeZone;
 
@@ -29,82 +30,89 @@
  */
 public class ISO8601DateParser {
 
-  public static Date parse(String date) throws java.text.ParseException {
-    String pattern;
-    StringBuffer buffer = new StringBuffer(date);
-    boolean timezoned = false;
-
-    switch (buffer.length()) {
-      case 4:
-        // Year: yyyy (eg 1997)
-        pattern = "yyyy";
-        break;
-      case 7:
-        // Year and month: yyyy-MM (eg 1997-07)
-        pattern = "yyyy-MM";
-        break;
-      case 10:
-        // Complete date: yyyy-MM-dd (eg 1997-07-16)
-        pattern = "yyyy-MM-dd";
-        break;
-      default:
-        // Complete date plus hours and minutes: yyyy-MM-ddTHH:mmTZD (eg 
1997-07-16T19:20+01:00)
-        // Complete date plus hours, minutes and seconds: 
yyyy-MM-ddTHH:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
-        // Complete date plus hours, minutes, seconds and a decimal fraction 
of a second: yyyy-MM-ddTHH:mm:ss.STZD (eg 1997-07-16T19:20:30.45+01:00)
-        pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS";
-
-        if (buffer.length() == 16) {
-          // add seconds
-          buffer.append(":00");
-        }
-        if (buffer.length() > 16 && buffer.charAt(16) != ':') {
-          // insert seconds
-          buffer.insert(16, ":00");
-        }
-        if (buffer.length() == 19) {
-          // add milliseconds
-          buffer.append(".000");
-        }
-        if (buffer.length() > 19 && buffer.charAt(19) != '.') {
-          // insert milliseconds
-          buffer.insert(19, ".000");
-        }
-        if (buffer.length() > 23) {
-          // append timezone
-          pattern = pattern + "Z";
-          timezoned = true;
-        }
-        if (buffer.length() == 24 && buffer.charAt(23) == 'Z') {
-          // replace 'Z' with '+0000'
-          buffer.replace(23, 24, "+0000");
-        }
-        if (buffer.length() == 29 && buffer.charAt(26) == ':') {
-          // delete '.' from 'HH:mm'
-          buffer.deleteCharAt(26);
-        }
+    public static Date parse(String date) throws java.text.ParseException {
+        String pattern;
+        StringBuffer buffer = new StringBuffer(date);
+        boolean timezoned = false;
+
+        switch (buffer.length()) {
+            case 4:
+                // Year: yyyy (eg 1997)
+                pattern = "yyyy";
+                break;
+            case 7:
+                // Year and month: yyyy-MM (eg 1997-07)
+                pattern = "yyyy-MM";
+                break;
+            case 10:
+                // Complete date: yyyy-MM-dd (eg 1997-07-16)
+                pattern = "yyyy-MM-dd";
+                break;
+            default:
+                // Complete date plus hours and minutes: yyyy-MM-ddTHH:mmTZD 
(eg 1997-07-16T19:20+01:00)
+                // Complete date plus hours, minutes and seconds: 
yyyy-MM-ddTHH:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
+                // Complete date plus hours, minutes, seconds and a decimal 
fraction of a second: yyyy-MM-ddTHH:mm:ss.STZD (eg 1997-07-16T19:20:30.45+01:00)
+                pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS";
+
+                if (buffer.length() == 16) {
+                    // add seconds
+                    buffer.append(":00");
+                }
+                if (buffer.length() > 16 && buffer.charAt(16) != ':') {
+                    // insert seconds
+                    buffer.insert(16, ":00");
+                }
+                if (buffer.length() == 19) {
+                    // add milliseconds
+                    buffer.append(".000");
+                }
+                if (buffer.length() > 19 && buffer.charAt(19) != '.') {
+                    // insert milliseconds
+                    buffer.insert(19, ".000");
+                }
+                if (buffer.length() > 23) {
+                    // append timezone
+                    pattern = pattern + "Z";
+                    timezoned = true;
+                }
+                if (buffer.length() == 24 && buffer.charAt(23) == 'Z') {
+                    // replace 'Z' with '+0000'
+                    buffer.replace(23, 24, "+0000");
+                }
+                if (buffer.length() == 29 && buffer.charAt(26) == ':') {
+                    // delete '.' from 'HH:mm'
+                    buffer.deleteCharAt(26);
+                }
+        }
+
+        // always set time zone on formatter
+        SimpleDateFormat format = new SimpleDateFormat(pattern);
+        if (timezoned) format.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+        return format.parse(buffer.toString());
     }
 
-    // always set time zone on formatter
-    SimpleDateFormat format = new SimpleDateFormat(pattern);
-    if (timezoned) format.setTimeZone(TimeZone.getTimeZone("UTC"));
-
-    return format.parse(buffer.toString());
-  }
-
-  public static String format( Date date ) {
-    TimeZone timeZone = TimeZone.getDefault();
-    boolean utc = TimeZone.getTimeZone("UTC").equals(timeZone) || 
TimeZone.getTimeZone("GMT").equals(timeZone);
-
-    String pattern = utc ? "yyyy-MM-dd'T'HH:mm:ss'Z'" : 
"yyyy-MM-dd'T'HH:mm:ssZ";
-    SimpleDateFormat format = new SimpleDateFormat(pattern);
-    format.setTimeZone(timeZone);
-
-    StringBuffer buffer = new StringBuffer(format.format(date));
-    if (!utc) {
-      buffer.insert(buffer.length() - 2, ':');
+    public static Calendar parseCal(String date) throws 
java.text.ParseException {
+        Date d = parse(date);
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(d);
+        return cal;
     }
 
-    return buffer.toString();
-  }
+    public static String format( Date date ) {
+        TimeZone timeZone = TimeZone.getDefault();
+        boolean utc = TimeZone.getTimeZone("UTC").equals(timeZone) || 
TimeZone.getTimeZone("GMT").equals(timeZone);
+
+        String pattern = utc ? "yyyy-MM-dd'T'HH:mm:ss'Z'" : 
"yyyy-MM-dd'T'HH:mm:ssZ";
+        SimpleDateFormat format = new SimpleDateFormat(pattern);
+        format.setTimeZone(timeZone);
+
+        StringBuffer buffer = new StringBuffer(format.format(date));
+        if (!utc) {
+            buffer.insert(buffer.length() - 2, ':');
+        }
+
+        return buffer.toString();
+    }
 
 }

Modified: 
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XSTypes.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XSTypes.java?view=diff&rev=547752&r1=547751&r2=547752
==============================================================================
--- 
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XSTypes.java 
(original)
+++ 
incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XSTypes.java 
Fri Jun 15 11:19:22 2007
@@ -19,6 +19,8 @@
 
 package org.apache.ode.utils.xsd;
 
+import org.apache.ode.utils.ISO8601DateParser;
+
 import javax.xml.namespace.QName;
 
 /**
@@ -44,7 +46,7 @@
         return Double.valueOf(value);
       } else if (isDate(type)) {
         foundType = "date";
-        return new XMLCalendar(value);
+        return ISO8601DateParser.parseCal(value);
       } else if (isString(type)) {
         foundType = "string";
         return value;


Reply via email to