/**
* 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.common;
import edu.isi.pegasus.common.logging.LogManager;
import edu.isi.pegasus.planner.classes.PlannerOptions;
import java.util.Collection;
import java.util.Set;
import java.util.Vector;
/**
* A Singleton wrapper around the
* PlannerOptions class to get hold
* of the options specified by the
* user to run Pegasus. This allows
* us to get hold of the options anywhere
* without us messing up with the constructors
* of classes.
*
* @author Karan Vahi
* @author Gaurang Mehta
* @version $Revision$
*
* @see org.griphyn.cPlanner.classes.PlannerOptions
*/
public class UserOptions {
/**
* The object holding the
* Singleton instance.
*/
private static UserOptions mPOptions = null;
/**
* The Logger object used to
* log the messages.
*/
private LogManager mLogger;
/**
* The object containing all the
* user options.
*/
private PlannerOptions mPlannerOpts = null;
/**
* The method used to invoke the
* singleton instance the first
* time, from the CPlanner class.
*
* @param opt the object containing
* the options to the Planner.
*/
public static UserOptions getInstance(PlannerOptions opt){
if(mPOptions == null && opt != null){
mPOptions = new UserOptions(opt);
}
return mPOptions;
}
/**
* The method used to invoke the
* singleton instance from the
* other classes.
*/
public static UserOptions getInstance(){
return getInstance(null);
}
/**
* The private constructor that initializes the user options.
* This should be invoked from the CPlanner class in the toolkit
* package.
*
* @throws RuntimeException in case of incorrect initialization.
*/
private UserOptions(PlannerOptions opt) {
if(opt == null){
mLogger.log("Wrong Invocation of the Singleton Instance",
LogManager.FATAL_MESSAGE_LEVEL);
throw new RuntimeException( "Wrong Invocation of the Singleton Instance" );
}
mPlannerOpts = opt;
}
/**
* Returns the dax file, that
* was generated by Chimera
* containing the description of
* the Abstract plan.
*/
public String getDaxFile(){
return this.mPlannerOpts.getDAX();
}
/**
* Returns output pool where the
* user wants the data products
* to be transferred to.
*/
public String getOutputPool(){
return this.mPlannerOpts.getOutputSite();
}
/**
* Returns the options passed to the planner.
*
* @return PlannerOptions
*/
public PlannerOptions getOptions(){
return this.mPlannerOpts;
}
/**
* Returns the directory where the
* user wants the submit files to be
* generated.
*/
public String getSubmitFileDir(){
return this.mPlannerOpts.getSubmitDirectory();
}
/**
* Returns the list of execution pools
* where the user wants the data
* products to be computed.
*/
public Collection getExecutionSites(){
//return new Vector(this.mPlannerOpts.getExecutionSites());
return this.mPlannerOpts.getExecutionSites();
}
/**
* Sets the execution sites.
*
* @param sites the <code>Set</code> containing the site names.
*/
public void setExecutionSites(Collection sites){
this.mPlannerOpts.setExecutionSites(sites);
}
/**
* Returns whether we want to create
* a Random Directory or not.
*/
public boolean generateRandomDirectory(){
return this.mPlannerOpts.generateRandomDirectory();
}
/**
* It returns the set of cache files.
*/
public Set getCacheFiles(){
return this.mPlannerOpts.getCacheFiles();
}
/**
* Returns the name of the random
* directory, only if the generate
* Random Dir flag is set.
* Else it returns null.
*/
public String getRandomDirName(){
if ( this .generateRandomDirectory()){
return this.mPlannerOpts.getRandomDir();
}
return null;
}
/**
* Returns true if the user had asked
* for the force option.
*/
public boolean getForceOption(){
return this.mPlannerOpts.getForce();
}
}