001/**
002 * The contents of this file are subject to the Mozilla Public License Version 1.1
003 * (the "License"); you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at http://www.mozilla.org/MPL/
005 * Software distributed under the License is distributed on an "AS IS" basis,
006 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
007 * specific language governing rights and limitations under the License.
008 *
009 * The Original Code is "IStructureDefinition.java"
010 *
011 * The Initial Developer of the Original Code is University Health Network. Copyright (C)
012 * 2001.  All Rights Reserved.
013 *
014 * Contributor(s):
015 *
016 * Alternatively, the contents of this file may be used under the terms of the
017 * GNU General Public License (the  �GPL�), in which case the provisions of the GPL are
018 * applicable instead of those above.  If you wish to allow use of your version of this
019 * file only under the terms of the GPL and not to allow others to use your version
020 * of this file under the MPL, indicate your decision by deleting  the provisions above
021 * and replace  them with the notice and other provisions required by the GPL License.
022 * If you do not delete the provisions above, a recipient may use your version of
023 * this file under either the MPL or the GPL.
024 *
025 */
026
027package ca.uhn.hl7v2.parser;
028
029import java.util.Collections;
030import java.util.List;
031import java.util.Set;
032
033/**
034 * Structure definition which defines a non-standard structure within a parent
035 * structure.
036 * 
037 * This class is used more as a runtime placeholder than as something that would
038 * be produced by the structure parser.
039 */
040public class NonStandardStructureDefinition implements IStructureDefinition {
041
042        private String myName;
043        private IStructureDefinition myParent;
044        private int myPosition;
045        private IStructureDefinition myPreviousSibling;
046
047        /**
048         * Constructor
049         */
050        public NonStandardStructureDefinition(IStructureDefinition theParent, IStructureDefinition thePreviousSibling, String theName, int thePosition) {
051                if (theName == null || theName.length() == 0) {
052                        throw new IllegalArgumentException("theName is missing");
053                }
054                
055                myParent = theParent;
056                myName = theName;
057                myPreviousSibling = thePreviousSibling;
058                myPosition = thePosition;
059        }
060
061        /**
062         * {@inheritDoc }
063         */
064        public Set<String> getAllChildNames() {
065                return Collections.emptySet();
066        }
067
068        /**
069         * {@inheritDoc }
070         */
071        public Set<String> getAllPossibleFirstChildren() {
072                return Collections.emptySet();
073        }
074
075        /**
076         * {@inheritDoc }
077         */
078        public List<StructureDefinition> getChildren() {
079                return Collections.emptyList();
080        }
081
082        /**
083         * {@inheritDoc }
084         */
085        public IStructureDefinition getFirstChild() {
086                return null;
087        }
088
089        /**
090         * {@inheritDoc }
091         */
092        public IStructureDefinition getFirstSibling() {
093                return null;
094        }
095
096        /**
097         * {@inheritDoc }
098         */
099        public String getName() {
100                return myName;
101        }
102
103        /**
104         * {@inheritDoc}
105         */
106        public String getNameAsItAppearsInParent() {
107                return getName();
108        }
109
110        /**
111         * {@inheritDoc }
112         */
113        public Set<String> getNamesOfAllPossibleFollowingLeaves() {
114                return myPreviousSibling.getNamesOfAllPossibleFollowingLeaves();
115        }
116
117        /**
118         * {@inheritDoc }
119         */
120        public IStructureDefinition getNextLeaf() {
121                return myPreviousSibling.getNextLeaf();
122        }
123
124        /**
125         * {@inheritDoc }
126         */
127        public IStructureDefinition getNextSibling() {
128                return myPreviousSibling.getNextSibling();
129        }
130
131        /**
132         * {@inheritDoc }
133         */
134        public IStructureDefinition getParent() {
135                return myParent;
136        }
137
138        /**
139         * {@inheritDoc }
140         */
141        public int getPosition() {
142                return myPosition;
143        }
144
145        /**
146         * {@inheritDoc }
147         */
148        public boolean hasChildren() {
149                return false;
150        }
151
152        /**
153         * {@inheritDoc }
154         */
155        public boolean isFinalChildOfParent() {
156                return myPreviousSibling.isFinalChildOfParent();
157        }
158
159        /**
160         * {@inheritDoc }
161         */
162        public boolean isRepeating() {
163                return true;
164        }
165
166        /**
167         * {@inheritDoc }
168         */
169        public boolean isRequired() {
170                return false;
171        }
172
173        /**
174         * {@inheritDoc }
175         */
176        public boolean isSegment() {
177                return true;
178        }
179
180        /**
181         * {@inheritDoc }
182         */
183        public boolean isChoiceElement() {
184                return false;
185        }
186
187}