/* * 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 java.io.*; import java.util.*; import edu.isi.pegasus.planner.catalog.transformation.classes.TCType; import edu.isi.pegasus.planner.catalog.transformation.TCMode; import edu.isi.pegasus.planner.catalog.TransformationCatalog; import edu.isi.pegasus.planner.catalog.transformation.TransformationCatalogEntry; /** * This class wraps the shell planner's request into the new TC API. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ * */ public class TCWrapper implements Wrapper { /** * transformation catalog API reference. */ private TransformationCatalog m_tc; /** * Connects the interface with the transformation catalog * implementation. The choice of backend is configured through * properties. */ public TCWrapper() { m_tc = TCMode.loadInstance(); } /** * 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_tc != null ) { m_tc.close(); m_tc = null; } } /** * garbage collection. */ protected void finalize() { close(); } /** * Obtains all applications that bear the name and are installed at the * resource. * * @param ns is the TR namespace * @param id is the TR identifier * @param vs is the TR version * @param site is the site handle, should be "local". * @return a possibly empty list of * {@link org.griphyn.common.catalog.TransformationCatalogEntry TransformationCatalogEntry} with all matches. */ public List lookup( String ns, String id, String vs, String site ) { // sanity check if ( m_tc == null ) return null; List result = null; try { result = m_tc.lookup( ns, id, vs, site, TCType.INSTALLED ); } catch ( Exception e ) { result = null; } return result; } /** * Extracts all profiles contained in the transformation catalog entry. * * @param tce is the transformation catalog entry * @return a map of maps. The outer map is indexed by the lower-cased * namespace identifier. The inner map is indexed by the key within * the particular namespace. An empty map is possible. */ public static Map getProfiles( TransformationCatalogEntry tce ) { Map result = new HashMap(); List lop = tce.getProfiles(); if ( lop == null || lop.size() == 0 ) return result; Map submap = null; for ( Iterator i=lop.iterator(); i.hasNext(); ) { edu.isi.pegasus.planner.classes.Profile p = ( edu.isi.pegasus.planner.classes.Profile) i.next(); String ns = p.getProfileNamespace().trim().toLowerCase(); String key = p.getProfileKey().trim(); String value = p.getProfileValue(); // insert at the right place into the result map if ( result.containsKey(ns) ) { submap = (Map) result.get(ns); } else { result.put( ns, (submap = new HashMap()) ); } submap.put( key, value ); } return result; } /** * Obtains the name of the class implementing the replica catalog. * * @return class name of the replica catalog implementor. */ public String getName() { return ( m_tc == null ? null : m_tc.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() { return "(method not implemented)"; } }