001/* 002Copyright (c) 2011+, HL7, Inc 003All rights reserved. 004 005Redistribution and use in source and binary forms, with or without modification, 006are permitted provided that the following conditions are met: 007 008 * Redistributions of source code must retain the above copyright notice, this 009 list of conditions and the following disclaimer. 010 * Redistributions in binary form must reproduce the above copyright notice, 011 this list of conditions and the following disclaimer in the documentation 012 and/or other materials provided with the distribution. 013 * Neither the name of HL7 nor the names of its contributors may be used to 014 endorse or promote products derived from this software without specific 015 prior written permission. 016 017THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 018ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 019WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 020IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 021INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 022NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 023PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 024WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 025ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 026POSSIBILITY OF SUCH DAMAGE. 027 028*/ 029 030package org.hl7.fhir.utilities.xml; 031 032/* 033 * #%L 034 * HAPI FHIR - Core Library 035 * %% 036 * Copyright (C) 2014 - 2017 University Health Network 037 * %% 038 * Licensed under the Apache License, Version 2.0 (the "License"); 039 * you may not use this file except in compliance with the License. 040 * You may obtain a copy of the License at 041 * 042 * http://www.apache.org/licenses/LICENSE-2.0 043 * 044 * Unless required by applicable law or agreed to in writing, software 045 * distributed under the License is distributed on an "AS IS" BASIS, 046 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 047 * See the License for the specific language governing permissions and 048 * limitations under the License. 049 * #L% 050 */ 051 052 053import java.io.IOException; 054import java.util.Vector; 055 056public class XMLWriterStateStack { 057 058 private Vector<XMLWriterState> items = new Vector<XMLWriterState>(); 059 060 public int size(){ 061 return items.size(); 062 } 063 064 public boolean empty(){ 065 return items.size() == 0; 066 } 067 068 public XMLWriterState current() throws IOException { 069 if (empty()) 070 throw new IOException("stack is empty trying to get current"); 071 return items.get(items.size() - 1); 072 } 073 074 075 public void push(XMLWriterState element) { 076 items.add(element); 077 } 078 079 public void clear () { 080 if (items != null) 081 items.clear(); 082 } 083 084 public void pop() throws IOException { 085 if (empty()) 086 throw new IOException("stack is empty trying to pop"); 087 if (current().isInComment()) 088 throw new IOException("Must close a comment sequence in the element in which it was started"); 089 090 items.remove(items.size() - 1); 091 } 092 093 public XMLWriterState item(int index) { 094 return items.get(index); 095 } 096 097 public boolean inComment() { 098 for (int i = 0; i < items.size(); i++) { 099 if (items.get(i).isInComment()) 100 return true; 101 } 102 return false; 103 } 104 105}