diff --git a/fine-third-default/fine-org-w3c/README.md b/fine-third-default/fine-org-w3c/README.md deleted file mode 100644 index 7d70af71c..000000000 --- a/fine-third-default/fine-org-w3c/README.md +++ /dev/null @@ -1,4 +0,0 @@ -1.css的源码地址:https://www.w3.org/Style/CSS/SAC
-版本:1.3
-2.svg的源码地址:https://www.mvnjar.com/org.axsl.org.w3c.dom.svg/svg-dom-java/1.1/detail.html
-版本:1.1 \ No newline at end of file diff --git a/fine-third-default/fine-org-w3c/src/main/java/org/w3c/dom/smil/ElementTimeControl.java b/fine-third-default/fine-org-w3c/src/main/java/org/w3c/dom/smil/ElementTimeControl.java deleted file mode 100644 index 9474fc331..000000000 --- a/fine-third-default/fine-org-w3c/src/main/java/org/w3c/dom/smil/ElementTimeControl.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.w3c.dom.smil; - -import org.w3c.dom.DOMException; - -/** - * @author zhouping - * @version 10.0 - * Created by zhouping on 2019/12/20 - */ - -public interface ElementTimeControl { - boolean beginElement() throws DOMException; - - boolean beginElementAt(float var1) throws DOMException; - - boolean endElement() throws DOMException; - - boolean endElementAt(float var1) throws DOMException; -} \ No newline at end of file diff --git a/fine-third-default/fine-org-w3c/src/main/java/org/w3c/dom/smil/TimeEvent.java b/fine-third-default/fine-org-w3c/src/main/java/org/w3c/dom/smil/TimeEvent.java deleted file mode 100644 index 117b7eed8..000000000 --- a/fine-third-default/fine-org-w3c/src/main/java/org/w3c/dom/smil/TimeEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.w3c.dom.smil; - -import org.w3c.dom.events.Event; -import org.w3c.dom.views.AbstractView; - -/** - * @author zhouping - * @version 10.0 - * Created by zhouping on 2019/12/20 - */ -public interface TimeEvent extends Event { - AbstractView getView(); - - int getDetail(); - - void initTimeEvent(String var1, AbstractView var2, int var3); -} diff --git a/fine-third-jdk11/README.md b/fine-third-jdk11/README.md new file mode 100644 index 000000000..51e307236 --- /dev/null +++ b/fine-third-jdk11/README.md @@ -0,0 +1 @@ +只有在jdk11编译时需要依赖 \ No newline at end of file diff --git a/fine-third-jdk8/README.md b/fine-third-jdk8/README.md new file mode 100644 index 000000000..82337a4ae --- /dev/null +++ b/fine-third-jdk8/README.md @@ -0,0 +1 @@ +只有在jdk7或者jdk8编译时需要依赖 \ No newline at end of file diff --git a/fine-third-jdk8/xml-apis/README.md b/fine-third-jdk8/xml-apis/README.md new file mode 100644 index 000000000..6e1102448 --- /dev/null +++ b/fine-third-jdk8/xml-apis/README.md @@ -0,0 +1,2 @@ +源码地址:https://www.mvnjar.com/xml-apis/xml-apis/1.4.01/detail.html
+版本:1.4.01 \ No newline at end of file diff --git a/fine-third-jdk8/xml-apis/src/main/java/javax/xml/XMLConstants.java b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/XMLConstants.java new file mode 100644 index 000000000..9ede70d52 --- /dev/null +++ b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/XMLConstants.java @@ -0,0 +1,187 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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: XMLConstants.java 584477 2007-10-14 02:44:03Z mrglavas $ + +package javax.xml; + +/** + *

Utility class to contain basic XML values as constants.

+ * + * @author Jeff Suttor + * @version $Revision: 584477 $, $Date: 2007-10-13 22:44:03 -0400 (Sat, 13 Oct 2007) $ + * @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/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeConfigurationException.java b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeConfigurationException.java new file mode 100644 index 000000000..e7c7885d2 --- /dev/null +++ b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeConfigurationException.java @@ -0,0 +1,171 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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: DatatypeConfigurationException.java 569987 2007-08-27 04:08:46Z mrglavas $ + +package javax.xml.datatype; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.lang.reflect.Method; + +/** + *

Indicates a serious configuration error.

+ * + * @author Jeff Suttor + * @version $Revision: 569987 $, $Date: 2007-08-27 00:08:46 -0400 (Mon, 27 Aug 2007) $ + * @since 1.5 + */ + +public class DatatypeConfigurationException extends Exception { + + /** Stream Unique Identifier. */ + private static final long serialVersionUID = -1699373159027047238L; + + /** This field is required to store the cause on JDK 1.3 and below. */ + private Throwable causeOnJDK13OrBelow; + + /** Indicates whether this class is being used in a JDK 1.4 context. */ + private transient boolean isJDK14OrAbove = false; + + /** + *

Create a new DatatypeConfigurationException with + * no specified detail message 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); + initCauseByReflection(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 == null ? null : cause.toString()); + initCauseByReflection(cause); + } + + /** + * Print the the trace of methods from where the error + * originated. This will trace all nested exception + * objects, as well as this object. + */ + public void printStackTrace() { + if (!isJDK14OrAbove && causeOnJDK13OrBelow != null) { + printStackTrace0(new PrintWriter(System.err, true)); + } + else { + super.printStackTrace(); + } + } + + /** + * Print the the trace of methods from where the error + * originated. This will trace all nested exception + * objects, as well as this object. + * @param s The stream where the dump will be sent to. + */ + public void printStackTrace(PrintStream s) { + if (!isJDK14OrAbove && causeOnJDK13OrBelow != null) { + printStackTrace0(new PrintWriter(s)); + } + else { + super.printStackTrace(s); + } + } + + /** + * Print the the trace of methods from where the error + * originated. This will trace all nested exception + * objects, as well as this object. + * @param s The writer where the dump will be sent to. + */ + public void printStackTrace(PrintWriter s) { + if (!isJDK14OrAbove && causeOnJDK13OrBelow != null) { + printStackTrace0(s); + } + else { + super.printStackTrace(s); + } + } + + private void printStackTrace0(PrintWriter s) { + causeOnJDK13OrBelow.printStackTrace(s); + s.println("------------------------------------------"); + super.printStackTrace(s); + } + + private void initCauseByReflection(Throwable cause) { + causeOnJDK13OrBelow = cause; + try { + Method m = this.getClass().getMethod("initCause", new Class[] {Throwable.class}); + m.invoke(this, new Object[] {cause}); + isJDK14OrAbove = true; + } + // Ignore exception + catch (Exception e) {} + } + + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException { + in.defaultReadObject(); + try { + Method m1 = this.getClass().getMethod("getCause", new Class[] {}); + Throwable cause = (Throwable) m1.invoke(this, new Object[] {}); + if (causeOnJDK13OrBelow == null) { + causeOnJDK13OrBelow = cause; + } + else if (cause == null) { + Method m2 = this.getClass().getMethod("initCause", new Class[] {Throwable.class}); + m2.invoke(this, new Object[] {causeOnJDK13OrBelow}); + } + isJDK14OrAbove = true; + } + // Ignore exception + catch (Exception e) {} + } +} diff --git a/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeConstants.java b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeConstants.java new file mode 100644 index 000000000..bcb086dbf --- /dev/null +++ b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeConstants.java @@ -0,0 +1,268 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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: DatatypeConstants.java 446598 2006-09-15 12:55:40Z jeremias $ + +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: 446598 $, $Date: 2006-09-15 08:55:40 -0400 (Fri, 15 Sep 2006) $ + * @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/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeFactory.java b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeFactory.java new file mode 100644 index 000000000..0d636262e --- /dev/null +++ b/fine-third-jdk8/xml-apis/src/main/java/javax/xml/datatype/DatatypeFactory.java @@ -0,0 +1,1016 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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: DatatypeFactory.java 884950 2009-11-27 18:46:18Z mrglavas $ + +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: 884950 $, $Date: 2009-11-27 13:46:18 -0500 (Fri, 27 Nov 2009) $ + * @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 = new String("org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl"); + + /** + *

Protected constructor to prevent instantiation 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()); + } + } + + /** + * @return New instance of a DocumentBuilderFactory + * + * @throws DatatypeConfigurationException If the implementation is not + * available or cannot be instantiated. + */ + public static DatatypeFactory newInstance(String factoryClassName, + ClassLoader classLoader) throws DatatypeConfigurationException { + if (factoryClassName == null) { + throw new DatatypeConfigurationException("factoryClassName cannot be null."); + } + if (classLoader == null) { + classLoader = SecuritySupport.getContextClassLoader(); + } + try { + return (DatatypeFactory) FactoryFinder.newInstance(factoryClassName, classLoader); + } + 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 available 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 available 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 is not 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 is not 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 available 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) { + if (lexicalRepresentation == null) { + throw new NullPointerException("The lexical representation cannot be null."); + } + // The lexical representation must match the pattern [^YM]*(T.*)? + int pos = lexicalRepresentation.indexOf('T'); + int length = (pos >= 0) ? pos : lexicalRepresentation.length(); + for (int i = 0; i < length; ++i) { + char c = lexicalRepresentation.charAt(i); + if (c == 'Y' || c == 'M') { + throw new IllegalArgumentException("Invalid dayTimeDuration value: " + 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 available 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) { + long _durationInMilliseconds = durationInMilliseconds; + if (_durationInMilliseconds == 0) { + return newDuration(true, DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, 0, 0, 0, 0); + } + boolean tooLong = false; + final boolean isPositive; + if (_durationInMilliseconds < 0) { + isPositive = false; + if (_durationInMilliseconds == Long.MIN_VALUE) { + _durationInMilliseconds++; + tooLong = true; + } + _durationInMilliseconds *= -1; + } + else { + isPositive = true; + } + + long val = _durationInMilliseconds; + int milliseconds = (int) (val % 60000L); // 60000 milliseconds per minute + if (tooLong) { + ++milliseconds; + } + if (milliseconds % 1000 == 0) { + int seconds = milliseconds / 1000; + val = val / 60000L; + int minutes = (int) (val % 60L); // 60 minutes per hour + val = val / 60L; + int hours = (int) (val % 24L); // 24 hours per day + long days = val / 24L; + if (days <= ((long) Integer.MAX_VALUE)) { + return newDuration(isPositive, DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, (int) days, hours, minutes, seconds); + } + else { + return newDuration(isPositive, null, null, + BigInteger.valueOf(days), BigInteger.valueOf(hours), + BigInteger.valueOf(minutes), BigDecimal.valueOf(milliseconds, 3)); + } + } + + BigDecimal seconds = BigDecimal.valueOf(milliseconds, 3); + val = val / 60000L; + BigInteger minutes = BigInteger.valueOf(val % 60L); // 60 minutes per hour + val = val / 60L; + BigInteger hours = BigInteger.valueOf(val % 24L); // 24 hours per day + val = val / 24L; + BigInteger days = BigInteger.valueOf(val); + return newDuration(isPositive, null, null, days, hours, minutes, seconds); + } + + /** + *

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 is not 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 is not 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 newDuration(isPositive, + DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, + day, hour, minute, 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 available 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) { + if (lexicalRepresentation == null) { + throw new NullPointerException("The lexical representation cannot be null."); + } + // The lexical representation must match the pattern [^DT]*. + int length = lexicalRepresentation.length(); + for (int i = 0; i < length; ++i) { + char c = lexicalRepresentation.charAt(i); + if (c == 'D' || c == 'T') { + throw new IllegalArgumentException("Invalid yearMonthDuration value: " + 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 available 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 is not 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 is not 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 newDuration(isPositive, year, month, + DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED); + } + + /** + *

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, + *