/** * 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.LogManagerFactory; import edu.isi.pegasus.common.logging.LogManager; import edu.isi.pegasus.planner.common.PegasusProperties; import edu.isi.pegasus.planner.catalog.TransformationCatalog; import edu.isi.pegasus.common.util.DynamicLoader; /** * This class defines all the constants * referring to the various interfaces * to the transformation catalog, and * used by the Concrete Planner. * * @author Gaurang Mehta * @version $Revision$ */ public class TCMode { /** * Constants for backward compatibility. */ public static final String SINGLE_READ = "single"; public static final String MULTIPLE_READ = "multiple"; public static final String OLDFILE_TC_CLASS = "OldFile"; public static final String DEFAULT_TC_CLASS = "File"; /** * Default PACKAGE PATH for the TC implementing classes */ public static final String PACKAGE_NAME = "org.griphyn.common.catalog.transformation."; private static LogManager mLogger = LogManagerFactory.loadSingletonInstance(); //add your constants here. /** * This method just checks and gives the correct classname if a user provides the classname in a different case. * @param tcmode String * @return String */ private static String getImplementingClass( String tcmode ) { if ( tcmode.trim().equalsIgnoreCase( SINGLE_READ ) || tcmode.trim().equalsIgnoreCase( MULTIPLE_READ ) ) { return OLDFILE_TC_CLASS; } else { //no match to any predefined constant //assume that the value of readMode is the //name of the implementing class return tcmode; } } /** * The overloaded method which is to be used internally in Pegasus. * * @return TCMechanism */ public static TransformationCatalog loadInstance() { PegasusProperties mProps = PegasusProperties.getInstance(); TransformationCatalog tc = null; String tcClass = getImplementingClass( mProps.getTCMode() ); //if (tcClass.equals(FILE_TC_CLASS)) { // String[] args = {mProps.getTCPath()}; // return loadInstance(tcClass, args); // } else { String[] args = new String[0 ]; tc=loadInstance( tcClass, args ); if(tc==null) { mLogger.log( "Unable to load TC",LogManager.FATAL_MESSAGE_LEVEL); System.exit(1); } return tc; // } } /** * Loads the appropriate TC implementing Class with the given arguments. * @param tcClass String * @param args String[] * @return TCMechanism */ public static TransformationCatalog loadInstance( String tcClass, Object[] args ) { TransformationCatalog tc = null; String methodName = "getInstance"; //get the complete name including //the package if the package name not //specified if ( tcClass.indexOf( "." ) == -1 ) { tcClass = PACKAGE_NAME + tcClass; } DynamicLoader d = new DynamicLoader( tcClass ); try { tc = ( TransformationCatalog ) d.static_method( methodName, args ); //This identifies the signature for //the method } catch ( Exception e ) { mLogger.log( d.convertException( e ), LogManager.FATAL_MESSAGE_LEVEL); System.exit( 1 ); } return tc; } }