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: package org.griphyn.cPlanner.visualize;
016:
017: import java.util.Map;
018: import java.util.HashMap;
019: import java.util.List;
020: import java.util.LinkedList;
021: import java.util.Comparator;
022: import java.util.Collections;
023: import java.util.Iterator;
024:
025: /**
026: * A container object that stores the measurements for each site on which
027: * the workflow was executed.
028: *
029: * @author Karan Vahi
030: * @version $Revision: 50 $
031: */
032: public class WorkflowMeasurements {
033:
034: /**
035: * The map that stores the list of <code>Measurement</code> indexed by site name.
036: */
037: private Map mStore;
038:
039: /**
040: * The default constructor.
041: */
042: public WorkflowMeasurements() {
043: mStore = new HashMap();
044: }
045:
046: /**
047: * Returns an iterator to list of <code>String</code> site identifiers
048: * for which data is available.
049: *
050: * @return Iterator
051: */
052: public Iterator siteIterator() {
053: return mStore.keySet().iterator();
054: }
055:
056: /**
057: * Returns the list of <code>Measurement</code> objects corresponding to a
058: * particular site.
059: *
060: * @param site the site for which Measurements are required.
061: *
062: * @return List
063: */
064: public List getMeasurements(String site) {
065: return (mStore.containsKey(site) ? (List) mStore.get(site)
066: : new LinkedList());
067: }
068:
069: /**
070: * Add a Measurement to the store.
071: *
072: * @param site the site for which the record is logged.
073: * @param record the <code>Measurement</code> record.
074: */
075: public void addMeasurement(String site, Measurement record) {
076: List l = (mStore.containsKey(site)) ? (List) mStore.get(site)
077: : new LinkedList();
078: l.add(record);
079: mStore.put(site, l);
080: }
081:
082: /**
083: * Sorts the records for each site.
084: */
085: public void sort() {
086: MeasurementComparator s = new MeasurementComparator();
087: for (Iterator it = mStore.entrySet().iterator(); it.hasNext();) {
088: Map.Entry entry = (Map.Entry) it.next();
089: List l = (List) entry.getValue();
090: Collections.sort(l, s);
091: }
092: }
093:
094: /**
095: * Returns textual description of the object.
096: *
097: * @return the textual description
098: */
099: public String toString() {
100: StringBuffer sb = new StringBuffer();
101: sb.append("{\n ");
102: for (Iterator it = mStore.entrySet().iterator(); it.hasNext();) {
103: Map.Entry entry = (Map.Entry) it.next();
104: List l = (List) entry.getValue();
105: sb.append(entry.getKey()).append(" -> ");
106: for (Iterator lIT = l.iterator(); lIT.hasNext();) {
107: sb.append("\n\t");
108: sb.append(lIT.next());
109: sb.append(" , ");
110: }
111: }
112: sb.append("\n}");
113: return sb.toString();
114: }
115: }
116:
117: /**
118: * Comparator for Measurement objects that allows us to sort on time.
119: *
120: */
121: class MeasurementComparator implements Comparator {
122:
123: /**
124: * Implementation of the {@link java.lang.Comparable} interface.
125: * Compares this object with the specified object for order. Returns a
126: * negative integer, zero, or a positive integer as this object is
127: * less than, equal to, or greater than the specified object. The
128: * definitions are compared by their type, and by their short ids.
129: *
130: * @param o1 is the object to be compared
131: * @param o2 is the object to be compared with o1.
132: *
133: * @return a negative number, zero, or a positive number, if the
134: * object compared against is less than, equals or greater than
135: * this object.
136: * @exception ClassCastException if the specified object's type
137: * prevents it from being compared to this Object.
138: */
139: public int compare(Object o1, Object o2) {
140: if (o1 instanceof Measurement && o2 instanceof Measurement) {
141: Measurement s1 = (Measurement) o1;
142: Measurement s2 = (Measurement) o2;
143:
144: return s1.getTime().compareTo(s2.getTime());
145: } else {
146: throw new ClassCastException("object is not a Space");
147: }
148: }
149: }
|