Package org.apache.tuscany.sca.contribution.processor.xml

Source Code of org.apache.tuscany.sca.contribution.processor.xml.XMLEventsStreamReader

/*
* 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.   
*/
package org.apache.tuscany.sca.contribution.processor.xml;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

import java.util.Iterator;

import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import javax.xml.stream.Location;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.Namespace;
import javax.xml.stream.events.ProcessingInstruction;
import javax.xml.stream.events.XMLEvent;


public class XMLEventsStreamReader implements XMLStreamReader {

  @SuppressWarnings("unused")
  private ArrayList<XMLEvent> events = null;
  @SuppressWarnings("unchecked")
  private HashMap<String, NamespaceContext> eventContext = null;

  private int state;
  private java.util.Iterator<XMLEvent> iterator;
  private XMLEvent current;

  @SuppressWarnings("unchecked")
  public XMLEventsStreamReader(List<XMLEvent> events,Map<String, NamespaceContext> map) {
    this.events = (ArrayList<XMLEvent>) events;
    this.eventContext = (HashMap<String, NamespaceContext>) map;
    this.iterator = events.iterator();
    this.current = iterator.next();
    this.state = current.getEventType();
  }

  public void close() throws XMLStreamException {
    this.events = null;
    this.eventContext = null;
    this.iterator = null;
    this.current = null;
  }

  private void checkElementState() {
    if (getEventType() != START_ELEMENT && getEventType() != END_ELEMENT) {
      throw new IllegalStateException();
    }
  }

  @SuppressWarnings("unchecked")
  public int getAttributeCount() {
    checkElementState();
    int count = 0;
    Iterator<Attribute> iterator = current.asStartElement().getAttributes();
    while (iterator.hasNext()) {
      count++;
      iterator.next();
    }
    return count;
  }

  /*
   * Custom method to get attribute from the specified index
   */
  @SuppressWarnings("unchecked")
  private Attribute getAttribute(int index) {
    checkElementState();
    int count = 0;
    Attribute attribute = null;
    Iterator<Attribute> iterator = current.asStartElement().getAttributes();
    while (iterator.hasNext()) {
      count++;
      if (count == index) {
        attribute = iterator.next();
      } else {
        iterator.next();
      }
    }
    return attribute;
  }

 
  public String getAttributeLocalName(int index) {
    checkElementState();
    return getAttribute(index).getName().getLocalPart();
  }

  public QName getAttributeName(int index) {
    checkElementState();
    return getAttribute(index).getName();
  }

  public String getAttributeNamespace(int index) {
    checkElementState();
    return getAttributeName(index).getNamespaceURI();
  }

  public String getAttributePrefix(int index) {
    checkElementState();
    return getAttributeName(index).getPrefix();
  }

  public String getAttributeType(int index) {
    checkElementState();
    return getAttribute(index).getDTDType();
  }

  public String getAttributeValue(int index) {
    checkElementState();
    return getAttribute(index).getValue();
  }

  @SuppressWarnings("unchecked")
  public String getAttributeValue(String namespaceURI, String localName) {
    checkElementState();
    Iterator<Attribute> iterator = current.asStartElement().getAttributes();
    Attribute attribute;
    while (iterator.hasNext()) {
      attribute = iterator.next();
      if (attribute.getName().getNamespaceURI().equalsIgnoreCase(
          namespaceURI)
          && attribute.getName().getLocalPart().equalsIgnoreCase(
              localName)) {
        return attribute.getValue();
      }
    }
    return null;

  }

  public String getCharacterEncodingScheme() {
    return "UTF-8";
  }

  public String getElementText() throws XMLStreamException {
    checkElementState();
    int eventType = getEventType();
    String elementText = null;

    if (eventType == START_ELEMENT) {
      elementText = current.asStartElement().getName().getLocalPart();
    } else if (eventType == END_ELEMENT) {
      elementText = current.asEndElement().getName().getLocalPart();
    }
    return elementText;
  }

  public String getEncoding() {
    return "UTF-8";
  }

  public int getEventType() {
    return state;
  }

  public String getLocalName() {
    checkElementState();
    switch (current.getEventType()) {
    case START_ELEMENT:
      return current.asStartElement().getName().getLocalPart();
    case END_ELEMENT:
      return current.asEndElement().getName().getLocalPart();
    }
    return null;
  }

  public Location getLocation() {
    return current.getLocation();
  }

  public QName getName() {
    checkElementState();
    switch (current.getEventType()) {
    case START_ELEMENT:
      return current.asStartElement().getName();
    case END_ELEMENT:
      return current.asEndElement().getName();
    }
    return null;
  }

  public NamespaceContext getNamespaceContext() {
    checkElementState();
    //return new TuscanyNamespaceContext(eventContext.get(getLocalName()));
    return eventContext.get(getLocalName());
  }

  @SuppressWarnings("unchecked")
  public int getNamespaceCount() {
    int count = 0;
    Iterator<Namespace> itr = current.asStartElement().getNamespaces();
    while (itr.hasNext()) {
      count++;
      itr.next();
    }
    return count;
  }

  @SuppressWarnings("unchecked")
  public String getNamespacePrefix(int index) {
    Iterator<Namespace> itr = current.asStartElement().getNamespaces();
    int level = 0;
    Namespace ns = null;
    while (itr.hasNext()) {
      ns = itr.next();
      if (level == index) {
        return ns.getPrefix();
      }
      level++;
    }
    return null;
  }

