1 /** 2 * Redistribution and use of this software and associated documentation ("Software"), with or 3 * without modification, are permitted provided that the following conditions are met: 4 * 5 * 1. Redistributions of source code must retain copyright statements and notices. Redistributions 6 * must also contain a copy of this document. 7 * 8 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of 9 * conditions and the following disclaimer in the documentation and/or other materials provided with 10 * the distribution. 11 * 12 * 3. The name "Exolab" must not be used to endorse or promote products derived from this Software 13 * without prior written permission of Intalio, Inc. For written permission, please contact 14 * info@exolab.org. 15 * 16 * 4. Products derived from this Software may not be called "Exolab" nor may "Exolab" appear in 17 * their names without prior written permission of Intalio, Inc. Exolab is a registered trademark of 18 * Intalio, Inc. 19 * 20 * 5. Due credit should be given to the Exolab Project (http://www.exolab.org/). 21 * 22 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 24 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTALIO, INC. OR ITS 25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY 29 * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 * Copyright 1999-2001 (C) Intalio Inc. All Rights Reserved. 32 * 33 * $Id$ 34 */ 35 36 package org.exolab.castor.xml.schema; 37 38 39 /** 40 * Package private class to handles simple-type references. 41 * 42 * @author <a href="mailto:berry@intalio.com">Arnaud Berry</a> 43 * @author <a href="mailto:kvisco@intalio.com">Keith Visco</a> 44 * @version $Revision$ $Date: 2005-12-13 14:58:48 -0700 (Tue, 13 Dec 2005) $ 45 **/ 46 class SimpleTypeReference extends SimpleType { 47 /** SerialVersionUID */ 48 private static final long serialVersionUID = 1020507618887404978L; 49 50 /** 51 * The referred type (stored in the schema) 52 */ 53 private SimpleType referredType = null; 54 55 /** 56 * Creates a new SimpleTypeReference. 57 * 58 * @param name the name of the simple type being referenced, must not be null. 59 * @param schema the parent Schema of the simple type being referenced, must not be null. 60 **/ 61 SimpleTypeReference(Schema schema, String name) { 62 if (schema == null) { 63 String err = "The schema argument to the constructor of " 64 + "SimpleTypeReference is not allowed to be null."; 65 throw new IllegalArgumentException(err); 66 } 67 if (name == null) { 68 String err = "The name argument to the constructor of " 69 + "SimpleTypeReference is not allowed to be null."; 70 throw new IllegalArgumentException(err); 71 } 72 super.setName(name); 73 super.setSchema(schema); 74 } // -- SimpleTypeReference 75 76 /** 77 * Returns the referred type 78 */ 79 XMLType getType() { 80 if (referredType == null) 81 resolveTypeReference(); 82 83 return referredType; 84 } 85 86 /** 87 * Resolves the type reference. 88 */ 89 void resolveTypeReference() { 90 referredType = getSchema().getSimpleType(getName()); 91 } 92 93 /** 94 * Returns Structure.UNKNOWN (This class should not be seen outside AttributeDecl (and ElementDecl 95 * ?) anyway) 96 **/ 97 public short getStructureType() { 98 return Structure.UNKNOWN; 99 } // -- getStructureType 100 101 /** 102 * Sets the Schema for this Union. This method overloads the SimpleType#setSchema method to 103 * prevent the Schema from being changed. 104 * 105 * @param name the schema that this Union belongs to. 106 **/ 107 public void setName(String name) { 108 if (name != getName()) { 109 String err = "The name of a SimpleTypeReference cannot be changed."; 110 throw new IllegalStateException(err); 111 } 112 } // -- void setName 113 114 /** 115 * Sets the Schema for this SimpleTypeReference. This method overloads the SimpleType#setSchema 116 * method to prevent the Schema from being changed. 117 * 118 * @param schema the schema that this SimpleType that is being referenced belongs to. 119 **/ 120 public void setSchema(Schema schema) { 121 if (schema != getSchema()) { 122 String err = "The Schema of a SimpleTypeReference cannot be changed."; 123 throw new IllegalStateException(err); 124 } 125 } // -- void setSchema 126 127 } 128 129