001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/framework/xml/schema/TypeReference.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstraße 19
030: 53177 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043: package org.deegree.framework.xml.schema;
044:
045: import org.deegree.datatypes.QualifiedName;
046:
047: /**
048: * Represents a type reference. The reference may be resolved or not. If it is resolved, the
049: * referenced <code>TypeDeclaration</code> is accessible, otherwise only the name of the type is
050: * available.
051: *
052: * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider </a>
053: * @author last edited by: $Author: apoth $
054: *
055: * @version $Revision: 9339 $, $Date: 2007-12-27 04:31:52 -0800 (Thu, 27 Dec 2007) $
056: */
057: public class TypeReference {
058:
059: private QualifiedName typeName;
060:
061: private TypeDeclaration declaration;
062:
063: private boolean isResolved;
064:
065: /**
066: * Creates an unresolved <code>TypeReference</code>.
067: *
068: * @param typeName
069: */
070: public TypeReference(QualifiedName typeName) {
071: this .typeName = typeName;
072: }
073:
074: /**
075: * Creates an anonymous (inline) <code>TypeReference</code>.
076: *
077: * @param declaration
078: */
079: public TypeReference(TypeDeclaration declaration) {
080: this .declaration = declaration;
081: }
082:
083: /**
084: * @return Name
085: */
086: public QualifiedName getName() {
087: return this .typeName;
088: }
089:
090: /**
091: * @return
092: */
093: public boolean isResolved() {
094: return this .isResolved;
095: }
096:
097: /**
098: * @return declaration
099: */
100: public TypeDeclaration getTypeDeclaration() {
101: return this .declaration;
102: }
103:
104: /**
105: * Returns whether this <code>TypeReference</code> is anynoums (unnamed) or not.
106: *
107: * @return true, if this reference is anonymous, false otherwise
108: */
109: public boolean isAnonymous() {
110: return this .typeName == null;
111: }
112:
113: /**
114: * @param declaration
115: */
116: public void resolve(TypeDeclaration declaration) {
117: if (isResolved()) {
118: throw new RuntimeException("TypeReference to type '"
119: + typeName + "' has already been resolved.");
120: }
121: this .declaration = declaration;
122: this .isResolved = true;
123: }
124:
125: /**
126: *
127: */
128: public void resolve() {
129: if (isResolved()) {
130: throw new RuntimeException("TypeReference to type '"
131: + typeName + "' has already been resolved.");
132: }
133: this .isResolved = true;
134: }
135: }
|