1 /** 2 * Redistribution and use of this software and associated documentation 3 * ("Software"), with or without modification, are permitted provided 4 * that the following conditions are met: 5 * 6 * 1. Redistributions of source code must retain copyright 7 * statements and notices. Redistributions must also contain a 8 * copy of this document. 9 * 10 * 2. Redistributions in binary form must reproduce the 11 * above copyright notice, this list of conditions and the 12 * following disclaimer in the documentation and/or other 13 * materials provided with the distribution. 14 * 15 * 3. The name "Exolab" must not be used to endorse or promote 16 * products derived from this Software without prior written 17 * permission of Intalio, Inc. For written permission, 18 * please contact info@exolab.org. 19 * 20 * 4. Products derived from this Software may not be called "Exolab" 21 * nor may "Exolab" appear in their names without prior written 22 * permission of Intalio, Inc. Exolab is a registered 23 * trademark of Intalio, Inc. 24 * 25 * 5. Due credit should be given to the Exolab Project 26 * (http://www.exolab.org/). 27 * 28 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS 29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT 30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 32 * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 39 * OF THE POSSIBILITY OF SUCH DAMAGE. 40 * 41 * Copyright 1999-2003 (C) Intalio, Inc. All Rights Reserved. 42 * 43 * $Id$ 44 */ 45 46 package org.exolab.castor.xml.schema; 47 48 import org.exolab.castor.types.AnyNode; 49 import org.exolab.castor.xml.ValidationException; 50 51 import java.util.Enumeration; 52 import java.util.Vector; 53 54 /** 55 * A class which represents the superclass of 56 * either AppInfo or Documentation element. 57 * 58 * @author <a href="mailto:kvisco@intalio.com">Keith Visco</a> 59 * @version $Revision$ $Date: 2003-03-03 02:57:21 -0700 (Mon, 03 Mar 2003) $ 60 */ 61 public abstract class AnnotationItem extends Structure { 62 63 64 /** 65 * List of any elements 66 **/ 67 private Vector _objects = null; 68 69 /** 70 * The source attribute 71 **/ 72 private String _source = null; 73 74 /** 75 * Creates a new AnnotationItem 76 */ 77 AnnotationItem() { 78 _objects = new Vector(3); 79 } //-- AnnotationItem 80 81 /** 82 * Adds the given Object to this Annotation item. 83 * 84 * @param object the Object to add 85 */ 86 public void add(Object object) { 87 if (object != null) 88 _objects.addElement(object); 89 } //-- add 90 91 /** 92 * Returns the String content of this Annotation item. 93 * 94 * @return the String content of this Annotation item. 95 */ 96 public String getContent() { 97 if (_objects.size() == 0) return null; 98 StringBuffer sb = new StringBuffer(); 99 for (int i = 0; i < _objects.size(); i++) { 100 Object obj = _objects.elementAt(i); 101 if (obj instanceof AnyNode) { 102 //-- the getStringValue of AnyNode is a bit messed up 103 //-- so we'll do our own here 104 getStringValue((AnyNode)obj, sb); 105 } 106 else { 107 sb.append(obj.toString()); 108 } 109 } 110 return sb.toString(); 111 } //-- getContent 112 113 /** 114 * Returns an Enumeration of all objects contained by this Annotation item. 115 * 116 * @return an Enumeration of all objects contained by this Annotation item. 117 */ 118 public Enumeration getObjects() { 119 return _objects.elements(); 120 } //-- getObjects 121 122 /** 123 * Returns the source property of this Annotaion item. 124 * 125 * @return the source property of this Annotation item. 126 */ 127 public String getSource() { 128 return _source; 129 } //-- getSource 130 131 /** 132 * Removes the given Object from this Annotation item. 133 * 134 * @param object the Object to remove 135 */ 136 public void remove(Object object) { 137 if (object != null) _objects.removeElement(object); 138 } //-- remove 139 140 /** 141 * Sets the source property for this Annotaion item. 142 * 143 * @param source the value of the source property 144 */ 145 public void setSource(String source) { 146 _source = source; 147 } //-- setSource 148 149 //-------------------------------/ 150 //- Implementation of Structure -/ 151 //-------------------------------/ 152 153 /** 154 * Returns the type of this Schema Structure 155 * 156 * @return the type of this Schema Structure 157 */ 158 public abstract short getStructureType(); 159 160 /** 161 * Checks the validity of this Schema defintion. 162 * @exception ValidationException when this Schema definition 163 * is invalid. 164 **/ 165 public void validate() 166 throws ValidationException 167 { 168 //-- do nothing 169 } //-- validate 170 171 /** 172 * Returns the concatenation of all the TEXT nodes in the given 173 * AnyNode in document order 174 * 175 * @param node the AnyNode to return the String value of 176 * @param buffer the StringBuffer to append to. 177 */ 178 static final void getStringValue(AnyNode node, StringBuffer buffer) { 179 switch(node.getNodeType()) { 180 case AnyNode.ELEMENT: 181 AnyNode child = node.getFirstChild(); 182 while (child != null) { 183 getStringValue(child, buffer); 184 child = child.getNextSibling(); 185 } 186 break; 187 case AnyNode.TEXT: 188 buffer.append(node.getStringValue()); 189 break; 190 default: 191 break; 192 } 193 } //-- getStringValue 194 195 } //-- AnnotationItem