/** * Copyright 2010 Google Inc. * * 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. * */ package org.waveprotocol.wave.model.document.parser; import org.waveprotocol.wave.model.util.StringMap; import java.util.NoSuchElementException; /** * Xml pull parser interface that throws checked exceptions while parsing when * malformed xml is encountered. * */ public interface XmlPullParser { /** * @return if the parser has more tokens. */ boolean hasNext(); /** * Move to the next token * @return The type of item we are at * @throws XmlParseException if we encounter malformed xml */ ItemType next() throws XmlParseException, NoSuchElementException; /** * @return Type of item at current position */ ItemType getCurrentType(); /** * @return character data at current position; only valid when we are at a * text item * @throws IllegalArgumentException if the cursor is not at a text node. */ String getText() throws IllegalStateException; /** * @return tag name for current start element; not valid over other items * @throws IllegalStateException if the cursor is not at an element start/end */ String getTagName() throws IllegalStateException; /** * @return attributes for current start element; not valid over other items * * NOTE(user): This returns a new map and the implementation should * hold no reference to it. Callers may use this directly without * making defensive copies. * @throws IllegalStateException if the cursor is not at an element start. */ StringMap<String> getAttributes() throws IllegalStateException; /** * @return the name of the current processing instruction. * @throws IllegalStateException if the cursor is not at a processing * instruction. */ String getProcessingInstructionName() throws IllegalStateException; /** * @return the value of the current processing instruction * @throws IllegalStateException if the cursor is not at a processing * instruction */ String getProcessingInstructionValue() throws IllegalStateException; }