01: /*
02: * This file or a portion of this file is licensed under the terms of
03: * the Globus Toolkit Public License, found in file GTPL, or at
04: * http://www.globus.org/toolkit/download/license.html. This notice must
05: * appear in redistributions of this file, with or without modification.
06: *
07: * Redistributions of this Software, with or without modification, must
08: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
09: * some other similar material which is provided with the Software (if
10: * any).
11: *
12: * Copyright 1999-2004 University of Chicago and The University of
13: * Southern California. All rights reserved.
14: */
15: package org.griphyn.cPlanner.selector;
16:
17: /**
18: *
19: * This class is an abstract class for the Transformation Catalog Selector.
20: * Its purpose is to provide a generic api to select one valid transformation
21: * among the many transformations.
22: * @author Gaurang Mehta
23: * @version $Revision: 50 $
24: *
25: */
26:
27: import org.griphyn.cPlanner.common.LogManager;
28:
29: import org.griphyn.common.util.DynamicLoader;
30: import org.griphyn.common.util.FactoryException;
31:
32: import java.util.List;
33:
34: public abstract class TransformationSelector {
35:
36: public static final String PACKAGE_NAME = "org.griphyn.cPlanner.selector.transformation";
37:
38: protected LogManager mLogger;
39:
40: public TransformationSelector() {
41: mLogger = LogManager.getInstance();
42: }
43:
44: /**
45: * Takes a list of TransformationCatalogEntry objects and returns 1 or many
46: * TransformationCatalogEntry objects as a list depending on the type of selection algorithm.
47: * The Random and RoundRobin implementation ensure that only one entry is
48: * returned and should be run last when chaining multiple selectors
49: * @param tcentries List
50: * @return List
51: */
52: public abstract List getTCEntry(List tcentries);
53:
54: /**
55: * Loads the implementing class corresponding to the mode specified by the
56: * user at runtime in the properties file.
57: *
58: * @param className String The name of the class that implements the mode.
59: * It is the name of the class, not the complete name with
60: * package. That is added by itself.
61: *
62: * @return TransformationSelector
63: *
64: * @throws FactoryException that nests any error that
65: * might occur during the instantiation of the implementation.
66: */
67: public static TransformationSelector loadTXSelector(String className)
68: throws FactoryException {
69:
70: //prepend the package name
71: className = PACKAGE_NAME + "." + className;
72:
73: //try loading the class dynamically
74: TransformationSelector ss = null;
75: DynamicLoader dl = new DynamicLoader(className);
76: try {
77: Object argList[] = new Object[0];
78: //argList[ 0 ] = ( path == null ) ? new String() : path;
79: ss = (TransformationSelector) dl.instantiate(argList);
80: } catch (Exception e) {
81: throw new FactoryException(
82: "Instantiating Create Directory", className, e);
83: }
84:
85: return ss;
86: }
87:
88: }
|