/**
* 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.refiner.cleanup;
import edu.isi.pegasus.planner.classes.PegasusBag;
import edu.isi.pegasus.planner.common.PegasusProperties;
import edu.isi.pegasus.common.util.DynamicLoader;
/**
* A factory class to load the appropriate type of Code Generator. The
* CodeGenerator implementation is used to write out the concrete plan.
*
* @author Karan Vahi
* @author Rafael Ferreira da Silva
* @version $Revision$
*/
public class CleanupFactory {
/**
* The default package where the all the implementing classes are supposed
* to reside.
*/
public static final String DEFAULT_PACKAGE_NAME
= "edu.isi.pegasus.planner.refiner.cleanup";
/**
* Loads the implementing class corresponding to the mode specified by the
* user at runtime.
*
* @param bag bag of initialization objects
*
*
* @return instance of a Cleanup CleanupStrategy implementation
*
* @throws CleanupFactoryException that nests any error that might occur
* during the instantiation of the implementation.
*/
public static CleanupStrategy loadCleanupStraegyInstance(PegasusBag bag) throws CleanupFactoryException {
PegasusProperties props = bag.getPegasusProperties();
if (props == null) {
throw new CleanupFactoryException("Properties instance is null ");
}
String className = props.getCleanupStrategy();
if (bag.getPlannerOptions().getCleanup() != null) {
switch (bag.getPlannerOptions().getCleanup()) {
case inplace:
case leaf:
className = "InPlace";
break;
case constraint:
className = "Constraint";
break;
}
}
//prepend the package name
className = DEFAULT_PACKAGE_NAME + "." + className;
//try loading the class dynamically
CleanupStrategy cd = null;
DynamicLoader dl = new DynamicLoader(className);
try {
Object argList[] = new Object[0];
cd = (CleanupStrategy) dl.instantiate(argList);
cd.initialize(bag,
CleanupFactory.loadCleanupImplementationInstance(bag));
} catch (Exception e) {
throw new CleanupFactoryException("Instantiating Cleanup Strategy",
className,
e);
}
return cd;
}
/**
* Loads the implementing class corresponding to the mode specified by the
* user at runtime.
*
* @param bag bag of initialization objects
*
*
* @return instance of a CreateDirecctory implementation
*
* @throws FactoryException that nests any error that might occur during the
* instantiation of the implementation.
*/
public static CleanupImplementation loadCleanupImplementationInstance(
PegasusBag bag) throws CleanupFactoryException {
PegasusProperties props = bag.getPegasusProperties();
if (props == null) {
throw new CleanupFactoryException("Properties instance is null ");
}
String className = props.getCleanupImplementation();
//for now
//className = "DefaultImplementation";
//prepend the package name
className = DEFAULT_PACKAGE_NAME + "." + className;
//try loading the class dynamically
CleanupImplementation impl = null;
DynamicLoader dl = new DynamicLoader(className);
try {
Object argList[] = new Object[0];
impl = (CleanupImplementation) dl.instantiate(argList);
impl.initialize(bag);
} catch (Exception e) {
throw new CleanupFactoryException("Instantiating Cleanup Implementation",
className,
e);
}
return impl;
}
}