001: /*
002: * This file or a portion of this file is licensed under the terms of
003: * the Globus Toolkit Public License, found in file GTPL, or at
004: * http://www.globus.org/toolkit/download/license.html. This notice must
005: * appear in redistributions of this file, with or without modification.
006: *
007: * Redistributions of this Software, with or without modification, must
008: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
009: * some other similar material which is provided with the Software (if
010: * any).
011: *
012: * Copyright 1999-2004 University of Chicago and The University of
013: * Southern California. All rights reserved.
014: */
015:
016: package org.griphyn.vdl.planner;
017:
018: import java.io.*;
019: import java.util.*;
020: import java.lang.reflect.*;
021: import org.griphyn.vdl.util.Logging;
022:
023: import org.griphyn.common.util.*;
024: import org.griphyn.common.catalog.*;
025: import org.griphyn.common.catalog.replica.*;
026:
027: /**
028: * This class wraps the shell planner's request into the new RC API.
029: *
030: * @author Jens-S. Vöckler
031: * @author Yong Zhao
032: * @version $Revision: 50 $
033: *
034: */
035: public class RCWrapper implements Wrapper {
036: /**
037: * replica catalog API reference.
038: */
039: private ReplicaCatalog m_rc;
040:
041: /**
042: * Connects the interface with the replica catalog implementation. The
043: * choice of backend is configured through properties.
044: *
045: * @exception ClassNotFoundException if the schema for the database
046: * cannot be loaded. You might want to check your CLASSPATH, too.
047: * @exception NoSuchMethodException if the schema's constructor interface
048: * does not comply with the database driver API.
049: * @exception InstantiationException if the schema class is an abstract
050: * class instead of a concrete implementation.
051: * @exception IllegalAccessException if the constructor for the schema
052: * class it not publicly accessible to this package.
053: * @exception InvocationTargetException if the constructor of the schema
054: * throws an exception while being dynamically loaded.
055: */
056: public RCWrapper() throws ClassNotFoundException, IOException,
057: NoSuchMethodException, InstantiationException,
058: IllegalAccessException, InvocationTargetException,
059: MissingResourceException {
060: m_rc = ReplicaFactory.loadInstance(VDSProperties.instance());
061: }
062:
063: /**
064: * Connects the interface with the replica catalog implementation. The
065: * choice of backend is configured through properties.
066: *
067: * @param props is an already instantiated version of the properties.
068: * @exception ClassNotFoundException if the schema for the database
069: * cannot be loaded. You might want to check your CLASSPATH, too.
070: * @exception NoSuchMethodException if the schema's constructor interface
071: * does not comply with the database driver API.
072: * @exception InstantiationException if the schema class is an abstract
073: * class instead of a concrete implementation.
074: * @exception IllegalAccessException if the constructor for the schema
075: * class it not publicly accessible to this package.
076: * @exception InvocationTargetException if the constructor of the schema
077: * throws an exception while being dynamically loaded.
078: *
079: */
080: public RCWrapper(VDSProperties props)
081: throws ClassNotFoundException, IOException,
082: NoSuchMethodException, InstantiationException,
083: IllegalAccessException, InvocationTargetException {
084: m_rc = ReplicaFactory.loadInstance(props);
085: }
086:
087: /**
088: * Frees resources taken by the instance of the replica catalog. This
089: * method is safe to be called on failed or already closed catalogs.
090: */
091: public void close() {
092: if (m_rc != null) {
093: m_rc.close();
094: m_rc = null;
095: }
096: }
097:
098: /**
099: * garbage collection.
100: */
101: protected void finalize() {
102: close();
103: }
104:
105: /**
106: * Find the (first) physical filename for the logical file and
107: * resource.
108: *
109: * @param pool is the pool, site or resource name.
110: * @param lfn is the logical filename (LFN) to look up.
111: * @return the physical entity, or <code>null</code> if not found.
112: */
113: public String lookup(String pool, String lfn) {
114: // sanity check
115: if (m_rc == null)
116: return null;
117: return m_rc.lookup(lfn, pool);
118: }
119:
120: /**
121: * Obtains the name of the class implementing the replica catalog.
122: *
123: * @return class name of the replica catalog implementor.
124: */
125: public String getName() {
126: return (m_rc == null ? null : m_rc.getClass().getName());
127: }
128:
129: /**
130: * Shows the contents of the catalog as one string.
131: *
132: * @return the string with the complete catalog contents. Warning,
133: * this may be very large, slow, and memory expensive.
134: */
135: public String toString() {
136: // sanity check
137: if (m_rc == null)
138: return null;
139:
140: Map query = new TreeMap();
141: query.put(ReplicaCatalogEntry.RESOURCE_HANDLE, "local");
142: Map reply = new TreeMap(m_rc.lookup(query));
143: return reply.toString();
144: }
145: }
|