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.classes;
016:
017: import java.util.Iterator;
018: import java.util.List;
019:
020: /**
021: * This extends the job description used in Pegasus to incorporate the input and
022: * the output url's that are required to pull in the input and push out the
023: * output files. In VDS terms each of these job is a VDS super node without the
024: * registration job.
025: *
026: * @author Karan Vahi
027: * @version $Revision: 50 $
028: */
029:
030: public class GRMSJob extends SubInfo {
031:
032: /**
033: * List of the input urls from where to fetch the input files.
034: * Each object in this list is of type <code>NameValue</code> where name is
035: * the logical name of the associated file , and value it the url.
036: */
037: private List inputURLs;
038:
039: /**
040: * List of the output urls that specify where to transfer the output files.
041: * Each object in this list is of type <code>NameValue</code> where name is
042: * the logical name of the associated file , and value it the url.
043: */
044: private List outputURLs;
045:
046: /**
047: * The default constructor
048: */
049: public GRMSJob() {
050: super ();
051: inputURLs = new java.util.ArrayList();
052: outputURLs = new java.util.ArrayList();
053: }
054:
055: /**
056: * The overloaded construct that constructs a GRMS job by wrapping around
057: * the SubInfo job.
058: *
059: * @param job the original job description.
060: */
061: public GRMSJob(SubInfo job) {
062: super (job);
063: inputURLs = new java.util.ArrayList();
064: outputURLs = new java.util.ArrayList();
065: }
066:
067: /**
068: * Adds a url of the job. The url can be either input or output.
069: *
070: * @param lfn the lfn associated with the url.
071: * @param url the url.
072: * @param type i means input
073: * o means output
074: *
075: * @return boolean true the url was successfully added.
076: * false the type of the url was wrong.
077: */
078: public boolean addURL(String lfn, String url, char type) {
079: boolean ret = false;
080: NameValue nv;
081:
082: switch (type) {
083: case 'i':
084: nv = new NameValue(lfn, url);
085: inputURLs.add(nv);
086: ret = true;
087: break;
088:
089: case 'o':
090: nv = new NameValue(lfn, url);
091: outputURLs.add(nv);
092: ret = true;
093: break;
094:
095: default:
096: break;
097:
098: }
099:
100: return ret;
101: }
102:
103: /**
104: * It returns an iterator to the underlying associated collection.
105: * The iterator returns objects of type <code>NameValue</code>.
106: *
107: * @param type i input urls
108: * o output urls
109: *
110: * @return the iterator to corresponding collection.
111: * null if invalid type.
112: */
113: public Iterator iterator(char type) {
114: Iterator it;
115: switch (type) {
116: case 'i':
117: it = inputURLs.iterator();
118: break;
119:
120: case 'o':
121: it = outputURLs.iterator();
122: break;
123:
124: default:
125: it = null;
126: break;
127:
128: }
129: return it;
130:
131: }
132:
133: /**
134: * Returns a textual description of the GRMS job.
135: */
136: public String toString() {
137: String st = super .toString();
138: Iterator it = inputURLs.iterator();
139:
140: st += "\nInput URLs";
141: while (it.hasNext()) {
142: st += (String) it.next() + ",";
143: }
144: it = inputURLs.iterator();
145: st += "\nOutput URLs";
146: while (it.hasNext()) {
147: st += (String) it.next() + ",";
148: }
149:
150: return st;
151:
152: }
153:
154: /**
155: * Returns a new copy of the Object. However the url list are copied by
156: * reference. It is not a true copy.
157: */
158: public Object clone() {
159: GRMSJob newJob = new GRMSJob((SubInfo) super.clone());
160: newJob.inputURLs = this.inputURLs;
161: newJob.outputURLs = this.outputURLs;
162: return newJob;
163:
164: }
165: }
|