/* * 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): Andrew Newman. * * [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.client.jrdf; // Java 2 standard packages import java.net.*; // Log4J import org.apache.log4j.Logger; // JRDF import org.jrdf.graph.*; //Mulgara import org.mulgara.client.jrdf.answer.*; import org.mulgara.client.jrdf.itql.*; import org.mulgara.query.*; import org.mulgara.server.*; import org.mulgara.server.driver.*; /** * Abstract factory that contains static methods for creating client-side * JRDF Graphs. * * @created 2004-07-29 * * @author <a href="mailto:robert.turner@tucanatech.com">Robert Turner</a> * @author Andrew Newman * * @version $Revision: 1.10 $ * * @modified $Date: 2005/01/26 21:01:29 $ * * @maintenanceAuthor $Author: newmana $ * * @company <A href="mailto:info@PIsoftware.com">Plugged In Software</A> * * @copyright ©2001 <a href="http://www.pisoftware.com/">Plugged In * Software Pty Ltd</a> * * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a> */ public abstract class AbstractGraphFactory { /** * Logger. This is named after the class. */ @SuppressWarnings("unused") private final static Logger logger = Logger.getLogger(AbstractGraphFactory.class.getName()); /** * Returns a ClientGraph backed by an Answer. * * @param dataSource Answer where the Graph gets it's data from * @param session the session that was used to get the answer. * @throws GraphException * @return ClientGraph */ public static ClientGraph createGraph(Answer dataSource, Session session) throws GraphException { //validate answer if (dataSource == null) { throw new IllegalArgumentException("Cannot create Graph from a null " + "Answer."); } return new ClientGraph(createGraphProxy(dataSource, session)); } /** * Returns a ClientGraph representing the model URI, backed by a newly * created Session. * * @param serverURI the server to connect to. * @param modelURI the URI of the model to use. * @throws GraphException * @return ClientGraph */ public static ClientGraph createGraph(URI serverURI, URI modelURI) throws GraphException { //validate if (serverURI == null) { throw new IllegalArgumentException("Cannot create Graph from a null " + "Session."); } if (modelURI == null) { throw new IllegalArgumentException("Cannot create Graph from a null " + "model URI."); } // Create new session and then new graph. JRDFSession session = createServerSession(serverURI); return new ClientGraph(createGraphProxy(modelURI, session)); } //------------------ RemoteGraphProxy Factory Methods ------------------------ /*------------------------------ NOTE -------------------------------------- * * * RemoteGraphProxy is used by ClientGraph as a Data-Access Object (DAO). * * They are the Graph's data source. Therfore their implementation is * * dependant on the data-source (eg. HTTPServlet, Answer). * * * -------------------------------------------------------------------------*/ /** * Instantiates the correct implementation of RemoteGraphProxy for an Answer. * * @param dataSource Answer * @param session Session * @throws GraphException * @return RemoteGraphProxy */ private static RemoteGraphProxy createGraphProxy(Answer dataSource, Session session) throws GraphException { return new RemoteAnswerGraphProxy(dataSource, session); } /** * Instantiates the correct implementation of RemoteGraphProxy for a model * URI and Session. * * @param modelURI Answer * @param session Session * @throws GraphException * @return RemoteGraphProxy */ private static RemoteGraphProxy createGraphProxy(URI modelURI, JRDFSession session) throws GraphException { return new SessionGraphProxy(session, modelURI); } /** * Creates a new JRDFSession. * * @param serverURI the server to connect to. * @throws GraphException any exceptions that occur when trying to make the * connection. * @return JRDFSession the newly created session. */ private static JRDFSession createServerSession(URI serverURI) throws GraphException{ try { SessionFactory sessionFactory = SessionFactoryFinder.newSessionFactory( serverURI, true); JRDFSession session = (JRDFSession) sessionFactory.newJRDFSession(); return session; } catch (SessionFactoryFinderException sffe) { throw new GraphException("Failed to connect to " + serverURI, sffe); } catch (NonRemoteSessionException nrse) { throw new GraphException("Failed to create a remote session", nrse); } catch (QueryException qe) { throw new GraphException("Failed to get new JRDF session", qe); } } }