diff --git a/java/external/src/javax/xml/XMLConstants.java b/java/external/src/javax/xml/XMLConstants.java new file mode 100644 index 0000000..7e043fb --- /dev/null +++ b/java/external/src/javax/xml/XMLConstants.java @@ -0,0 +1,187 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// $Id$ + +package javax.xml; + +/** + *

Utility class to contain basic XML values as constants.

+ * + * @author Jeff Suttor + * @version $Revision$, $Date$ + * @see Extensible Markup Language (XML) 1.1 + * @see Extensible Markup Language (XML) 1.0 (Second Edition) + * @see XML 1.0 Second Edition Specification Errata + * @see Namespaces in XML 1.1 + * @see Namespaces in XML + * @see Namespaces in XML Errata + * @see XML Schema Part 1: Structures + * @since 1.5 + **/ + +public final class XMLConstants { + + /** + *

Private constructor to prevent instantiation.

+ */ + private XMLConstants() { + } + + /** + *

Namespace URI to use to represent that there is no Namespace.

+ * + *

Defined by the Namespace specification to be "".

+ * + * @see + * Namespaces in XML, 5.2 Namespace Defaulting + */ + public static final String NULL_NS_URI = ""; + + /** + *

Prefix to use to represent the default XML Namespace.

+ * + *

Defined by the XML specification to be "".

+ * + * @see + * Namespaces in XML, 3. Qualified Names + */ + public static final String DEFAULT_NS_PREFIX = ""; + + /** + *

The official XML Namespace name URI.

+ * + *

Defined by the XML specification to be + * "http://www.w3.org/XML/1998/namespace".

+ * + * @see + * Namespaces in XML, 3. Qualified Names + */ + public static final String XML_NS_URI = + "http://www.w3.org/XML/1998/namespace"; + + /** + *

The official XML Namespace prefix.

+ * + *

Defined by the XML specification to be "xml".

+ * + * @see + * Namespaces in XML, 3. Qualified Names< + */ + public static final String XML_NS_PREFIX = "xml"; + + /** + *

The official XML attribute used for specifying XML Namespace + * declarations, {@link #XMLNS_ATTRIBUTE + * XMLConstants.XMLNS_ATTRIBUTE}, Namespace name URI.

+ * + *

Defined by the XML specification to be + * "http://www.w3.org/2000/xmlns/".

+ * + * @see + * Namespaces in XML, 3. Qualified Names + * @see + * Namespaces in XML Errata + */ + public static final String XMLNS_ATTRIBUTE_NS_URI = + "http://www.w3.org/2000/xmlns/"; + + /** + *

The official XML attribute used for specifying XML Namespace + * declarations.

+ * + *

It is NOT valid to use as a + * prefix. Defined by the XML specification to be + * "xmlns".

+ * + * @see + * Namespaces in XML, 3. Qualified Names + */ + public static final String XMLNS_ATTRIBUTE = "xmlns"; + + /** + *

W3C XML Schema Namespace URI.

+ * + *

Defined to be "http://www.w3.org/2001/XMLSchema". + * + * @see + * XML Schema Part 1: + * Structures, 2.6 Schema-Related Markup in Documents Being Validated + */ + public static final String W3C_XML_SCHEMA_NS_URI = + "http://www.w3.org/2001/XMLSchema"; + + /** + *

W3C XML Schema Instance Namespace URI.

+ * + *

Defined to be "http://www.w3.org/2001/XMLSchema-instance".

+ * + * @see + * XML Schema Part 1: + * Structures, 2.6 Schema-Related Markup in Documents Being Validated + */ + public static final String W3C_XML_SCHEMA_INSTANCE_NS_URI = + "http://www.w3.org/2001/XMLSchema-instance"; + + /** + *

W3C XPath Datatype Namespace URI.

+ * + *

Defined to be "http://www.w3.org/2003/11/xpath-datatypes".

+ * + * @see XQuery 1.0 and XPath 2.0 Data Model + */ + public static final String W3C_XPATH_DATATYPE_NS_URI = "http://www.w3.org/2003/11/xpath-datatypes"; + + /** + *

XML Document Type Declaration Namespace URI as an arbitrary value.

+ * + *

Since not formally defined by any existing standard, arbitrarily define to be "http://www.w3.org/TR/REC-xml". + */ + public static final String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml"; + + /** + *

RELAX NG Namespace URI.

+ * + *

Defined to be "http://relaxng.org/ns/structure/1.0".

+ * + * @see RELAX NG Specification + */ + public static final String RELAXNG_NS_URI = "http://relaxng.org/ns/structure/1.0"; + + /** + *

Feature for secure processing.

+ * + * + */ + public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing"; +} diff --git a/java/external/src/javax/xml/datatype/DatatypeConfigurationException.java b/java/external/src/javax/xml/datatype/DatatypeConfigurationException.java new file mode 100644 index 0000000..f88fbef --- /dev/null +++ b/java/external/src/javax/xml/datatype/DatatypeConfigurationException.java @@ -0,0 +1,75 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// $Id$ + +package javax.xml.datatype; + +/** + *

Indicates a serious configuration error.

+ * + * TODO: support all constructors + * + * @author Jeff Suttor + * @version $Revision$, $Date$ + * @since 1.5 + */ + +public class DatatypeConfigurationException extends Exception { + + /** + *

Create a new DatatypeConfigurationException with + * no specified detail mesage and cause.

+ */ + + public DatatypeConfigurationException() { + super(); + } + + /** + *

Create a new DatatypeConfigurationException with + * the specified detail message.

+ * + * @param message The detail message. + */ + + public DatatypeConfigurationException(String message) { + super(message); + } + + /** + *

Create a new DatatypeConfigurationException with + * the specified detail message and cause.

+ * + * @param message The detail message. + * @param cause The cause. A null value is permitted, and indicates that the cause is nonexistent or unknown. + */ + + public DatatypeConfigurationException(String message, Throwable cause) { + super(message, cause); + } + + /** + *

Create a new DatatypeConfigurationException with + * the specified cause.

+ * + * @param cause The cause. A null value is permitted, and indicates that the cause is nonexistent or unknown. + */ + + public DatatypeConfigurationException(Throwable cause) { + super(cause); + } +} diff --git a/java/external/src/javax/xml/datatype/DatatypeConstants.java b/java/external/src/javax/xml/datatype/DatatypeConstants.java new file mode 100644 index 0000000..804e8e8 --- /dev/null +++ b/java/external/src/javax/xml/datatype/DatatypeConstants.java @@ -0,0 +1,267 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// $Id$ + +package javax.xml.datatype; + +import javax.xml.XMLConstants; +import javax.xml.namespace.QName; + +/** + *

Utility class to contain basic Datatype values as constants.

+ * + * @author Jeff Suttor + * @version $Revision$, $Date$ + * @since 1.5 + */ + +public final class DatatypeConstants { + + /** + *

Private constructor to prevent instantiation.

+ */ + private DatatypeConstants() { + } + + /** + * Value for first month of year. + */ + public static final int JANUARY = 1; + + /** + * Value for second month of year. + */ + public static final int FEBRUARY = 2; + + /** + * Value for third month of year. + */ + public static final int MARCH = 3; + + /** + * Value for fourth month of year. + */ + public static final int APRIL = 4; + + /** + * Value for fifth month of year. + */ + public static final int MAY = 5; + + /** + * Value for sixth month of year. + */ + public static final int JUNE = 6; + + /** + * Value for seventh month of year. + */ + public static final int JULY = 7; + + /** + * Value for eighth month of year. + */ + public static final int AUGUST = 8; + + /** + * Value for ninth month of year. + */ + public static final int SEPTEMBER = 9; + + /** + * Value for tenth month of year. + */ + public static final int OCTOBER = 10; + + /** + * Value for eleven month of year. + */ + public static final int NOVEMBER = 11; + + /** + * Value for twelve month of year. + */ + public static final int DECEMBER = 12; + + /** + *

Comparison result.

+ */ + public static final int LESSER = -1; + + /** + *

Comparison result.

+ */ + public static final int EQUAL = 0; + + /** + *

Comparison result.

+ */ + public static final int GREATER = 1; + + /** + *

Comparison result.

+ */ + public static final int INDETERMINATE = 2; + + /** + * Designation that an "int" field is not set. + */ + public static final int FIELD_UNDEFINED = Integer.MIN_VALUE; + + /** + *

A constant that represents the years field.

+ */ + public static final Field YEARS = new Field("YEARS", 0); + + /** + *

A constant that represents the months field.

+ */ + public static final Field MONTHS = new Field("MONTHS", 1); + + /** + *

A constant that represents the days field.

+ */ + public static final Field DAYS = new Field("DAYS", 2); + + /** + *

A constant that represents the hours field.

+ */ + public static final Field HOURS = new Field("HOURS", 3); + + /** + *

A constant that represents the minutes field.

+ */ + public static final Field MINUTES = new Field("MINUTES", 4); + + /** + *

A constant that represents the seconds field.

+ */ + public static final Field SECONDS = new Field("SECONDS", 5); + + /** + * Type-safe enum class that represents six fields + * of the {@link Duration} class. + */ + public static final class Field { + + /** + *

String representation of Field.

+ */ + private final String str; + /** + *

Unique id of the field.

+ * + *

This value allows the {@link Duration} class to use switch + * statements to process fields.

+ */ + private final int id; + + /** + *

Construct a Field with specified values.

+ * @param str String representation of Field + * @param id int representation of Field + */ + private Field(final String str, final int id) { + this.str = str; + this.id = id; + } + /** + * Returns a field name in English. This method + * is intended to be used for debugging/diagnosis + * and not for display to end-users. + * + * @return + * a non-null valid String constant. + */ + public String toString() { return str; } + + /** + *

Get id of this Field.

+ * + * @return Id of field. + */ + public int getId() { + return id; + } + } + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype dateTime.

+ */ + public static final QName DATETIME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "dateTime"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype time.

+ */ + public static final QName TIME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "time"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype date.

+ */ + public static final QName DATE = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "date"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype gYearMonth.

+ */ + public static final QName GYEARMONTH = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gYearMonth"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype gMonthDay.

+ */ + public static final QName GMONTHDAY = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gMonthDay"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype gYear.

+ */ + public static final QName GYEAR = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gYear"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype gMonth.

+ */ + public static final QName GMONTH = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gMonth"); + + /** + *

Fully qualified name for W3C XML Schema 1.0 datatype gDay.

+ */ + public static final QName GDAY = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gDay"); + + /** + *

Fully qualified name for W3C XML Schema datatype duration.

+ */ + public static final QName DURATION = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "duration"); + + /** + *

Fully qualified name for XQuery 1.0 and XPath 2.0 datatype dayTimeDuration.

+ */ + public static final QName DURATION_DAYTIME = new QName(XMLConstants.W3C_XPATH_DATATYPE_NS_URI, "dayTimeDuration"); + + /** + *

Fully qualified name for XQuery 1.0 and XPath 2.0 datatype yearMonthDuration.

+ */ + public static final QName DURATION_YEARMONTH = new QName(XMLConstants.W3C_XPATH_DATATYPE_NS_URI, "yearMonthDuration"); + + /** + * W3C XML Schema max timezone offset is -14:00. Zone offset is in minutes. + */ + public static final int MAX_TIMEZONE_OFFSET = -14 * 60; + + /** + * W3C XML Schema min timezone offset is +14:00. Zone offset is in minutes. + */ + public static final int MIN_TIMEZONE_OFFSET = 14 * 60; + +} diff --git a/java/external/src/javax/xml/datatype/DatatypeFactory.java b/java/external/src/javax/xml/datatype/DatatypeFactory.java new file mode 100644 index 0000000..70a147c --- /dev/null +++ b/java/external/src/javax/xml/datatype/DatatypeFactory.java @@ -0,0 +1,934 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// $Id$ + +package javax.xml.datatype; + +import java.math.BigInteger; +import java.math.BigDecimal; +import java.util.GregorianCalendar; + +/** + *

