001package org.hl7.fhir.utilities.xml;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009    
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030 */
031
032
033
034import java.io.IOException;
035
036public class XMLWriterState {
037
038        private String name;
039        private String namespace;
040        private boolean children;
041        private boolean inComment;
042        private boolean pretty;
043        
044        private XMLNamespace[] namespaceDefns = null;
045        
046        public void addNamespaceDefn(String namespace, String abbrev) throws IOException {
047                XMLNamespace ns;
048                ns = getDefnByAbbreviation(abbrev);
049                if (ns != null)
050                        throw new IOException("duplicate namespace declaration on \""+abbrev+"\"");
051                ns = new XMLNamespace(namespace, abbrev);
052                if (namespaceDefns == null)
053                        namespaceDefns = new XMLNamespace[] {ns};
054                else {
055                        XMLNamespace[] newns = new XMLNamespace[namespaceDefns.length + 1];
056                        for (int i = 0; i < namespaceDefns.length; i++) {
057                                newns[i] = namespaceDefns[i];
058                        }
059                        namespaceDefns = newns;
060                        namespaceDefns[namespaceDefns.length-1] = ns;                   
061                }
062        }
063
064        public XMLNamespace getDefnByNamespace(String namespace) {
065                if (namespaceDefns == null)
066                        return null;
067                for (int  i = 0; i < namespaceDefns.length; i++) {
068                        XMLNamespace element = namespaceDefns[i];
069                        if (element.getNamespace().equals(namespace))
070                                return element;
071                }
072                return null;
073        }
074
075        public XMLNamespace getDefnByAbbreviation(String abbreviation) {
076                if (namespaceDefns == null)
077                        return null;
078                for (int  i = 0; i < namespaceDefns.length; i++) {
079                        XMLNamespace element = namespaceDefns[i];
080                        if (element.getAbbreviation() != null && element.getAbbreviation().equals(abbreviation))
081                                return element;
082                }
083                return null;
084        }
085
086        /**
087         * @return the name
088         */
089        public String getName() {
090                return name;
091        }
092
093        /**
094         * @param name the name to set
095         */
096        public void setName(String name) {
097                this.name = name;
098        }
099
100        /**
101         * @return the namespace
102         */
103        public String getNamespace() {
104                return namespace;
105        }
106
107        /**
108         * @param namespace the namespace to set
109         */
110        public void setNamespace(String namespace) {
111                this.namespace = namespace;
112        }
113
114        /**
115         * @return the children
116         */
117        public boolean hasChildren() {
118                return children;
119        }
120
121        /**
122         * @param children the children to set
123         */
124        public void seeChild() {
125                this.children = true;
126        }
127
128        public XMLNamespace getDefaultNamespace() {
129                if (namespaceDefns == null)
130                        return null;
131                for (int  i = 0; i < namespaceDefns.length; i++) {
132                        XMLNamespace element = namespaceDefns[i];
133                        if (element.getAbbreviation() == null)
134                                return element;
135                }
136                return null;
137        }
138
139        /**
140         * @return the inComment
141         */
142        public boolean isInComment() {
143                return inComment;
144        }
145
146        /**
147         * @param inComment the inComment to set
148         */
149        public void setInComment(boolean inComment) {
150                this.inComment = inComment;
151        }
152
153        /**
154         * @return the pretty
155         */
156        public boolean isPretty() {
157                return pretty;
158        }
159
160        /**
161         * @param pretty the pretty to set
162         */
163        public void setPretty(boolean pretty) {
164                this.pretty = pretty;
165        }
166
167        
168}