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.classes;
017:
018: import java.util.Iterator;
019:
020: import java.io.Writer;
021: import java.io.StringWriter;
022: import java.io.IOException;
023:
024: /**
025: * Captures the parent child relationship between the jobs in the ADAG.
026: *
027: * @author Karan Vahi
028: * @version $Revision: 50 $
029: */
030:
031: public class PCRelation extends Data /*implements Comparable*/{
032:
033: /**
034: * the parent making up the
035: * parent child relationship pair
036: * in a dag
037: */
038: public String parent;
039:
040: /**
041: * the child making up the
042: * parent child relationship pair
043: * in a dag
044: */
045: public String child;
046:
047: /**
048: * this is used for collapsing the dag
049: * during the reduction algorithm
050: * on the basis of the results returned
051: * from the Replica Catalog.
052: */
053: public boolean isDeleted;
054:
055: /**
056: * the default constructor
057: */
058: public PCRelation() {
059: parent = new String();
060: child = new String();
061: isDeleted = false;
062: }
063:
064: /**
065: * the overloaded constructor
066: */
067: public PCRelation(String parentName, String childName,
068: boolean deleted) {
069: parent = new String(parentName);
070: child = new String(childName);
071: isDeleted = deleted;
072:
073: }
074:
075: /**
076: * the overloaded constructor
077: */
078: public PCRelation(String parentName, String childName) {
079: parent = new String(parentName);
080: child = new String(childName);
081: isDeleted = false;
082:
083: }
084:
085: /**
086: * Returns the parent in the edge.
087: *
088: * @return parent
089: */
090: public String getParent() {
091: return parent;
092: }
093:
094: /**
095: * Returns the child in the edge.
096: *
097: * @return child
098: */
099: public String getChild() {
100: return child;
101: }
102:
103: /**
104: * returns a new copy of the
105: * Object
106: */
107: public Object clone() {
108: PCRelation pc = new PCRelation();
109: pc.parent = this .parent;
110: pc.child = this .child;
111: pc.isDeleted = this .isDeleted;
112:
113: return pc;
114: }
115:
116: /**
117: * Checks if an object is similar to the one referred to by this class.
118: * We compare the primary key to determine if it is the same or not.
119: *
120: * @return true if the primary key (parent,child) match.
121: * else false.
122: */
123: public boolean equals(Object o) {
124: PCRelation rel = (PCRelation) o;
125:
126: return (rel.parent.equals(this .parent) && rel.child
127: .equals(this .child)) ? true : false;
128: }
129:
130: public int compareTo(Object o) {
131: return (this .equals(o)) ? 0 : 1;
132: }
133:
134: /**
135: * Returns the textual description.
136: *
137: * @return textual description.
138: */
139: public String toString() {
140: StringBuffer sb = new StringBuffer();
141: sb.append("{").append(parent).append(" -> ").append(child)
142: .append(",").append(this .isDeleted).append("}");
143:
144: return sb.toString();
145: }
146:
147: /**
148: * Returns the DOT description of the object. This is used for visualizing
149: * the workflow.
150: *
151: * @return String containing the Partition object in XML.
152: *
153: * @exception IOException if something fishy happens to the stream.
154: */
155: public String toDOT() throws IOException {
156: Writer writer = new StringWriter(32);
157: toDOT(writer, "");
158: return writer.toString();
159: }
160:
161: /**
162: * Returns the DOT description of the object. This is used for visualizing
163: * the workflow.
164: *
165: * @param stream is a stream opened and ready for writing. This can also
166: * be a StringWriter for efficient output.
167: * @param indent is a <code>String</code> of spaces used for pretty
168: * printing. The initial amount of spaces should be an empty
169: * string. The parameter is used internally for the recursive
170: * traversal.
171: *
172: *
173: * @exception IOException if something fishy happens to the stream.
174: */
175: public void toDOT(Writer stream, String indent) throws IOException {
176: String newLine = System.getProperty("line.separator", "\r\n");
177:
178: //write out the edge
179: stream.write(indent);
180: stream.write("\"");
181: stream.write(getParent());
182: stream.write("\"");
183: stream.write(" -> ");
184: stream.write("\"");
185: stream.write(getChild());
186: stream.write("\"");
187: stream.write(newLine);
188: stream.flush();
189: }
190:
191: }
|