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.vdl.router;
16:
17: import java.util.*;
18: import org.griphyn.vdl.util.Logging;
19: import org.griphyn.vdl.classes.Definition;
20: import org.griphyn.vdl.classes.Derivation;
21:
22: /**
23: * This implementation of the arbitration interface prefers the first
24: * derivation within the same current working namespace. If there is no
25: * such derivation, returns the first one from the collection.
26: *
27: * @author Jens-S. Vöckler
28: * @author Yong Zhao
29: * @version $Revision $
30: */
31: public class PreferNamespace implements Arbiter {
32: /**
33: * Compares two strings, each of which may be null. If both are null,
34: * they are considered equal by this function. This function relies on
35: * the fact that equals() can deal with null arguments.
36: *
37: * @param a a string which may be null
38: * @param b a string which may be null
39: * @return true, if the strings equal, or if both are null.
40: */
41: private static boolean matchWithNull(String a, String b) {
42: return (a == null ? b == null : a.equals(b));
43: }
44:
45: /**
46: * The interface method of the arbitration determines the most likely
47: * derivation to chose by chosing the first within the same namespace.
48: * The cwns is the only element from the environment used to determine
49: * the likely candidate.
50: *
51: * @param dvlist is a set of candidates
52: * @param environment is a map describing the environment.
53: * @return the chosen candidate from the input set
54: */
55: public Derivation arbit(java.util.Collection dvlist,
56: java.util.Map environment) {
57: // sanity check
58: if (dvlist.size() == 0)
59: return null;
60:
61: // linear search in list
62: String cwns = (String) environment.get("cwns");
63: Derivation result = null;
64: for (Iterator i = dvlist.iterator(); i.hasNext();) {
65: Derivation dv = (Derivation) i.next();
66: if (matchWithNull(cwns, dv.getNamespace())) {
67: result = dv;
68: break;
69: }
70: }
71:
72: // still not found? Use first element -- and complain!
73: if (result == null) {
74: Logging.instance().log("route", 0,
75: "Unable to match namespaces, using first element");
76: result = (Derivation) dvlist.iterator().next();
77: }
78:
79: // done
80: return result;
81: }
82: }
|