/* * 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; } }