1 /*--------------------------------------------------------------------------
\r
2 * Copyright 2009 Taro L. Saito
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
15 *--------------------------------------------------------------------------*/
\r
16 //--------------------------------------
\r
19 // TreeEventQueue.java
\r
20 // Since: Mar 31, 2009 11:56:37 AM
\r
22 // $URL: http://www.xerial.org/svn/project/XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/xml/impl/TreeEventQueue.java $
\r
24 //--------------------------------------
\r
25 package org.xerial.util.xml.impl;
\r
27 import java.util.Collection;
\r
29 import org.xerial.core.XerialError;
\r
30 import org.xerial.core.XerialErrorCode;
\r
31 import org.xerial.util.ArrayDeque;
\r
32 import org.xerial.util.Deque;
\r
33 import org.xerial.util.tree.TreeEvent;
\r
36 * A queue for storing {@link TreeEvent}s
\r
41 public class TreeEventQueue
\r
43 private Deque<TreeEvent> eventQueue = new ArrayDeque<TreeEvent>();
\r
44 private Deque<String> nodeNameStack = new ArrayDeque<String>();
\r
46 private static final String EMPTY_STRING = new String();
\r
48 public void push(TreeEvent e)
\r
53 nodeNameStack.addLast(e.nodeName == null ? EMPTY_STRING : e.nodeName);
\r
56 nodeNameStack.removeLast();
\r
59 eventQueue.addLast(e);
\r
62 public TreeEvent peekFirst()
\r
64 return eventQueue.peekFirst();
\r
67 public TreeEvent peekLast()
\r
69 return eventQueue.peekLast();
\r
72 public void push(Collection<TreeEvent> eventList)
\r
74 for (TreeEvent each : eventList)
\r
80 public void replaceLast(TreeEvent e)
\r
82 if (e.event != eventQueue.peekLast().event)
\r
83 throw new XerialError(XerialErrorCode.INVALID_STATE, String
\r
84 .format("replace Last must be applied for the same event type: %s, %s", e.event, eventQueue
\r
87 eventQueue.removeLast();
\r
88 eventQueue.addLast(e);
\r
91 public String getContextNodeName()
\r
93 if (nodeNameStack.isEmpty())
\r
97 String str = nodeNameStack.getLast();
\r
98 if (str == EMPTY_STRING)
\r
105 public TreeEvent pop()
\r
107 return eventQueue.removeFirst();
\r
110 public boolean isEmpty()
\r
112 return eventQueue.isEmpty();
\r
116 public String toString()
\r
118 return eventQueue.toString();
\r