/*
* Title: CloudSim Toolkit
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2009-2012, The University of Melbourne, Australia
*/
package org.occiware.clouddesigner.occi.simulation.cloudsim.core;
import java.util.ArrayList;
/**
* This class represents a simulation event which is passed between the entities in the simulation.
*
* @author Costas Simatos
* @see Simulation
* @see SimEntity
*/
public class SimEvent implements Cloneable, Comparable<SimEvent> {
/** internal event type **/
private final int etype;
/** time at which event should occur **/
private final double time;
/** time that the event was removed from the queue for service **/
private double endWaitingTime;
/** id of entity who scheduled event **/
private int entSrc;
/** id of entity event will be sent to **/
private int entDst;
/** the user defined type of the event **/
private final int tag;
/** any data the event is carrying **/
private final Object data;
private long serial = -1;
// Internal event types
public static final int ENULL = 0;
public static final int SEND = 1;
public static final int HOLD_DONE = 2;
public static final int CREATE = 3;
/**
* Create a blank event.
*/
public SimEvent() {
etype = ENULL;
time = -1L;
endWaitingTime = -1.0;
entSrc = -1;
entDst = -1;
tag = -1;
data = null;
}
// ------------------- PACKAGE LEVEL METHODS --------------------------
SimEvent(int evtype, double time, int src, int dest, int tag, Object edata) {
etype = evtype;
this.time = time;
entSrc = src;
entDst = dest;
this.tag = tag;
data = edata;
}
SimEvent(int evtype, double time, int src) {
etype = evtype;
this.time = time;
entSrc = src;
entDst = -1;
tag = -1;
data = null;
}
protected void setSerial(long serial) {
this.serial = serial;
}
/**
* Used to set the time at which this event finished waiting in the event
*
* @param end_waiting_time
*/
protected void setEndWaitingTime(double end_waiting_time) {
endWaitingTime = end_waiting_time;
}
// below code added by anupinder singh
public void CustomtoString(String className) {
ArrayList<String> type = new ArrayList<String>();
type.add("ENULL");
type.add("SEND");
type.add("HOLD_DONE");
type.add("CREATE");
String msg = className + ": -->Event Type = " + type.get(etype)
+ ";Event tag = " + CloudSimTags.TagText(tag) + "; source = "
+ CloudSim.getEntity(entSrc).getName() + "; destination = "
+ CloudSim.getEntity(entDst).getName() + "; Time= " + this.time
+ "; endwaiting time = " + this.endWaitingTime;
if (data != null) {
msg += "; data = " + data.toString();
}
msg += "\n\n";
//PrintFile.AddtoFile(msg);
}
@Override
public String toString() {
// below code commented is original, rest all added by anupinder singh
ArrayList<String> type = new ArrayList<String>();
type.add("ENULL");
type.add("SEND");
type.add("HOLD_DONE");
type.add("CREATE");
String msg = "-->Event Type = " + type.get(etype) + ";Event tag = "
+ CloudSimTags.TagText(tag) + "; source = "
+ CloudSim.getEntity(entSrc).getName() + "; destination = "
+ CloudSim.getEntity(entDst).getName() + "; Time= " + this.time
+ "; endwaiting time = " + this.endWaitingTime;
if (data != null) {
msg += "; data = " + data.toString();
}
msg += "\n\n";
return "\n\n" + msg;
// return "Event tag = " + tag + " source = " +
// CloudSim.getEntity(entSrc).getName() + " destination = "
// + CloudSim.getEntity(entDst).getName();
}
/**
* The internal type
*
* @return
*/
public int getType() {
return etype;
}
// ------------------- PUBLIC METHODS --------------------------
/**
* @see Comparable#compareTo(Object)
*/
@Override
public int compareTo(SimEvent event) {
if (event == null) {
return 1;
} else if (time < event.time) {
return -1;
} else if (time > event.time) {
return 1;
} else if (serial < event.serial) {
return -1;
} else if (this == event) {
return 0;
} else {
return 1;
}
}
/**
* Get the unique id number of the entity which received this event.
*
* @return the id number
*/
public int getDestination() {
return entDst;
}
/**
* Get the unique id number of the entity which scheduled this event.
*
* @return the id number
*/
public int getSource() {
return entSrc;
}
/**
* Get the simulation time that this event was scheduled.
*
* @return The simulation time
*/
public double eventTime() {
return time;
}
/**
* Get the simulation time that this event was removed from the queue for service.
*
* @return The simulation time
*/
public double endWaitingTime() {
return endWaitingTime;
}
/**
* Get the user-defined tag of this event
*
* @return The tag
*/
public int type() {
return tag;
}
/**
* Get the unique id number of the entity which scheduled this event.
*
* @return the id number
*/
public int scheduledBy() {
return entSrc;
}
/**
* Get the user-defined tag of this event.
*
* @return The tag
*/
public int getTag() {
return tag;
}
/**
* Get the data passed in this event.
*
* @return A reference to the data
*/
public Object getData() {
return data;
}
/**
* Create an exact copy of this event.
*
* @return The event's copy
*/
@Override
public Object clone() {
return new SimEvent(etype, time, entSrc, entDst, tag, data);
}
/**
* Set the source entity of this event.
*
* @param s The unique id number of the entity
*/
public void setSource(int s) {
entSrc = s;
}
/**
* Set the destination entity of this event.
*
* @param d The unique id number of the entity
*/
public void setDestination(int d) {
entDst = d;
}
}