Author: mrglavas
Date: Fri Jul 25 12:55:53 2008
New Revision: 679888

URL: http://svn.apache.org/viewvc?rev=679888&view=rev
Log:
Fixing JIRA Issue #1323:
http://issues.apache.org/jira/browse/XERCESJ-1323

The conversion from XSDateTime to XMLGregorianCalendar was incorrect 
for fractional seconds and timezone. Should be fixed now.

Modified:
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateTimeDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DayDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/TimeDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearDV.java
    xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearMonthDV.java

Modified: 
xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java 
Fri Jul 25 12:55:53 2008
@@ -17,6 +17,8 @@
 
 package org.apache.xerces.impl.dv.xs;
 
+import java.math.BigDecimal;
+
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.Duration;
 import javax.xml.datatype.XMLGregorianCalendar;
@@ -1082,8 +1084,23 @@
         return null;
     }
 
-
     protected Duration getDuration(DateTimeData data) {
         return null;
     }
+    
+    protected final BigDecimal getFractionalSecondsAsBigDecimal(DateTimeData 
data) {
+        StringBuffer buf = new StringBuffer();
+        append3(buf, data.unNormSecond);
+        String value = buf.toString();
+        int index = value.indexOf('.');
+        if (index == -1) {
+            return null;
+        }
+        value = value.substring(value.indexOf('.'));
+        BigDecimal _val = new BigDecimal(value);
+        if (_val.compareTo(BigDecimal.valueOf(0)) == 0) {
+            return null;
+        }
+        return _val;
+    }
 }

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateDV.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateDV.java Fri Jul 25 
12:55:53 2008
@@ -83,8 +83,10 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return factory.newXMLGregorianCalendar(date.unNormYear, 
date.unNormMonth, date.unNormDay
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.timezoneHr * 60 + date.timezoneMin);
+        return factory.newXMLGregorianCalendar(date.unNormYear, 
date.unNormMonth, 
+                date.unNormDay, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.hasTimeZone() ? (date.timezoneHr * 60 + date.timezoneMin) 
: DatatypeConstants.FIELD_UNDEFINED);
     }
 
 }

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateTimeDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateTimeDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateTimeDV.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DateTimeDV.java Fri Jul 
25 12:55:53 2008
@@ -17,9 +17,9 @@
 
 package org.apache.xerces.impl.dv.xs;
 
-import java.math.BigDecimal;
 import java.math.BigInteger;
 
+import javax.xml.datatype.DatatypeConstants;
 import javax.xml.datatype.XMLGregorianCalendar;
 
 import org.apache.xerces.impl.dv.InvalidDatatypeValueException;
@@ -85,7 +85,9 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return 
factory.newXMLGregorianCalendar(BigInteger.valueOf(date.unNormYear), 
date.unNormMonth, date.unNormDay
-                , date.unNormHour, date.unNormMinute, (int)date.unNormSecond, 
date.unNormSecond != 0?new BigDecimal(date.unNormSecond - 
((int)date.unNormSecond)):null, date.timezoneHr * 60 + date.timezoneMin);
+        return 
factory.newXMLGregorianCalendar(BigInteger.valueOf(date.unNormYear), 
date.unNormMonth, 
+                date.unNormDay, date.unNormHour, date.unNormMinute, 
+                (int)date.unNormSecond, date.unNormSecond != 0 ? 
getFractionalSecondsAsBigDecimal(date) : null, 
+                date.hasTimeZone() ? (date.timezoneHr * 60 + date.timezoneMin) 
: DatatypeConstants.FIELD_UNDEFINED);
     }
 }

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DayDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DayDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DayDV.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/DayDV.java Fri Jul 25 
12:55:53 2008
@@ -107,8 +107,10 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return 
factory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.unNormDay
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.timezoneHr * 60 + date.timezoneMin);
+        return 
factory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.unNormDay, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.hasTimeZone() ? date.timezoneHr * 60 + date.timezoneMin : 
DatatypeConstants.FIELD_UNDEFINED);
     }
 
 }

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDV.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDV.java Fri Jul 25 
12:55:53 2008
@@ -157,7 +157,9 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return 
factory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, 
date.unNormMonth, DatatypeConstants.FIELD_UNDEFINED
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.timezoneHr * 60 + date.timezoneMin);
+        return 
factory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, 
date.unNormMonth, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.hasTimeZone() ? date.timezoneHr * 60 + date.timezoneMin : 
DatatypeConstants.FIELD_UNDEFINED);
     }
 }

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java Fri Jul 
25 12:55:53 2008
@@ -120,8 +120,10 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return 
factory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, 
date.unNormMonth, date.unNormDay
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.timezoneHr * 60 + date.timezoneMin);
+        return 
factory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, 
date.unNormMonth, date.unNormDay, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.hasTimeZone() ? date.timezoneHr * 60 + date.timezoneMin : 
DatatypeConstants.FIELD_UNDEFINED);
     }
 }
 

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/TimeDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/TimeDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/TimeDV.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/TimeDV.java Fri Jul 25 
12:55:53 2008
@@ -17,8 +17,6 @@
 
 package org.apache.xerces.impl.dv.xs;
 
-import java.math.BigDecimal;
-
 import javax.xml.datatype.DatatypeConstants;
 import javax.xml.datatype.XMLGregorianCalendar;
 
@@ -104,7 +102,9 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return factory.newXMLGregorianCalendar(null
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.unNormHour, date.unNormMinute, 
(int)date.unNormSecond, date.unNormSecond != 0?new BigDecimal(date.unNormSecond 
- ((int)date.unNormSecond)):null, date.timezoneHr * 60 + date.timezoneMin);
+        return factory.newXMLGregorianCalendar(null, 
DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, date.unNormHour, 
date.unNormMinute, 
+                (int)date.unNormSecond, date.unNormSecond != 0 ? 
getFractionalSecondsAsBigDecimal(date) : null,
+                date.hasTimeZone() ? (date.timezoneHr * 60 + date.timezoneMin) 
: DatatypeConstants.FIELD_UNDEFINED);
     }
 }

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearDV.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearDV.java Fri Jul 25 
12:55:53 2008
@@ -116,8 +116,10 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return factory.newXMLGregorianCalendar(date.unNormYear, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.timezoneHr * 60 + date.timezoneMin);
+        return factory.newXMLGregorianCalendar(date.unNormYear, 
DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.hasTimeZone() ? date.timezoneHr * 60 + date.timezoneMin : 
DatatypeConstants.FIELD_UNDEFINED);
     }
 }
 

Modified: xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearMonthDV.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearMonthDV.java?rev=679888&r1=679887&r2=679888&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearMonthDV.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/dv/xs/YearMonthDV.java Fri Jul 
25 12:55:53 2008
@@ -90,8 +90,10 @@
     }
     
     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) {
-        return factory.newXMLGregorianCalendar(date.unNormYear, 
date.unNormMonth, DatatypeConstants.FIELD_UNDEFINED
-                , DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, date.timezoneHr * 60 + date.timezoneMin);
+        return factory.newXMLGregorianCalendar(date.unNormYear, 
date.unNormMonth, DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                DatatypeConstants.FIELD_UNDEFINED, 
DatatypeConstants.FIELD_UNDEFINED, 
+                date.hasTimeZone() ? date.timezoneHr * 60 + date.timezoneMin : 
DatatypeConstants.FIELD_UNDEFINED);
     }
 }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to