/* * This file or a portion of this file is licensed under the terms of * the Globus Toolkit Public License, found in file GTPL, or at * http://www.globus.org/toolkit/download/license.html. This notice must * appear in redistributions of this file, with or without modification. * * Redistributions of this Software, with or without modification, must * reproduce the GTPL in: (1) the Software, or (2) the Documentation or * some other similar material which is provided with the Software (if * any). * * Copyright 1999-2004 University of Chicago and The University of * Southern California. All rights reserved. */ package org.griphyn.vdl.planner; import edu.isi.pegasus.common.util.CommonProperties; import edu.isi.pegasus.planner.catalog.replica.ReplicaCatalogEntry; import edu.isi.pegasus.planner.catalog.replica.ReplicaFactory; import edu.isi.pegasus.planner.catalog.ReplicaCatalog; import java.io.*; import java.util.*; import java.lang.reflect.*; /** * This class wraps the shell planner's request into the new RC API. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ * */ public class RCWrapper implements Wrapper { /** * replica catalog API reference. */ private ReplicaCatalog m_rc; /** * Connects the interface with the replica catalog implementation. The * choice of backend is configured through properties. * * @exception ClassNotFoundException if the schema for the database * cannot be loaded. You might want to check your CLASSPATH, too. * @exception NoSuchMethodException if the schema's constructor interface * does not comply with the database driver API. * @exception InstantiationException if the schema class is an abstract * class instead of a concrete implementation. * @exception IllegalAccessException if the constructor for the schema * class it not publicly accessible to this package. * @exception InvocationTargetException if the constructor of the schema * throws an exception while being dynamically loaded. */ public RCWrapper() throws ClassNotFoundException, IOException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, MissingResourceException { m_rc = ReplicaFactory.loadInstance( CommonProperties.instance() ); } /** * Connects the interface with the replica catalog implementation. The * choice of backend is configured through properties. * * @param props is an already instantiated version of the properties. * @exception ClassNotFoundException if the schema for the database * cannot be loaded. You might want to check your CLASSPATH, too. * @exception NoSuchMethodException if the schema's constructor interface * does not comply with the database driver API. * @exception InstantiationException if the schema class is an abstract * class instead of a concrete implementation. * @exception IllegalAccessException if the constructor for the schema * class it not publicly accessible to this package. * @exception InvocationTargetException if the constructor of the schema * throws an exception while being dynamically loaded. * */ public RCWrapper( CommonProperties props ) throws ClassNotFoundException, IOException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { m_rc = ReplicaFactory.loadInstance( props ); } /** * Frees resources taken by the instance of the replica catalog. This * method is safe to be called on failed or already closed catalogs. */ public void close() { if ( m_rc != null ) { m_rc.close(); m_rc = null; } } /** * garbage collection. */ protected void finalize() { close(); } /** * Find the (first) physical filename for the logical file and * resource. * * @param pool is the pool, site or resource name. * @param lfn is the logical filename (LFN) to look up. * @return the physical entity, or <code>null</code> if not found. */ public String lookup( String pool, String lfn ) { // sanity check if ( m_rc == null ) return null; return m_rc.lookup( lfn, pool ); } /** * Obtains the name of the class implementing the replica catalog. * * @return class name of the replica catalog implementor. */ public String getName() { return ( m_rc == null ? null : m_rc.getClass().getName() ); } /** * Shows the contents of the catalog as one string. * * @return the string with the complete catalog contents. Warning, * this may be very large, slow, and memory expensive. */ public String toString() { // sanity check if ( m_rc == null ) return null; Map query = new TreeMap(); query.put( ReplicaCatalogEntry.RESOURCE_HANDLE, "local" ); Map reply = new TreeMap( m_rc.lookup(query) ); return reply.toString(); } }