001: /*
002: * This file or a portion of this file is licensed under the terms of
003: * the Globus Toolkit Public License, found in file GTPL, or at
004: * http://www.globus.org/toolkit/download/license.html. This notice must
005: * appear in redistributions of this file, with or without modification.
006: *
007: * Redistributions of this Software, with or without modification, must
008: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
009: * some other similar material which is provided with the Software (if
010: * any).
011: *
012: * Copyright 1999-2004 University of Chicago and The University of
013: * Southern California. All rights reserved.
014: */
015:
016: package org.griphyn.cPlanner.provenance.pasoa.pps;
017:
018: import org.griphyn.cPlanner.common.PegasusProperties;
019: import org.griphyn.common.util.DynamicLoader;
020:
021: import org.griphyn.cPlanner.provenance.pasoa.PPS;
022:
023: /**
024: * The factory for instantiating an XMLProducer.
025: *
026: * @author Karan Vahi
027: * @version $Revision: 247 $
028: */
029: public class PPSFactory {
030:
031: /**
032: * The default package where all the implementations reside.
033: */
034: public static final String DEFAULT_PACKAGE_NAME = "org.griphyn.cPlanner.provenance.pasoa.pps";
035:
036: /**
037: * The default PPS implementation to be used.
038: */
039: public static final String DEFAULT_PPS_PROVIDER = "Empty";
040:
041: /**
042: * The default Pasoa PPS implementation to be used.
043: */
044: public static final String PASOA_PPS_PROVIDER = "Pasoa";
045:
046: /**
047: * The singleton instance of the PPS implementation that is returned.
048: */
049: private static PPS mInstance = null;
050:
051: /**
052: * Loads the appropriate PPS implementation on the basis of the property set in the
053: * properties.
054: *
055: *
056: * @param properties the <code>PegasusProperties</code> object containing all
057: * the properties required by Pegasus.
058: *
059: * @return the instance of the appropriate XML Producer.
060: *
061: * @throws PPSFactoryException that nests any error that
062: * might occur during the instantiation
063: *
064: * @see #DEFAULT_PACKAGE_NAME
065: */
066: public static PPS loadPPS(PegasusProperties properties)
067: throws PPSFactoryException {
068:
069: //sanity check
070: if (properties == null) {
071: throw new PPSFactoryException(
072: "No properties passed to factory ");
073: }
074:
075: //check for singleton
076: if (mInstance != null) {
077: return mInstance;
078: }
079:
080: String className = properties.getRefinementProvenanceStore();
081: if (className == null) {
082: className = DEFAULT_PPS_PROVIDER;
083: } else if (className.equalsIgnoreCase("pasoa")) {
084: className = PASOA_PPS_PROVIDER;
085: }
086:
087: PPS pps = null;
088: try {
089: //prepend the package name if required
090: className = (className.indexOf('.') == -1) ?
091: //pick up from the default package
092: DEFAULT_PACKAGE_NAME + "." + className
093: :
094: //load directly
095: className;
096:
097: //try loading the class dynamically
098: DynamicLoader dl = new DynamicLoader(className);
099: pps = (PPS) dl.instantiate(new Object[0]);
100: } catch (Exception e) {
101: throw new PPSFactoryException(
102: " Unable to instantiate PPS ", className, e);
103: }
104: mInstance = pps;
105: return pps;
106: }
107:
108: }
|