/*
*
* Copyright 2007-2008 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package edu.isi.pegasus.planner.catalog.transformation;
import edu.isi.pegasus.common.logging.LogManager;
import edu.isi.pegasus.common.logging.LogManagerFactory;
import edu.isi.pegasus.common.util.Version;
import edu.isi.pegasus.planner.common.PegasusProperties;
import edu.isi.pegasus.planner.classes.Profile;
import edu.isi.pegasus.planner.catalog.transformation.classes.Arch;
import edu.isi.pegasus.planner.catalog.transformation.classes.VDSSysInfo;
import edu.isi.pegasus.planner.catalog.transformation.classes.TCType;
import edu.isi.pegasus.planner.catalog.transformation.classes.Os;
import edu.isi.pegasus.planner.catalog.TransformationCatalog;
import java.util.Set;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* A Test program that shows how to load a Replica Catalog, and query for entries sites.
* The configuration is picked from the Properties. The following properties
* need to be set
* <pre>
* pegasus.catalog.transformation File|Database
* pegasus.catalog.transformation.file path to the File Based Transformation Catalog if File is being used.
* </pre>
*
* To use the Database Transformation catalog the database connection parameters
* can be specified by specifying the following properties
* <pre>
* pegasus.catalog.transformation.db.url
* pegasus.catalog.transformation.db.user
* pegasus.catalog.transformation.db.password
* </pre>
* The sql schema’s for this catalog can be found at $PEGASUS_HOME/sql directory.
*
* The Pegasus Properties can be picked from property files at various locations.
* The priorities are explained below.
* <pre>
* - The default path for the properties file is $PEGASUS_HOME/etc/properties.
* - A properties file if found at ${user.home}/.pegasusrc has higher property.
* - Finally a user can specify the path to the properties file by specifying
* the JVM property pegasus.user.properties . This has the higher priority.
* </pre>
*
* @author Karan Vahi
* @version $Revision$
*/
public class TestTransformationCatalog {
/**
* The main program.
*/
public static void main( String[] args ) {
TransformationCatalog catalog = null;
PegasusProperties properties = PegasusProperties.nonSingletonInstance();
//setup the logger for the default streams.
LogManager logger = LogManagerFactory.loadSingletonInstance( properties );
logger.logEventStart( "event.pegasus.catalog.transformation.test", "planner.version", Version.instance().toString() );
//set debug level to maximum
//set if something is going wrong
//logger.setLevel( LogManager.DEBUG_MESSAGE_LEVEL );
/* print out all the relevant site catalog properties that were specified*/
Properties replicaProperties = properties.matchingSubset( "pegasus.catalog.transformation", true );
System.out.println( "Transformation Catalog Properties specified are " + replicaProperties );
/* load the catalog using the factory */
try{
catalog = TransformationFactory.loadInstance( PegasusProperties.nonSingletonInstance());
}
catch ( TransformationFactoryException e ){
System.out.println( e.convertException() );
System.exit( 2 );
}
/* lets insert an entry into TransformationCatalog */
try{
/* the logical transformation is identified by a tuple
* consisting of namespace , name and version
* The namespace and version can be null.
*/
String namespace = "pegasus";
String lfn = "preprocess";
String version = null;
String pfn = "/usr/pegasus/bin/keg";
String handle = "isi";// the site handle of the site where the data is
TransformationCatalogEntry tce = new TransformationCatalogEntry( namespace, lfn, version );
tce.setPhysicalTransformation( pfn );
tce.setResourceId( handle );
tce.setType( TCType.INSTALLED ); //executable is installed
tce.setVDSSysInfo( new VDSSysInfo( Arch.INTEL32, Os.LINUX, null, null ) );
//add an environment profile with the entry
tce.addProfile( new Profile( Profile.ENV, "PEGASUS_HOME", "/usr/pegasus/bin" ));
/* insert the entry into transformation catalog */
boolean added = (catalog.insert( tce ) == 1)?true : false;
System.out.println( "Entry added " + added );
/* query for the entry we just entered */
List<TransformationCatalogEntry> results = catalog.lookup( namespace, lfn, version, handle, TCType.INSTALLED );
if( results != null ){
System.out.println( "Results for LFN " + lfn );
for( TransformationCatalogEntry entry: results ){
System.out.println( entry );
}
}
/* remove the entry we added
* deletes are only implemented for the database version
*/
//boolean deleted = catalog.removeByLFN( namespace, lfn, version, handle, TCType.INSTALLED );
//System.out.println( "Entry deleted " + added );
/* list all the entries remaining in the TC */
System.out.println( "\nListing all entries in the transformation catalog " );
List<TransformationCatalogEntry> entries = catalog.getContents();
for( TransformationCatalogEntry e: entries ){
System.out.println( e );
}
}
catch ( Exception e ){
e.printStackTrace();
}
finally{
/* close the connection */
try{
catalog.close();
}catch( Exception e ){}
}
}
}