summaryrefslogtreecommitdiff
path: root/sources/core/VSTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/core/VSTask.java')
-rw-r--r--sources/core/VSTask.java523
1 files changed, 0 insertions, 523 deletions
diff --git a/sources/core/VSTask.java b/sources/core/VSTask.java
deleted file mode 100644
index 381b268..0000000
--- a/sources/core/VSTask.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * VS-Simulator (http://vs-sim.buetow.org)
- * Copyright (c) 2008 -2009 by Dipl.-Inform. (FH) Paul C. Buetow
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package core;
-
-import java.io.*;
-
-import events.*;
-import events.implementations.*;
-import events.internal.*;
-import exceptions.*;
-import prefs.VSPrefs;
-import protocols.VSAbstractProtocol;
-import serialize.*;
-//import utils.*;
-
-/**
- * The class VSTask, an object of this class represents a task to do or done.
- * All tasks are managed by the task manager. There are local and global timed
- * tasks. Local timed tasks are being fullfilled if the process' local time is
- * reached. Global timed tasks are being fullfilled if the simulator's time is
- * reached.
- *
- * @author Paul C. Buetow
- */
-public class VSTask implements Comparable, VSSerializable {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The Constant LOCAL. Used for the constructor if it's a local timed
- * task.
- */
- public final static boolean LOCAL = true;
-
- /** The Constant GLOBAL. Used for the constructor if it's a global timed
- * task.
- */
- public final static boolean GLOBAL = false;
-
- /** The task time. */
- private long taskTime;
-
- /** The event which takes plase if the task time matches. */
- private VSAbstractEvent event;
-
- /** The process to run the task at. */
- private VSInternalProcess process;
-
- /** The simulator's default prefs. */
- private VSPrefs prefs;
-
- /** The task is programmed. The task will be still in the task manager
- * after reset.
- */
- private boolean isProgrammed;
-
- /** The task is global timed. If set to true, its local timed. */
- private boolean isGlobalTimed;
-
- /** The task counter. Needed for the unique task numbers. */
- private static int taskCounter;
-
- /** The task number. */
- private int taskNum;
-
- /**
- * Instantiates a new task.
- *
- * @param taskTime the task time
- * @param process the process
- * @param event the event
- * @param isLocal the taks is local timed
- */
- public VSTask(long taskTime, VSInternalProcess process,
- VSAbstractEvent event,
- boolean isLocal) {
- init(taskTime, process, event, isLocal);
- }
-
- /**
- * Instantiates a new task, it's a copy constructor.
- *
- * @param task the task to copy
- */
- public VSTask(VSTask task) {
- VSAbstractEvent event = task.getEvent();
-
- try {
- // Use the copy of the event object
- event = event.getCopy();
-
- } catch (VSEventNotCopyableException e) {
- // Use the original event object
- }
-
- init(task.getTaskTime(),
- task.getProcess(),
- event,
- !task.isGlobalTimed());
- }
-
- /**
- * Instantiates a new task during a deserialization.
- *
- * @param serialize the serialize object
- * @param objectInputStream The input stream
- */
- public VSTask(VSSerialize serialize, ObjectInputStream objectInputStream)
- throws IOException, ClassNotFoundException {
- deserialize(serialize, objectInputStream);
- }
-
- /**
- * Inits the task
- *
- * @param taskTime the task time
- * @param process the process
- * @param event the event
- * @param isLocal the taks is local timed
- */
- private void init(long taskTime, VSInternalProcess process,
- VSAbstractEvent event, boolean isLocal) {
- this.process = process;
- this.taskTime = taskTime > 0 ? taskTime : 0;
- /* May be not null if called from deserialization */
- if (this.event == null)
- this.event = event;
- this.prefs = process.getPrefs();
- this.isGlobalTimed = !isLocal;
- this.taskNum = ++taskCounter;
- }
-
- /**
- * Gets the task num.
- *
- * @return the task num
- */
- public int getTaskNum() {
- return taskNum;
- }
-
- /**
- * Sets if the task is programmed.
- *
- * @param isProgrammed true, if the task is programmed
- */
- public void isProgrammed(boolean isProgrammed) {
- this.isProgrammed = isProgrammed;
- }
-
- /**
- * Checks if the task is programmed.
- *
- * @return true, if the task is programmed
- */
- public boolean isProgrammed() {
- return isProgrammed;
- }
-
- /**
- * Checks if the task is using an "internal event".
- *
- * @return true, if the task is using an internal event
- */
- public boolean hasInternalEvent() {
- return event instanceof VSAbstractInternalEvent;
- }
-
- /**
- * Checks if the task should not get serialized.
- *
- * @return true, if the task should not get serialized
- */
- public boolean hasNotSerializableEvent() {
- return event instanceof VSNotSerializable;
- }
-
- /**
- * Checks if the task is a message receive event.
- *
- * @return true, if it is a message receive event
- */
- public boolean hasMessageReceiveEvent() {
- return event instanceof VSMessageReceiveEvent;
- }
-
- /**
- * Checks if the task is a process recover event.
- *
- * @return true, if it is a process recover event
- */
- public boolean hasProcessRecoverEvent() {
- return event instanceof VSProcessRecoverEvent;
- }
-
- /**
- * Checks if the task belongs to the specified protocol object.
- *
- * @param protocol the protocol object to check against.
- *
- * @return true, if it's a task using the protocol object.
- */
- public boolean isProtocol(VSAbstractProtocol protocol) {
- if (event instanceof VSAbstractProtocol)
- return ((VSAbstractProtocol) event).equals(protocol);
-
- return false;
- }
-
- /**
- * Checks if the task's time is over.
- *
- * @return true, if it's over
- */
- public boolean timeOver() {
- if (isGlobalTimed)
- return taskTime < process.getGlobalTime();
-
- return taskTime < process.getTime();
- }
-
- /**
- * Checks if the task equals to another task.
- *
- * @param task the task to compare to
- *
- * @return true, if equal (the task nums equal)
- */
- public boolean equals(VSTask task) {
- return taskNum == task.getTaskNum();
- }
-
- /**
- * Checks if the task belongs to the specified process.
- *
- * @param process the process to check against
- *
- * @return true, if the task is using the process
- */
- public boolean isProcess(VSInternalProcess process) {
- return this.process.equals(process);
- }
-
- /**
- * Checks if the task is global timed.
- *
- * @return true, if the taks is global timed
- */
- public boolean isGlobalTimed() {
- return isGlobalTimed;
- }
-
- /**
- * Gets the process.
- *
- * @return the process of the event
- */
- public VSInternalProcess getProcess() {
- return process;
- }
-
- /**
- * Runs the task.
- */
- public void run() {
- if (event.getProcess() == null)
- event.init(process);
-
- if (!(event instanceof VSMessageReceiveEvent)
- && !(event instanceof VSAbstractProtocol))
- process.increaseVectorAndLamportTimeIfAll();
-
- event.onStart();
- }
-
- /**
- * Gets the task time.
- *
- * @return the task time
- */
- public long getTaskTime() {
- return taskTime;
- }
-
- /**
- * Sets the task time.
- *
- * @param taskTime the task time
- */
- public void setTaskTime(long taskTime) {
- this.taskTime = taskTime;
- }
-
- /**
- * Sets the process.
- *
- * @param process the process
- */
- public void setProcess(VSInternalProcess process) {
- /* Only do it if the process differs */
- if (!this.process.equals(process)) {
- this.process = process;
-
- try {
- // Use the copy of the event object
- event = event.getCopy(process);
-
- } catch (VSEventNotCopyableException e) {
- if (event instanceof VSAbstractProtocol) {
- String eventShortname = event.getShortname();
- event = process.getProtocolObject(event.getClassname());
- event.setShortname(eventShortname);
- } else {
- System.out.println(e);
- }
- }
- }
- }
-
- /**
- * Gets the event.
- *
- * @return the event
- */
- public VSAbstractEvent getEvent() {
- return event;
- }
-
- /*
- private void log(String message) {
- process.log(message);
- }
- */
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
-
- buffer.append(prefs.getString("lang.en.task"));
- buffer.append(" ");
- buffer.append(getTaskTime());
- buffer.append(event.toString());
- buffer.append("; PID: ");
- buffer.append(process.getProcessID());
- /*
- if (isProgrammed()) {
- buffer.append("; Programmed");
- }
- */
-
- return buffer.toString();
- }
-
- /* (non-Javadoc)
- * @see java.lang.Comparable#compareTo(java.lang.Object)
- */
- public int compareTo(Object object) {
- if (object instanceof VSTask) {
- final VSTask task = (VSTask) object;
-
- if (taskTime < task.getTaskTime())
- return -1;
-
- else if (taskTime > task.getTaskTime())
- return 1;
-
- VSAbstractEvent event2 = task.getEvent();
-
- /* If it's a recovering, it should get handled very first */
- boolean a = event instanceof VSProcessRecoverEvent;
- boolean b = event2 instanceof VSProcessRecoverEvent;
-
- if (a && b)
- return 0;
-
- if (a)
- return -1;
-
- if (b)
- return 1;
-
- /* If it's a crash, it should get handled second first */
- a = event instanceof VSProcessCrashEvent;
- b = event2 instanceof VSProcessCrashEvent;
-
- if (a && b)
- return 0;
-
- if (a)
- return -1;
-
- if (b)
- return 1;
-
- /* If it's a VSProtocolEvent, it should get handled third */
- a = event instanceof VSProtocolEvent;
- b = event2 instanceof VSProtocolEvent;
-
- if (a && b)
- return 0;
-
- if (a)
- return -1;
-
- if (b)
- return 1;
-
- String shortname = event.getShortname();
- String shortname2 = event2.getShortname();
-
- /* One of those may be null if an VSAbstractEvent object has not
- been initialized yet */
- if (shortname == null || shortname2 == null)
- return 0;
-
- return shortname.compareTo(shortname2);
- }
-
- return 0;
- }
-
- /* (non-Javadoc)
- * @see serialize.VSSerializable#serialize(serialize.VSSerialize,
- * java.io.ObjectOutputStream)
- */
- public synchronized void serialize(VSSerialize serialize,
- ObjectOutputStream objectOutputStream)
- throws IOException {
- /** For later backwards compatibility, to add more stuff */
- objectOutputStream.writeObject(new Boolean(false));
-
- objectOutputStream.writeObject(new Integer(process.getProcessNum()));
-
- if (event.getClassname() == null)
- event.init(process);
-
- if (VSSerialize.DEBUG)
- System.out.println("Serializing: " + event.getClassname());
-
- objectOutputStream.writeObject(event.getClassname());
- objectOutputStream.writeObject(new Integer(event.getID()));
- event.serialize(serialize, objectOutputStream);
- objectOutputStream.writeObject(new Integer(taskNum));
- objectOutputStream.writeObject(new Long(taskTime));
- objectOutputStream.writeObject(new Boolean(isGlobalTimed));
- objectOutputStream.writeObject(new Boolean(isProgrammed));
-
- /** For later backwards compatibility, to add more stuff */
- objectOutputStream.writeObject(new Boolean(false));
- }
-
- /* (non-Javadoc)
- * @see serialize.VSSerializable#deserialize(serialize.VSSerialize,
- * java.io.ObjectInputStream)
- */
- @SuppressWarnings("unchecked")
- public synchronized void deserialize(VSSerialize serialize,
- ObjectInputStream objectInputStream)
- throws IOException, ClassNotFoundException {
- if (VSSerialize.DEBUG)
- System.out.println("Deserializing: VSTask");
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
-
- int processNum = ((Integer) objectInputStream.readObject()).intValue();
- VSInternalProcess process = (VSInternalProcess)
- serialize.getObject(processNum, "process");
-
- String eventClassname = (String) objectInputStream.readObject();
- int eventID = ((Integer) objectInputStream.readObject()).intValue();
-
- VSAbstractEvent event = null;
-
- if (serialize.objectExists(eventID, "event")) {
- event = (VSAbstractEvent) serialize.getObject(eventID, "event");
-
- } else {
- event = VSRegisteredEvents.
- createEventInstanceByClassname(eventClassname, process);
-
- serialize.setObject(eventID, "event", event);
- }
-
- event.deserialize(serialize, objectInputStream);
-
- int taskNum = ((Integer) objectInputStream.readObject()).intValue();
- long taskTime = ((Long) objectInputStream.readObject()).longValue();
- Boolean isGlobalTimed = (Boolean) objectInputStream.readObject();
- Boolean isProgrammed = (Boolean) objectInputStream.readObject();
-
- serialize.setObject(taskNum, "task", this);
- init(taskTime, process, event, !isGlobalTimed.booleanValue());
- this.isProgrammed = isProgrammed.booleanValue();
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
- }
-}
-