Factory that creates new javax.xml.datatype Objects that map XML to/from Java Objects.

+ * + *

{@link #newInstance()} is used to create a new DatatypeFactory. + * The following implementation resolution mechanisms are used in the following order:

+ *
    + *
  1. + * If the system property specified by {@link #DATATYPEFACTORY_PROPERTY}, "javax.xml.datatype.DatatypeFactory", + * exists, a class with the name of the property's value is instantiated. + * Any Exception thrown during the instantiation process is wrapped as a {@link DatatypeConfigurationException}. + *
  2. + *
  3. + * If the file ${JAVA_HOME}/lib/jaxp.properties exists, it is loaded in a {@link java.util.Properties} Object. + * The Properties Object is then queried for the property as documented in the prior step + * and processed as documented in the prior step. + *
  4. + *
  5. + * The services resolution mechanism is used, e.g. META-INF/services/java.xml.datatype.DatatypeFactory. + * Any Exception thrown during the instantiation process is wrapped as a {@link DatatypeConfigurationException}. + *
  6. + *
  7. + * The final mechanism is to attempt to instantiate the Class specified by + * {@link #DATATYPEFACTORY_IMPLEMENTATION_CLASS}, "javax.xml.datatype.DatatypeFactoryImpl". + * Any Exception thrown during the instantiation process is wrapped as a {@link DatatypeConfigurationException}. + *
  8. + *
+ * + * @author Joseph Fialli + * @author Jeff Suttor + * @version $Revision$, $Date$ + * @since 1.5 + */ +public abstract class DatatypeFactory { + + /** + *

Default property name as defined in JSR 206: Java(TM) API for XML Processing (JAXP) 1.3.

+ * + *

Default value is javax.xml.datatype.DatatypeFactory.

+ */ + public static final String DATATYPEFACTORY_PROPERTY = "javax.xml.datatype.DatatypeFactory"; + + /** + *

Default implementation class name as defined in JSR 206: Java(TM) API for XML Processing (JAXP) 1.3.

+ * + *

Default value is org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl.

+ */ + public static final String DATATYPEFACTORY_IMPLEMENTATION_CLASS = "org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl"; + + /** + *

Protected constructor to prevent instaniation outside of package.

+ * + *

Use {@link #newInstance()} to create a DatatypeFactory.

+ */ + protected DatatypeFactory() { + } + + /** + *

Obtain a new instance of a DatatypeFactory.

+ * + *

The implementation resolution mechanisms are defined in this + * Class's documentation.

+ * + * @return New instance of a DocumentBuilderFactory + * + * @throws DatatypeConfigurationException If the implementation is not + * available or cannot be instantiated. + */ + public static DatatypeFactory newInstance() + throws DatatypeConfigurationException { + + try { + return (DatatypeFactory) FactoryFinder.find( + /* The default property name according to the JAXP spec */ + DATATYPEFACTORY_PROPERTY, + /* The fallback implementation class name */ + DATATYPEFACTORY_IMPLEMENTATION_CLASS); + } catch (FactoryFinder.ConfigurationError e) { + throw new DatatypeConfigurationException(e.getMessage(), e.getException()); + } + } + + /** + *

Obtain a new instance of a Duration + * specifying the Duration as its string representation, "PnYnMnDTnHnMnS", + * as defined in XML Schema 1.0 section 3.2.6.1.

+ * + *

XML Schema Part 2: Datatypes, 3.2.6 duration, defines duration as:

+ *
+ * duration represents a duration of time. + * The value space of duration is a six-dimensional space where the coordinates designate the + * Gregorian year, month, day, hour, minute, and second components defined in Section 5.5.3.2 of [ISO 8601], respectively. + * These components are ordered in their significance by their order of appearance i.e. as + * year, month, day, hour, minute, and second. + *
+ *

All six values are set and availabe from the created {@link Duration}

+ * + *

The XML Schema specification states that values can be of an arbitrary size. + * Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. + * An {@link UnsupportedOperationException} will be thrown with a message indicating implementation limits + * if implementation capacities are exceeded.

+ * + * @param lexicalRepresentation String representation of a Duration. + * + * @return New Duration created from parsing the lexicalRepresentation. + * + * @throws IllegalArgumentException If lexicalRepresentation is not a valid representation of a Duration. + * @throws UnsupportedOperationException If implementation cannot support requested values. + * @throws NullPointerException if lexicalRepresentation is null. + */ + public abstract Duration newDuration(final String lexicalRepresentation); + + /** + *

Obtain a new instance of a Duration + * specifying the Duration as milliseconds.

+ * + *

XML Schema Part 2: Datatypes, 3.2.6 duration, defines duration as:

+ *
+ * duration represents a duration of time. + * The value space of duration is a six-dimensional space where the coordinates designate the + * Gregorian year, month, day, hour, minute, and second components defined in Section 5.5.3.2 of [ISO 8601], respectively. + * These components are ordered in their significance by their order of appearance i.e. as + * year, month, day, hour, minute, and second. + *
+ *

All six values are set by computing their values from the specified milliseconds + * and are availabe using the get methods of the created {@link Duration}. + * The values conform to and are defined by:

+ * + * + *

The default start instance is defined by {@link GregorianCalendar}'s use of the start of the epoch: i.e., + * {@link java.util.Calendar#YEAR} = 1970, + * {@link java.util.Calendar#MONTH} = {@link java.util.Calendar#JANUARY}, + * {@link java.util.Calendar#DATE} = 1, etc. + * This is important as there are variations in the Gregorian Calendar, + * e.g. leap years have different days in the month = {@link java.util.Calendar#FEBRUARY} + * so the result of {@link Duration#getMonths()} and {@link Duration#getDays()} can be influenced.

+ * + * @param durationInMilliSeconds Duration in milliseconds to create. + * + * @return New Duration representing durationInMilliSeconds. + */ + public abstract Duration newDuration(final long durationInMilliSeconds); + + /** + *

Obtain a new instance of a Duration + * specifying the Duration as isPositive, years, months, days, hours, minutes, seconds.

+ * + *

The XML Schema specification states that values can be of an arbitrary size. + * Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. + * An {@link UnsupportedOperationException} will be thrown with a message indicating implementation limits + * if implementation capacities are exceeded.

+ * + *

A null value indicates that field isnot set.

+ * + * @param isPositive Set to false to create a negative duration. When the length + * of the duration is zero, this parameter will be ignored. + * @param years of this Duration + * @param months of this Duration + * @param days of this Duration + * @param hours of this Duration + * @param minutes of this Duration + * @param seconds of this Duration + * + * @return New Duration created from the specified values. + * + * @throws IllegalArgumentException If values are not a valid representation of a Duration. + * @throws UnsupportedOperationException If implementation cannot support requested values. + */ + public abstract Duration newDuration( + final boolean isPositive, + final BigInteger years, + final BigInteger months, + final BigInteger days, + final BigInteger hours, + final BigInteger minutes, + final BigDecimal seconds); + + /** + *

Obtain a new instance of a Duration + * specifying the Duration as isPositive, years, months, days, hours, minutes, seconds.

+ * + *

A {@link DatatypeConstants#FIELD_UNDEFINED} value indicates that field isnot set.

+ * + * @param isPositive Set to false to create a negative duration. When the length + * of the duration is zero, this parameter will be ignored. + * @param years of this Duration + * @param months of this Duration + * @param days of this Duration + * @param hours of this Duration + * @param minutes of this Duration + * @param seconds of this Duration + * + * @return New Duration created from the specified values. + * + * @throws IllegalArgumentException If values are not a valid representation of a Duration. + * + * @see #newDuration( + * boolean isPositive, + * BigInteger years, + * BigInteger months, + * BigInteger days, + * BigInteger hours, + * BigInteger minutes, + * BigDecimal seconds) + */ + public Duration newDuration( + final boolean isPositive, + final int years, + final int months, + final int days, + final int hours, + final int minutes, + final int seconds) { + + // years may not be set + BigInteger realYears = (years != DatatypeConstants.FIELD_UNDEFINED) ? BigInteger.valueOf((long) years) : null; + + // months may not be set + BigInteger realMonths = (months != DatatypeConstants.FIELD_UNDEFINED) ? BigInteger.valueOf((long) months) : null; + + // days may not be set + BigInteger realDays = (days != DatatypeConstants.FIELD_UNDEFINED) ? BigInteger.valueOf((long) days) : null; + + // hours may not be set + BigInteger realHours = (hours != DatatypeConstants.FIELD_UNDEFINED) ? BigInteger.valueOf((long) hours) : null; + + // minutes may not be set + BigInteger realMinutes = (minutes != DatatypeConstants.FIELD_UNDEFINED) ? BigInteger.valueOf((long) minutes) : null; + + // seconds may not be set + BigDecimal realSeconds = (seconds != DatatypeConstants.FIELD_UNDEFINED) ? BigDecimal.valueOf((long) seconds) : null; + + return newDuration( + isPositive, + realYears, + realMonths, + realDays, + realHours, + realMinutes, + realSeconds + ); + } + + /** + *

Create a Duration of type xdt:dayTimeDuration by parsing its String representation, + * "PnDTnHnMnS", + * XQuery 1.0 and XPath 2.0 Data Model, xdt:dayTimeDuration.

+ * + *

The datatype xdt:dayTimeDuration is a subtype of xs:duration + * whose lexical representation contains only day, hour, minute, and second components. + * This datatype resides in the namespace http://www.w3.org/2003/11/xpath-datatypes.

+ * + *

All four values are set and availabe from the created {@link Duration}

+ * + *

The XML Schema specification states that values can be of an arbitrary size. + * Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. + * An {@link UnsupportedOperationException} will be thrown with a message indicating implementation limits + * if implementation capacities are exceeded.

+ * + * @param lexicalRepresentation Lexical representation of a duration. + * + * @return New Duration created using the specified lexicalRepresentation. + * + * @throws IllegalArgumentException If the given string does not conform to the aforementioned specification. + * @throws UnsupportedOperationException If implementation cannot support requested values. + * @throws NullPointerException If lexicalRepresentation is null. + */ + public Duration newDurationDayTime(final String lexicalRepresentation) { + + return newDuration(lexicalRepresentation); + } + + /** + *

Create a Duration of type xdt:dayTimeDuration using the specified milliseconds as defined in + * + * XQuery 1.0 and XPath 2.0 Data Model, xdt:dayTimeDuration.

+ * + *

The datatype xdt:dayTimeDuration is a subtype of xs:duration + * whose lexical representation contains only day, hour, minute, and second components. + * This datatype resides in the namespace http://www.w3.org/2003/11/xpath-datatypes.

+ * + *

All four values are set by computing their values from the specified milliseconds + * and are availabe using the get methods of the created {@link Duration}. + * The values conform to and are defined by:

+ * + * + *

The default start instance is defined by {@link GregorianCalendar}'s use of the start of the epoch: i.e., + * {@link java.util.Calendar#YEAR} = 1970, + * {@link java.util.Calendar#MONTH} = {@link java.util.Calendar#JANUARY}, + * {@link java.util.Calendar#DATE} = 1, etc. + * This is important as there are variations in the Gregorian Calendar, + * e.g. leap years have different days in the month = {@link java.util.Calendar#FEBRUARY} + * so the result of {@link Duration#getDays()} can be influenced.

+ * + *

Any remaining milliseconds after determining the day, hour, minute and second are discarded.

+ * + * @param durationInMilliseconds Milliseconds of Duration to create. + * + * @return New Duration created with the specified durationInMilliseconds. + * + * @see + * XQuery 1.0 and XPath 2.0 Data Model, xdt:dayTimeDuration + */ + public Duration newDurationDayTime(final long durationInMilliseconds) { + + return newDuration(durationInMilliseconds); + } + + /** + *

Create a Duration of type xdt:dayTimeDuration using the specified + * day, hour, minute and second as defined in + * + * XQuery 1.0 and XPath 2.0 Data Model, xdt:dayTimeDuration.

+ * + *

The datatype xdt:dayTimeDuration is a subtype of xs:duration + * whose lexical representation contains only day, hour, minute, and second components. + * This datatype resides in the namespace http://www.w3.org/2003/11/xpath-datatypes.

+ * + *

The XML Schema specification states that values can be of an arbitrary size. + * Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. + * An {@link UnsupportedOperationException} will be thrown with a message indicating implementation limits + * if implementation capacities are exceeded.

+ * + *

A null value indicates that field isnot set.

+ * + * @param isPositive Set to false to create a negative duration. When the length + * of the duration is zero, this parameter will be ignored. + * @param day Day of Duration. + * @param hour Hour of Duration. + * @param minute Minute of Duration. + * @param second Second of Duration. + * + * @return New Duration created with the specified day, hour, minute + * and second. + * + * @throws IllegalArgumentException If any values would create an invalid Duration. + * @throws UnsupportedOperationException If implementation cannot support requested values. + */ + public Duration newDurationDayTime( + final boolean isPositive, + final BigInteger day, + final BigInteger hour, + final BigInteger minute, + final BigInteger second) { + + return newDuration( + isPositive, + null, // years + null, // months + day, + hour, + minute, + (second != null)? new BigDecimal(second):null + ); + } + + /** + *

Create a Duration of type xdt:dayTimeDuration using the specified + * day, hour, minute and second as defined in + * + * XQuery 1.0 and XPath 2.0 Data Model, xdt:dayTimeDuration.

+ * + *

The datatype xdt:dayTimeDuration is a subtype of xs:duration + * whose lexical representation contains only day, hour, minute, and second components. + * This datatype resides in the namespace http://www.w3.org/2003/11/xpath-datatypes.

+ * + *

A {@link DatatypeConstants#FIELD_UNDEFINED} value indicates that field isnot set.

+ * + * @param isPositive Set to false to create a negative duration. When the length + * of the duration is zero, this parameter will be ignored. + * @param day Day of Duration. + * @param hour Hour of Duration. + * @param minute Minute of Duration. + * @param second Second of Duration. + * + * @return New Duration created with the specified day, hour, minute + * and second. + * + * @throws IllegalArgumentException If any values would create an invalid Duration. + */ + public Duration newDurationDayTime( + final boolean isPositive, + final int day, + final int hour, + final int minute, + final int second) { + + return newDurationDayTime( + isPositive, + BigInteger.valueOf((long) day), + BigInteger.valueOf((long) hour), + BigInteger.valueOf((long) minute), + BigInteger.valueOf((long) second) + ); + } + + /** + *

Create a Duration of type xdt:yearMonthDuration by parsing its String representation, + * "PnYnM", + * XQuery 1.0 and XPath 2.0 Data Model, xdt:yearMonthDuration.

+ * + *

The datatype xdt:yearMonthDuration is a subtype of xs:duration + * whose lexical representation contains only year and month components. + * This datatype resides in the namespace {@link javax.xml.XMLConstants#W3C_XPATH_DATATYPE_NS_URI}.

+ * + *

Both values are set and availabe from the created {@link Duration}

+ * + *

The XML Schema specification states that values can be of an arbitrary size. + * Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. + * An {@link UnsupportedOperationException} will be thrown with a message indicating implementation limits + * if implementation capacities are exceeded.

+ * + * @param lexicalRepresentation Lexical representation of a duration. + * + * @return New Duration created using the specified lexicalRepresentation. + * + * @throws IllegalArgumentException If the lexicalRepresentation does not conform to the specification. + * @throws UnsupportedOperationException If implementation cannot support requested values. + * @throws NullPointerException If lexicalRepresentation is null. + */ + public Duration newDurationYearMonth(final String lexicalRepresentation) { + + return newDuration(lexicalRepresentation); + } + + /** + *

Create a Duration of type xdt:yearMonthDuration using the specified milliseconds as defined in + * + * XQuery 1.0 and XPath 2.0 Data Model, xdt:yearMonthDuration.

+ * + *

The datatype xdt:yearMonthDuration is a subtype of xs:duration + * whose lexical representation contains only year and month components. + * This datatype resides in the namespace {@link javax.xml.XMLConstants#W3C_XPATH_DATATYPE_NS_URI}.

+ * + *

Both values are set by computing their values from the specified milliseconds + * and are availabe using the get methods of the created {@link Duration}. + * The values conform to and are defined by:

+ * + * + *

The default start instance is defined by {@link GregorianCalendar}'s use of the start of the epoch: i.e., + * {@link java.util.Calendar#YEAR} = 1970, + * {@link java.util.Calendar#MONTH} = {@link java.util.Calendar#JANUARY}, + * {@link java.util.Calendar#DATE} = 1, etc. + * This is important as there are variations in the Gregorian Calendar, + * e.g. leap years have different days in the month = {@link java.util.Calendar#FEBRUARY} + * so the result of {@link Duration#getMonths()} can be influenced.

+ * + *

Any remaining milliseconds after determining the year and month are discarded.

+ * + * @param durationInMilliseconds Milliseconds of Duration to create. + * + * @return New Duration created using the specified durationInMilliseconds. + */ + public Duration newDurationYearMonth(final long durationInMilliseconds) { + + return newDuration(durationInMilliseconds); + } + + /** + *

Create a Duration of type xdt:yearMonthDuration using the specified + * year and month as defined in + * + * XQuery 1.0 and XPath 2.0 Data Model, xdt:yearMonthDuration.

+ * + *

The XML Schema specification states that values can be of an arbitrary size. + * Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. + * An {@link UnsupportedOperationException} will be thrown with a message indicating implementation limits + * if implementation capacities are exceeded.

+ * + *

A null value indicates that field isnot set.

+ * + * @param isPositive Set to false to create a negative duration. When the length + * of the duration is zero, this parameter will be ignored. + * @param year Year of Duration. + * @param month Month of Duration. + * + * @return New Duration created using the specified year and month. + * + * @throws IllegalArgumentException If any values would create an invalid Duration. + * @throws UnsupportedOperationException If implementation cannot support requested values. + */ + public Duration newDurationYearMonth( + final boolean isPositive, + final BigInteger year, + final BigInteger month) { + + return newDuration( + isPositive, + year, + month, + null, // days + null, // hours + null, // minutes + null // seconds + ); + } + + /** + *

Create a Duration of type xdt:yearMonthDuration using the specified + * year and month as defined in + * + * XQuery 1.0 and XPath 2.0 Data Model, xdt:yearMonthDuration.

+ * + *

A {@link DatatypeConstants#FIELD_UNDEFINED} value indicates that field isnot set.

+ * + * @param isPositive Set to false to create a negative duration. When the length + * of the duration is zero, this parameter will be ignored. + * @param year Year of Duration. + * @param month Month of Duration. + * + * @return New Duration created using the specified year and month. + * + * @throws IllegalArgumentException If any values would create an invalid Duration. + */ + public Duration newDurationYearMonth( + final boolean isPositive, + final int year, + final int month) { + + return newDurationYearMonth( + isPositive, + BigInteger.valueOf((long) year), + BigInteger.valueOf((long) month)); + } + + /** + *

Create a new instance of an XMLGregorianCalendar.

+ * + *

All date/time datatype fields set to {@link DatatypeConstants#FIELD_UNDEFINED} or null.

+ * + * @return New XMLGregorianCalendar with all date/time datatype fields set to + * {@link DatatypeConstants#FIELD_UNDEFINED} or null. + */ + public abstract XMLGregorianCalendar newXMLGregorianCalendar(); + + /** + *

Create a new XMLGregorianCalendar by parsing the String as a lexical representation.

+ * + *

Parsing the lexical string representation is defined in + * XML Schema 1.0 Part 2, Section 3.2.[7-14].1, + * Lexical Representation.

+ * + *

The string representation may not have any leading and trailing whitespaces.

+ * + *

The parsing is done field by field so that + * the following holds for any lexically correct String x:

+ *
+     * newXMLGregorianCalendar(x).toXMLFormat().equals(x)
+     * 
+ *

Except for the noted lexical/canonical representation mismatches + * listed in + * XML Schema 1.0 errata, Section 3.2.7.2.

+ * + * @param lexicalRepresentation Lexical representation of one the eight XML Schema date/time datatypes. + * + * @return XMLGregorianCalendar created from the lexicalRepresentation. + * + * @throws IllegalArgumentException If the lexicalRepresentation is not a valid XMLGregorianCalendar. + * @throws NullPointerException If lexicalRepresentation is null. + */ + public abstract XMLGregorianCalendar newXMLGregorianCalendar(final String lexicalRepresentation); + + /** + *

Create an XMLGregorianCalendar from a {@link GregorianCalendar}.

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
+ * Field by Field Conversion from + * {@link GregorianCalendar} to an {@link XMLGregorianCalendar} + *
java.util.GregorianCalendar fieldjavax.xml.datatype.XMLGregorianCalendar field
ERA == GregorianCalendar.BC ? -YEAR : YEAR{@link XMLGregorianCalendar#setYear(int year)}
MONTH + 1{@link XMLGregorianCalendar#setMonth(int month)}
DAY_OF_MONTH{@link XMLGregorianCalendar#setDay(int day)}
HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND{@link XMLGregorianCalendar#setTime(int hour, int minute, int second, BigDecimal fractional)}
+ * (ZONE_OFFSET + DST_OFFSET) / (60*1000)
+ * (in minutes) + *
{@link XMLGregorianCalendar#setTimezone(int offset)}* + *
+ *

*conversion loss of information. It is not possible to represent + * a java.util.GregorianCalendar daylight savings timezone id in the + * XML Schema 1.0 date/time datatype representation.

+ * + *

To compute the return value's TimeZone field, + *