/*
*
* Copyright 2007-2008 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package edu.isi.pegasus.planner.provisioner;
import java.util.*;
/**
* An instance of this class represent an edge of workflow which is
* data dependencies between two tasks. So this class contains references
* of two dependent nodes(From node and To node) and information of
* data between them; file name, data size and data transfer time.
*
* @author Eunkyu Byun
*/
public class Edge {
public static final long DEFAULT_SIZE = 0;
public static final long DEFAULT_BPS = 1;
public static final long DEFAULT_LATENCY = 0;
Node fromNode;
Node toNode;
long cost;
String fileName;
long fileSize;
/**
* Constructor
* @param from One of nodes this edge connects which generate the data
* @param to Another node this edge connects which get the data
* @param fileName the stored name of data
* @param fileSize the size of the data, DTT is calculated according to BPS and Latency
*/
public Edge(Node from, Node to, String fileName, long fileSize) {
this.fromNode = from;
this.toNode = to;
this.fileName = fileName;
this.fileSize = fileSize;
this.cost = (fileSize/DEFAULT_BPS) + DEFAULT_LATENCY;
}
/**
* initiate bit and completion time variable used bt HEFT algorithm
*/
public void init() {
this.complete = false;
this.compTime = 0;
}
/**
* return the 'from' task
*/
public Node getFrom() {
return fromNode;
}
/**
* return the 'to' task
*/
public Node getTo() {
return toNode;
}
/**
* set the 'from' task
* @param e the from task to be set
*/
public void setFrom(Node e) {
this.fromNode = e;
}
/**
* set the 'to' task
* @param e the to task to be set
*/
public void setTo(Node e) {
this.toNode = e;
}
public String getID() {
return fileName;
}
public long getCost(long bandwidth,long latency) {
return (fileSize/bandwidth) + latency;
}
public long getCost() {
return cost;
}
public void setCost(long c) {
this.cost = c;
}
public void print() {
System.out.println("Edge_"+fileName+"("+fileSize+"KB) "+fromNode.getID()+" -> " + toNode.getID() );
}
public boolean complete = false;
public long compTime = 0;
public boolean deleted = false;
}