/* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is the Kowari Metadata Store. * * The Initial Developer of the Original Code is Plugged In Software Pty * Ltd (http://www.pisoftware.com, mailto:info@pisoftware.com). Portions * created by Plugged In Software Pty Ltd are Copyright (C) 2001,2002 * Plugged In Software Pty Ltd. All Rights Reserved. * * Contributor(s): N/A. * * [NOTE: The text of this Exhibit A may differ slightly from the text * of the notices in the Source Code files of the Original Code. You * should use the text of this Exhibit A rather than the text found in the * Original Code Source Code for Your Modifications.] * */ package org.mulgara.query; // Java 2 standard packages import java.net.*; import java.util.*; // Third party packages import org.apache.log4j.Logger; /** * A leaf expression containing the {@link URL} of an RDF model. * * @created 2001-07-12 * * @author <a href="http://staff.pisoftware.com/raboczi">Simon Raboczi</a> * * @version $Revision: 1.8 $ * * @modified $Date: 2005/01/05 04:58:20 $ by $Author: newmana $ * * @maintenanceAuthor $Author: newmana $ * * @copyright ©2001-2003 * <a href="http://www.pisoftware.com/">Plugged In Software Pty Ltd</a> * * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a> */ public class GraphResource implements Graph { /** * Static utility to test whether the given expression is a GraphResource * instance with the given URI. * @param expr An arbitrary graph expression. * @param uri An arbitrary URI. * @return <tt>true</tt> iff the graph expression is a GraphResource whose URI is equal * to the given URI. */ public static boolean sameAs(GraphExpression expr, URI uri) { return expr != null && expr instanceof GraphResource && ((GraphResource)expr).getURI().equals(uri); } /** * Allow newer compiled version of the stub to operate when changes * have not occurred with the class. * NOTE : update this serialVersionUID when a method or a public member is * deleted. */ static final long serialVersionUID = -5673467065206144337L; /** Logger. This is named after the class. */ @SuppressWarnings("unused") private final static Logger logger = Logger.getLogger(GraphResource.class.getName()); /** The {@link URI} of the RDF model. */ private URI uri; // // Constructors // /** * Construct a model from a {@link URL}. * * @param uri the {@link URI} of the model to query * @throws IllegalArgumentException if <var>url</var> is <code>null</code> */ public GraphResource(URI uri) { // Validate "uri" parameter if (uri == null) { throw new IllegalArgumentException("Null \"uri\" parameter"); } // Initialize fields this.uri = uri; } // // Methods implementing GraphExpression // /** * @return an immutable singleton {@link Set} containing the {@link URL} of * the server if this is a Java RMI, BEEP, or local model, or the empty * {@link Set} otherwise */ @SuppressWarnings("unchecked") public Set<URI> getDatabaseURIs() { try { if ("beep".equals(uri.getScheme()) || "rmi".equals(uri.getScheme()) || "local".equals(uri.getScheme())) { // In Java RMI models, the database is the URI without // the fragment identifier // TODO: Call RmiQueryHandler.serverURI instead return Collections.singleton(new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), null, null)); } else { return (Set<URI>)Collections.EMPTY_SET; } } catch (URISyntaxException e) { throw new RuntimeException("Couldn't truncate model URI " + uri + " to obtain a database URI"); } } /** @see org.mulgara.query.GraphExpression#getGraphURIs() */ public Set<URI> getGraphURIs() { return Collections.singleton(uri); } // // API methods // /** * Accessor for the <var>uri</var> property. * * @return a {@link URI} instance (never <code>null</code>) */ public URI getURI() { return uri; } // // Methods extending Object // /** * The text representation of the URI. * * @return the text representation of the URI. */ public String toString() { return uri.toString(); } // // Methods overriding Object // /** * Return true if the URIs of a GraphResource are equal. * * @param object GraphResource to test equality. * @return true if the URIs of a GraphResource are equal. */ public boolean equals(Object object) { if (object == null) { return false; } try { GraphResource tmpModelResource = (GraphResource) object; return getURI().equals(tmpModelResource.getURI()); } catch (ClassCastException cce) { return false; } } /** * Returns the hashCode of a URI. * * @return the hashCode of a URI. */ public int hashCode() { return uri.hashCode(); } /** * Returns just the default Object clone. * * @return just the default Object clone. */ public Object clone() { try { GraphResource cloned = (GraphResource) super.clone(); cloned.uri = getURI(); return cloned; } catch (CloneNotSupportedException e) { throw new RuntimeException("GraphResource not cloneable"); } } }