001: /*
002: * (c) Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions
007: * are met:
008: * 1. Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: * 2. Redistributions in binary form must reproduce the above copyright
011: * notice, this list of conditions and the following disclaimer in the
012: * documentation and/or other materials provided with the distribution.
013: * 3. The name of the author may not be used to endorse or promote products
014: * derived from this software without specific prior written permission.
015:
016: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
017: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
018: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
019: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
020: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
021: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
022: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
023: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
024: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
025: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
026:
027: * * $Id: URIReference.java,v 1.13 2008/01/02 12:09:04 andy_seaborne Exp $
028:
029: AUTHOR: Jeremy J. Carroll
030: */
031: /*
032: * URIReference.java
033: *
034: * Created on June 25, 2001, 9:58 PM
035: */
036:
037: package com.hp.hpl.jena.rdf.arp.impl;
038:
039: import org.xml.sax.SAXParseException;
040:
041: import com.hp.hpl.jena.iri.IRI;
042: import com.hp.hpl.jena.rdf.arp.ARPErrorNumbers;
043: import com.hp.hpl.jena.rdf.arp.states.Frame;
044:
045: // TODO: not for 2.3 IRI spec conformance
046:
047: /**
048: *
049: * @author jjc
050: *
051: */
052: public class URIReference extends TaintImpl implements
053: AResourceInternal, ARPErrorNumbers {
054:
055: /** Creates new URIReference */
056: final private String uri;
057:
058: // URIReference(Location l, AbsXMLContext ctxt,String uri) throws
059: // URISyntaxException, ParseException {
060: //
061: // // this.uri = new URI(ctxt.getURI(),URIref.encode(uri));
062: // this.uri = ctxt.resolve(l, uri);
063: // }
064: protected URIReference(String uri) {
065: // this.uri = new URI(URIref.encode(uri));
066: this .uri = uri;
067: if (uri == null)
068: throw new NullPointerException();
069: }
070:
071: // URIReference() {
072: // uri = null;
073: // }
074:
075: public String toString() {
076: return uri;
077: }
078:
079: public boolean isAnonymous() {
080: return false;
081: }
082:
083: public String getAnonymousID() {
084: return null;
085: }
086:
087: public String getURI() {
088: return uri;
089: }
090:
091: public Object getUserData() {
092: throw new IllegalStateException(
093: "User data only supported on blank nodes");
094: }
095:
096: public void setUserData(Object d) {
097: throw new IllegalStateException(
098: "User data only supported on blank nodes");
099: }
100:
101: /**
102: * Does not compare userData field, only URI.
103: */
104: public boolean equals(Object o) {
105: return o != null && (o instanceof URIReference)
106: && uri.equals(((URIReference) o).uri);
107: }
108:
109: public int hashCode() {
110: return uri.hashCode();
111: }
112:
113: /*
114: * (non-Javadoc)
115: *
116: * @see com.hp.hpl.jena.rdf.arp.AResource#hasNodeID()
117: */
118: public boolean hasNodeID() {
119: return false;
120: }
121:
122: /*
123: * (non-Javadoc)
124: *
125: * @see com.hp.hpl.jena.rdf.arp.AResourceInternal#setHasBeenUsed()
126: */
127: public void setHasBeenUsed() {
128: }
129:
130: /*
131: * (non-Javadoc)
132: *
133: * @see com.hp.hpl.jena.rdf.arp.AResourceInternal#getHasBeenUsed()
134: */
135: public boolean getHasBeenUsed() {
136: throw new UnsupportedOperationException("Internal error");
137: }
138:
139: /**
140: *
141: * @param f
142: * A frame for error reporting. AbsXMLContext of frame is ignored.
143: * @param x
144: * The XML context for the base URI
145: * @param name
146: * The local name
147: * @return The resulting URI
148: * @throws SAXParseException
149: */
150: public static URIReference fromID(Frame f, AbsXMLContext x,
151: String name) throws SAXParseException {
152: // Other errors are checked for by the AttributeLexer
153: URIReference rslt = resolve(f, x, "#" + name);
154: f.checkIdSymbol(rslt, x, name);
155: return rslt;
156:
157: }
158:
159: /**
160: *
161: * @param f
162: * A frame for error reporting. AbsXMLContext of frame is ignored.
163: * @param ctxt
164: * The XML context for the base URI
165: * @param uri
166: * Input string, may be relative etc.
167: * @return The resolved URI
168: * @throws SAXParseException
169: */
170: public static URIReference resolve(Frame f, AbsXMLContext ctxt,
171: String uri) throws SAXParseException {
172:
173: Taint taintMe = new TaintImpl();
174: IRI iri = ctxt.resolveAsURI(f.arp, taintMe, uri);
175: f.checkEncoding(taintMe, uri);
176:
177: URIReference rslt = new URIReference(iri.toString());
178: if (taintMe.isTainted())
179: rslt.taint();
180: return rslt;
181: }
182:
183: public static URIReference fromQName(Frame f, String ns,
184: String local) throws SAXParseException {
185: URIReference rslt = new URIReference(ns + local);
186: f.checkEncoding(rslt, local);
187: // TODO: not for 2.3 move some of the check upwards ...
188: IRI iri = f.arp.iriFactory().create(ns + local);
189: AbsXMLContext.checkURI(f.arp, rslt, iri);
190: return rslt;
191: }
192:
193: public static URIReference createNoChecks(String uri) {
194: return new UntaintableURIReference(uri);
195: }
196: }
|