001 package ifs.example.jobshop;
002
003 import ifs.model.*;
004
005 /**
006 * Location of an operation.
007 * <br><br>
008 * Each location has its start time.
009 *
010 * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
011 * @version 1.0
012 */
013 public class Location extends Value {
014 private int iStartTime = -1;
015
016 /**
017 * Constructor
018 * @param op parent operation
019 * @param startTime start time
020 */
021 public Location(Operation op, int startTime) {
022 super(op);
023 iStartTime = startTime;
024 }
025
026 /**
027 * Get start time of the location
028 */
029 public int getStartTime() { return iStartTime; }
030
031 /**
032 * Get finishing time of the location (start time + operation processing time)
033 */
034 public int getFinishingTime() { return iStartTime+((Operation)variable()).getProcessingTime()-1; }
035
036 /**
037 * Start time of the location
038 */
039 public int toInt() { return iStartTime; }
040
041 /**
042 * String representation (operation name = start time)
043 */
044 public String toString() { return variable().getName()+"="+iStartTime; }
045
046 /**
047 * Name -- start time
048 */
049 public String getName() { return String.valueOf(iStartTime); }
050
051 /**
052 * Returns true if overlap with the given location
053 */
054 public boolean overlap(Location anotherLocation) {
055 if (getStartTime()+((Operation)variable()).getProcessingTime()<=anotherLocation.getStartTime()) return false;
056 if (anotherLocation.getStartTime()+((Operation)anotherLocation.variable()).getProcessingTime()<=getStartTime()) return false;
057 return true;
058 }
059
060 /**
061 * Returnts true if before the given location
062 */
063 public boolean before(Location anotherLocation) {
064 if (getStartTime()+((Operation)variable()).getProcessingTime()<=anotherLocation.getStartTime()) return true;
065 return false;
066 }
067
068 /**
069 * Returnts true if after the given location
070 */
071 public boolean after(Location anotherLocation) {
072 return anotherLocation.before(this);
073 }
074 }