  public String getNamespaceURI() {
    checkElementState();
    switch (current.getEventType()) {
    case START_ELEMENT:
      return current.asStartElement().getName().getNamespaceURI();
    case END_ELEMENT:
      return current.asEndElement().getName().getNamespaceURI();
    }
    return null;
  }

  public String getNamespaceURI(String prefix) {
    return getNamespaceContext().getNamespaceURI(prefix);
  }

  @SuppressWarnings("unchecked")
  public String getNamespaceURI(int index) {
    Iterator<Namespace> itr = current.asStartElement().getNamespaces();
    int level = 0;
    Namespace ns = null;
    while (itr.hasNext()) {
      ns = itr.next();
      if (level == index) {
        return ns.getNamespaceURI();
      }
      level++;
    }
    return null;
  }

  public String getPIData() {
    if (current.isProcessingInstruction()) {
      ProcessingInstruction pi = (ProcessingInstruction) current;
      return pi.getData();
    } else {
      throw new IllegalStateException(current.toString());
    }
  }

  public String getPITarget() {
    if (current.isProcessingInstruction()) {
      ProcessingInstruction pi = (ProcessingInstruction) current;
      return pi.getTarget();
    } else {
      throw new IllegalStateException(current.toString());
    }
  }

  public String getPrefix() {
    checkElementState();
    if (current.isStartElement()) {
      return current.asStartElement().getName().getPrefix();
    }
    return null;
  }

  /*
   * FIXME: Implementation pending...
   *
   * @see (non-Javadoc)
   * javax.xml.stream.util.StreamReaderDelegate#getProperty(java.lang.String)
   */
  public Object getProperty(String name) throws IllegalArgumentException {
    // TODO Auto-generated method stub

    return null;
  }

  public String getText() {
    if (current.isCharacters()) {
      return current.asCharacters().getData();
    } else {
      throw new IllegalStateException(current.toString());
    }
  }

  public char[] getTextCharacters() {
    if (current.isCharacters()) {
      return current.asCharacters().getData().toCharArray();
    } else {
      throw new IllegalStateException(current.toString());
    }
  }

  /*
   * FIXME: Implementation pending... (non-Javadoc)
   *
   * @see javax.xml.stream.util.StreamReaderDelegate#getTextCharacters(int,
   * char[], int, int)
   */
  public int getTextCharacters(int sourceStart, char[] target,
      int targetStart, int length) throws XMLStreamException {
    // TODO Auto-generated method stub
    return 0;
  }

  /*
   * FIXME:Implementaion can be improved (non-Javadoc)
   *
   * @see javax.xml.stream.util.StreamReaderDelegate#getTextLength()
   */
  public int getTextLength() {
    if (current.isCharacters()) {
      return current.asCharacters().getData().length();
    } else {
      throw new IllegalStateException(current.toString());
    }
  }

  /*
   * FIXME: Implementation pending... (non-Javadoc)
   *
   * @see javax.xml.stream.util.StreamReaderDelegate#getTextStart()
   */
  public int getTextStart() {
    // TODO Auto-generated method stub
    return 0;
  }

  /*
   * FIXME: Implementation pending... (non-Javadoc)
   *
   * @see javax.xml.stream.util.StreamReaderDelegate#getTextStart()
   */
  public String getVersion() {
    // TODO Auto-generated method stub

    return null;
  }

  public boolean hasName() {
    return false;
  }

  public boolean hasNext() throws XMLStreamException {
    return iterator.hasNext() || state != END_DOCUMENT;

  }

  public boolean hasText() {
    // TODO Auto-generated method stub
    return false;
  }

  /*
   * FIXME: Implementation pending... (non-Javadoc)
   *
   * @see javax.xml.stream.util.StreamReaderDelegate#getTextStart()
   */
  public boolean isAttributeSpecified(int index) {
    // TODO Auto-generated method stub
    return false;
  }

  public boolean isCharacters() {
    return current.isCharacters();
  }

  public boolean isEndElement() {
    return current.isEndElement();
  }

  public boolean isStandalone() {
    // TODO Auto-generated method stub
    return false;
  }

  public boolean isStartElement() {
    return current.isStartElement();
  }

  public boolean isWhiteSpace() {
    // TODO Auto-generated method stub
    return false;
  }

  public int next() throws XMLStreamException {
    if (!hasNext()) {
      throw new IllegalStateException("No more events");
    }
    if (!iterator.hasNext()) {
      state = END_DOCUMENT;
      current = null;
      return state;
    }
    current = iterator.next();
    state = current.getEventType();
    return state;
  }

  public int nextTag() throws XMLStreamException {
    return iterator.next().getEventType();
  }

  public void require(int type, String namespaceURI, String localName)
      throws XMLStreamException {
    boolean require = false;
    String uri = getNamespaceURI();
    String name = getLocalName();
    if (state == type && namespaceURI.equals(uri) && localName.equals(name)) {
      require = true;
    }
    if (require != true) {
      throw new XMLStreamException();
    }
  }

  public boolean standaloneSet() {
    return false;
  }

}
TOP

Related Classes of org.apache.tuscany.sca.contribution.processor.xml.XMLEventsStreamReader

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.