[utilities COMMIT] /java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/xml/DomTypeSupport.java

noreply at shibboleth.net noreply at shibboleth.net
Mon Aug 26 23:30:28 EDT 2013


Author: scantor
Date: Mon Aug 26 23:30:28 2013
New Revision: 434

URL: http://svn.shibboleth.net/view/utilities?rev=434&view=rev
Log:
Re-base duration to long calcs on a fixed baseline.

Modified:
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/xml/DomTypeSupport.java

Modified: java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/xml/DomTypeSupport.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/xml/DomTypeSupport.java?rev=434&r1=433&r2=434&view=diff
==============================================================================
--- java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/xml/DomTypeSupport.java (original)
+++ java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/xml/DomTypeSupport.java Mon Aug 26 23:30:28 2013
@@ -17,7 +17,7 @@
 
 package net.shibboleth.utilities.java.support.xml;
 
-import java.util.Date;
+import java.util.Calendar;
 import java.util.GregorianCalendar;
 import java.util.TimeZone;
 
@@ -25,6 +25,7 @@
 import javax.annotation.Nullable;
 import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.Duration;
 import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.namespace.QName;
 
@@ -40,6 +41,9 @@
     /** JAXP DatatypeFactory. */
     private static DatatypeFactory dataTypeFactory;
 
+    /** Baseline for duration calculations (comes from XML Schema standard). */
+    private static Calendar baseline;    
+    
     /** Constructor. */
     private DomTypeSupport() {
     }
@@ -67,9 +71,20 @@
      * @return duration in milliseconds
      */
     public static long durationToLong(final String duration) {
-        return dataTypeFactory.newDuration(duration).getTimeInMillis(new Date(0));
+        return dataTypeFactory.newDuration(duration).getTimeInMillis(baseline);
     }
 
+    /**
+     * Converts a lexical duration, as defined by XML Schema 1.0, into milliseconds.
+     * 
+     * @param duration JAXP duration representation
+     * 
+     * @return duration in milliseconds
+     */
+    public static long durationToLong(final Duration duration) {
+        return duration.getTimeInMillis(baseline);
+    }
+    
     /**
      * Gets a static instance of a JAXP DatatypeFactory.
      * 
@@ -142,6 +157,7 @@
     static {
         try {
             dataTypeFactory = DatatypeFactory.newInstance();
+            baseline = new GregorianCalendar(1696, 9, 1, 0, 0, 0);
         } catch (DatatypeConfigurationException e) {
             throw new RuntimeException("JVM is required to support XML DatatypeFactory but it does not", e);
         }



More information about the commits mailing list