Package org.apache.xerces.dom

Source Code of org.apache.xerces.dom.CoreDOMImplementationImpl$XMLDTDLoaderHolder

package org.apache.xerces.dom;

import java.lang.ref.SoftReference;
import org.apache.xerces.impl.RevalidationHandler;
import org.apache.xerces.impl.dtd.XMLDTDLoader;
import org.apache.xerces.parsers.DOMParserImpl;
import org.apache.xerces.util.XMLChar;
import org.apache.xml.serialize.DOMSerializerImpl;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSParser;
import org.w3c.dom.ls.LSSerializer;

public class CoreDOMImplementationImpl
  implements DOMImplementation, DOMImplementationLS
{
  private static final int SIZE = 2;
  private SoftReference[] schemaValidators = new SoftReference[2];
  private SoftReference[] xml10DTDValidators = new SoftReference[2];
  private SoftReference[] xml11DTDValidators = new SoftReference[2];
  private int freeSchemaValidatorIndex = -1;
  private int freeXML10DTDValidatorIndex = -1;
  private int freeXML11DTDValidatorIndex = -1;
  private int schemaValidatorsCurrentSize = 2;
  private int xml10DTDValidatorsCurrentSize = 2;
  private int xml11DTDValidatorsCurrentSize = 2;
  private SoftReference[] xml10DTDLoaders = new SoftReference[2];
  private SoftReference[] xml11DTDLoaders = new SoftReference[2];
  private int freeXML10DTDLoaderIndex = -1;
  private int freeXML11DTDLoaderIndex = -1;
  private int xml10DTDLoaderCurrentSize = 2;
  private int xml11DTDLoaderCurrentSize = 2;
  private int docAndDoctypeCounter = 0;
  static CoreDOMImplementationImpl singleton = new CoreDOMImplementationImpl();

  public static DOMImplementation getDOMImplementation()
  {
    return singleton;
  }

  public boolean hasFeature(String paramString1, String paramString2)
  {
    int i = (paramString2 == null) || (paramString2.length() == 0) ? 1 : 0;
    if ((paramString1.equalsIgnoreCase("+XPath")) && ((i != 0) || (paramString2.equals("3.0"))))
    {
      try
      {
        Class localClass = ObjectFactory.findProviderClass("org.apache.xpath.domapi.XPathEvaluatorImpl", ObjectFactory.findClassLoader(), true);
        Class[] arrayOfClass = localClass.getInterfaces();
        for (int j = 0; j < arrayOfClass.length; j++)
          if (arrayOfClass[j].getName().equals("org.w3c.dom.xpath.XPathEvaluator"))
            return true;
      }
      catch (Exception localException)
      {
        return false;
      }
      return true;
    }
    if (paramString1.startsWith("+"))
      paramString1 = paramString1.substring(1);
    return ((paramString1.equalsIgnoreCase("Core")) && ((i != 0) || (paramString2.equals("1.0")) || (paramString2.equals("2.0")) || (paramString2.equals("3.0")))) || ((paramString1.equalsIgnoreCase("XML")) && ((i != 0) || (paramString2.equals("1.0")) || (paramString2.equals("2.0")) || (paramString2.equals("3.0")))) || ((paramString1.equalsIgnoreCase("LS")) && ((i != 0) || (paramString2.equals("3.0"))));
  }

  public DocumentType createDocumentType(String paramString1, String paramString2, String paramString3)
  {
    checkQName(paramString1);
    return new DocumentTypeImpl(null, paramString1, paramString2, paramString3);
  }

  final void checkQName(String paramString)
  {
    int i = paramString.indexOf(':');
    int j = paramString.lastIndexOf(':');
    int k = paramString.length();
    if ((i == 0) || (i == k - 1) || (j != i))
    {
      String str1 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "NAMESPACE_ERR", null);
      throw new DOMException(14, str1);
    }
    int m = 0;
    String str4;
    if (i > 0)
    {
      if (!XMLChar.isNCNameStart(paramString.charAt(m)))
      {
        String str2 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "INVALID_CHARACTER_ERR", null);
        throw new DOMException(5, str2);
      }
      for (int n = 1; n < i; n++)
      {
        if (XMLChar.isNCName(paramString.charAt(n)))
          continue;
        str4 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "INVALID_CHARACTER_ERR", null);
        throw new DOMException(5, str4);
      }
      m = i + 1;
    }
    if (!XMLChar.isNCNameStart(paramString.charAt(m)))
    {
      String str3 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "INVALID_CHARACTER_ERR", null);
      throw new DOMException(5, str3);
    }
    for (int i1 = m + 1; i1 < k; i1++)
    {
      if (XMLChar.isNCName(paramString.charAt(i1)))
        continue;
      str4 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "INVALID_CHARACTER_ERR", null);
      throw new DOMException(5, str4);
    }
  }

  public Document createDocument(String paramString1, String paramString2, DocumentType paramDocumentType)
    throws DOMException
  {
    if ((paramDocumentType != null) && (paramDocumentType.getOwnerDocument() != null))
    {
      localObject = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "WRONG_DOCUMENT_ERR", null);
      throw new DOMException(4, (String)localObject);
    }
    Object localObject = new CoreDocumentImpl(paramDocumentType);
    Element localElement = ((CoreDocumentImpl)localObject).createElementNS(paramString1, paramString2);
    ((NodeImpl)localObject).appendChild(localElement);
    return (Document)localObject;
  }

  public Object getFeature(String paramString1, String paramString2)
  {
    if (singleton.hasFeature(paramString1, paramString2))
      if (paramString1.equalsIgnoreCase("+XPath"))
        try
        {
          Class localClass = ObjectFactory.findProviderClass("org.apache.xpath.domapi.XPathEvaluatorImpl", ObjectFactory.findClassLoader(), true);
          Class[] arrayOfClass = localClass.getInterfaces();
          for (int i = 0; i < arrayOfClass.length; i++)
            if (arrayOfClass[i].getName().equals("org.w3c.dom.xpath.XPathEvaluator"))
              return localClass.newInstance();
        }
        catch (Exception localException)
        {
          return null;
        }
      else
        return singleton;
    return null;
  }

  public LSParser createLSParser(short paramShort, String paramString)
    throws DOMException
  {
    if ((paramShort != 1) || ((paramString != null) && (!"http://www.w3.org/2001/XMLSchema".equals(paramString)) && (!"http://www.w3.org/TR/REC-xml".equals(paramString))))
    {
      String str = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "NOT_SUPPORTED_ERR", null);
      throw new DOMException(9, str);
    }
    if ((paramString != null) && (paramString.equals("http://www.w3.org/TR/REC-xml")))
      return new DOMParserImpl("org.apache.xerces.parsers.DTDConfiguration", paramString);
    return new DOMParserImpl("org.apache.xerces.parsers.XIncludeAwareParserConfiguration", paramString);
  }

  public LSSerializer createLSSerializer()
  {
    try
    {
      Class localClass = ObjectFactory.findProviderClass("org.apache.xml.serializer.dom3.LSSerializerImpl", ObjectFactory.findClassLoader(), true);
      return (LSSerializer)localClass.newInstance();
    }
    catch (Exception localException)
    {
    }
    return new DOMSerializerImpl();
  }

  public LSInput createLSInput()
  {
    return new DOMInputImpl();
  }

  synchronized RevalidationHandler getValidator(String paramString1, String paramString2)
  {
    SoftReference localSoftReference;
    RevalidationHandlerHolder localRevalidationHandlerHolder;
    RevalidationHandler localRevalidationHandler;
    if (paramString1 == "http://www.w3.org/2001/XMLSchema")
    {
      while (this.freeSchemaValidatorIndex >= 0)
      {
        localSoftReference = this.schemaValidators[this.freeSchemaValidatorIndex];
        localRevalidationHandlerHolder = (RevalidationHandlerHolder)localSoftReference.get();
        if ((localRevalidationHandlerHolder != null) && (localRevalidationHandlerHolder.handler != null))
        {
          localRevalidationHandler = localRevalidationHandlerHolder.handler;
          localRevalidationHandlerHolder.handler = null;
          this.freeSchemaValidatorIndex -= 1;
          return localRevalidationHandler;
        }
        this.schemaValidators[(this.freeSchemaValidatorIndex--)] = null;
      }
      return (RevalidationHandler)ObjectFactory.newInstance("org.apache.xerces.impl.xs.XMLSchemaValidator", ObjectFactory.findClassLoader(), true);
    }
    if (paramString1 == "http://www.w3.org/TR/REC-xml")
    {
      if ("1.1".equals(paramString2))
      {
        while (this.freeXML11DTDValidatorIndex >= 0)
        {
          localSoftReference = this.xml11DTDValidators[this.freeXML11DTDValidatorIndex];
          localRevalidationHandlerHolder = (RevalidationHandlerHolder)localSoftReference.get();
          if ((localRevalidationHandlerHolder != null) && (localRevalidationHandlerHolder.handler != null))
          {
            localRevalidationHandler = localRevalidationHandlerHolder.handler;
            localRevalidationHandlerHolder.handler = null;
            this.freeXML11DTDValidatorIndex -= 1;
            return localRevalidationHandler;
          }
          this.xml11DTDValidators[(this.freeXML11DTDValidatorIndex--)] = null;
        }
        return (RevalidationHandler)ObjectFactory.newInstance("org.apache.xerces.impl.dtd.XML11DTDValidator", ObjectFactory.findClassLoader(), true);
      }
      do
      {
        localSoftReference = this.xml10DTDValidators[this.freeXML10DTDValidatorIndex];
        localRevalidationHandlerHolder = (RevalidationHandlerHolder)localSoftReference.get();
        if ((localRevalidationHandlerHolder != null) && (localRevalidationHandlerHolder.handler != null))
        {
          localRevalidationHandler = localRevalidationHandlerHolder.handler;
          localRevalidationHandlerHolder.handler = null;
          this.freeXML10DTDValidatorIndex -= 1;
          return localRevalidationHandler;
        }
        this.xml10DTDValidators[(this.freeXML10DTDValidatorIndex--)] = null;
      }
      while (this.freeXML10DTDValidatorIndex >= 0);
      return (RevalidationHandler)ObjectFactory.newInstance("org.apache.xerces.impl.dtd.XMLDTDValidator", ObjectFactory.findClassLoader(), true);
    }
    return null;
  }

  synchronized void releaseValidator(String paramString1, String paramString2, RevalidationHandler paramRevalidationHandler)
  {
    Object localObject;
    RevalidationHandlerHolder localRevalidationHandlerHolder;
    if (paramString1 == "http://www.w3.org/2001/XMLSchema")
    {
      this.freeSchemaValidatorIndex += 1;
      if (this.schemaValidators.length == this.freeSchemaValidatorIndex)
      {
        this.schemaValidatorsCurrentSize += 2;
        localObject = new SoftReference[this.schemaValidatorsCurrentSize];
        System.arraycopy(this.schemaValidators, 0, localObject, 0, this.schemaValidators.length);
        this.schemaValidators = ((SoftReference)localObject);
      }
      localObject = this.schemaValidators[this.freeSchemaValidatorIndex];
      if (localObject != null)
      {
        localRevalidationHandlerHolder = (RevalidationHandlerHolder)((SoftReference)localObject).get();
        if (localRevalidationHandlerHolder != null)
        {
          localRevalidationHandlerHolder.handler = paramRevalidationHandler;
          return;
        }
      }
      this.schemaValidators[this.freeSchemaValidatorIndex] = new SoftReference(new RevalidationHandlerHolder(paramRevalidationHandler));
    }
    else if (paramString1 == "http://www.w3.org/TR/REC-xml")
    {
      if ("1.1".equals(paramString2))
      {
        this.freeXML11DTDValidatorIndex += 1;
        if (this.xml11DTDValidators.length == this.freeXML11DTDValidatorIndex)
        {
          this.xml11DTDValidatorsCurrentSize += 2;
          localObject = new SoftReference[this.xml11DTDValidatorsCurrentSize];
          System.arraycopy(this.xml11DTDValidators, 0, localObject, 0, this.xml11DTDValidators.length);
          this.xml11DTDValidators = ((SoftReference)localObject);
        }
        localObject = this.xml11DTDValidators[this.freeXML11DTDValidatorIndex];
        if (localObject != null)
        {
          localRevalidationHandlerHolder = (RevalidationHandlerHolder)((SoftReference)localObject).get();
          if (localRevalidationHandlerHolder != null)
          {
            localRevalidationHandlerHolder.handler = paramRevalidationHandler;
            return;
          }
        }
        this.xml11DTDValidators[this.freeXML11DTDValidatorIndex] = new SoftReference(new RevalidationHandlerHolder(paramRevalidationHandler));
      }
      else
      {
        this.freeXML10DTDValidatorIndex += 1;
        if (this.xml10DTDValidators.length == this.freeXML10DTDValidatorIndex)
        {
          this.xml10DTDValidatorsCurrentSize += 2;
          localObject = new SoftReference[this.xml10DTDValidatorsCurrentSize];
          System.arraycopy(this.xml10DTDValidators, 0, localObject, 0, this.xml10DTDValidators.length);
          this.xml10DTDValidators = ((SoftReference)localObject);
        }
        localObject = this.xml10DTDValidators[this.freeXML10DTDValidatorIndex];
        if (localObject != null)
        {
          localRevalidationHandlerHolder = (RevalidationHandlerHolder)((SoftReference)localObject).get();
          if (localRevalidationHandlerHolder != null)
          {
            localRevalidationHandlerHolder.handler = paramRevalidationHandler;
            return;
          }
        }
        this.xml10DTDValidators[this.freeXML10DTDValidatorIndex] = new SoftReference(new RevalidationHandlerHolder(paramRevalidationHandler));
      }
    }
  }

  final synchronized XMLDTDLoader getDTDLoader(String paramString)
  {
    SoftReference localSoftReference;
    XMLDTDLoaderHolder localXMLDTDLoaderHolder;
    XMLDTDLoader localXMLDTDLoader;
    if ("1.1".equals(paramString))
    {
      while (this.freeXML11DTDLoaderIndex >= 0)
      {
        localSoftReference = this.xml11DTDLoaders[this.freeXML11DTDLoaderIndex];
        localXMLDTDLoaderHolder = (XMLDTDLoaderHolder)localSoftReference.get();
        if ((localXMLDTDLoaderHolder != null) && (localXMLDTDLoaderHolder.loader != null))
        {
          localXMLDTDLoader = localXMLDTDLoaderHolder.loader;
          localXMLDTDLoaderHolder.loader = null;
          this.freeXML11DTDLoaderIndex -= 1;
          return localXMLDTDLoader;
        }
        this.xml11DTDLoaders[(this.freeXML11DTDLoaderIndex--)] = null;
      }
      return (XMLDTDLoader)ObjectFactory.newInstance("org.apache.xerces.impl.dtd.XML11DTDProcessor", ObjectFactory.findClassLoader(), true);
    }
    do
    {
      localSoftReference = this.xml10DTDLoaders[this.freeXML10DTDLoaderIndex];
      localXMLDTDLoaderHolder = (XMLDTDLoaderHolder)localSoftReference.get();
      if ((localXMLDTDLoaderHolder != null) && (localXMLDTDLoaderHolder.loader != null))
      {
        localXMLDTDLoader = localXMLDTDLoaderHolder.loader;
        localXMLDTDLoaderHolder.loader = null;
        this.freeXML10DTDLoaderIndex -= 1;
        return localXMLDTDLoader;
      }
      this.xml10DTDLoaders[(this.freeXML10DTDLoaderIndex--)] = null;
    }
    while (this.freeXML10DTDLoaderIndex >= 0);
    return new XMLDTDLoader();
  }

  final synchronized void releaseDTDLoader(String paramString, XMLDTDLoader paramXMLDTDLoader)
  {
    Object localObject;
    XMLDTDLoaderHolder localXMLDTDLoaderHolder;
    if ("1.1".equals(paramString))
    {
      this.freeXML11DTDLoaderIndex += 1;
      if (this.xml11DTDLoaders.length == this.freeXML11DTDLoaderIndex)
      {
        this.xml11DTDLoaderCurrentSize += 2;
        localObject = new SoftReference[this.xml11DTDLoaderCurrentSize];
        System.arraycopy(this.xml11DTDLoaders, 0, localObject, 0, this.xml11DTDLoaders.length);
        this.xml11DTDLoaders = ((SoftReference)localObject);
      }
      localObject = this.xml11DTDLoaders[this.freeXML11DTDLoaderIndex];
      if (localObject != null)
      {
        localXMLDTDLoaderHolder = (XMLDTDLoaderHolder)((SoftReference)localObject).get();
        if (localXMLDTDLoaderHolder != null)
        {
          localXMLDTDLoaderHolder.loader = paramXMLDTDLoader;
          return;
        }
      }
      this.xml11DTDLoaders[this.freeXML11DTDLoaderIndex] = new SoftReference(new XMLDTDLoaderHolder(paramXMLDTDLoader));
    }
    else
    {
      this.freeXML10DTDLoaderIndex += 1;
      if (this.xml10DTDLoaders.length == this.freeXML10DTDLoaderIndex)
      {
        this.xml10DTDLoaderCurrentSize += 2;
        localObject = new SoftReference[this.xml10DTDLoaderCurrentSize];
        System.arraycopy(this.xml10DTDLoaders, 0, localObject, 0, this.xml10DTDLoaders.length);
        this.xml10DTDLoaders = ((SoftReference)localObject);
      }
      localObject = this.xml10DTDLoaders[this.freeXML10DTDLoaderIndex];
      if (localObject != null)
      {
        localXMLDTDLoaderHolder = (XMLDTDLoaderHolder)((SoftReference)localObject).get();
        if (localXMLDTDLoaderHolder != null)
        {
          localXMLDTDLoaderHolder.loader = paramXMLDTDLoader;
          return;
        }
      }
      this.xml10DTDLoaders[this.freeXML10DTDLoaderIndex] = new SoftReference(new XMLDTDLoaderHolder(paramXMLDTDLoader));
    }
  }

  protected synchronized int assignDocumentNumber()
  {
    return ++this.docAndDoctypeCounter;
  }

  protected synchronized int assignDocTypeNumber()
  {
    return ++this.docAndDoctypeCounter;
  }

  public LSOutput createLSOutput()
  {
    return new DOMOutputImpl();
  }

  static class XMLDTDLoaderHolder
  {
    XMLDTDLoader loader;

    XMLDTDLoaderHolder(XMLDTDLoader paramXMLDTDLoader)
    {
      this.loader = paramXMLDTDLoader;
    }
  }

  static class RevalidationHandlerHolder
  {
    RevalidationHandler handler;

    RevalidationHandlerHolder(RevalidationHandler paramRevalidationHandler)
    {
      this.handler = paramRevalidationHandler;
    }
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.apache.xerces.dom.CoreDOMImplementationImpl
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.apache.xerces.dom.CoreDOMImplementationImpl$XMLDTDLoaderHolder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.