TaskContext.java 2.2 KB
Newer Older
1
package mvd.jester.simulator.internals.parallelsynchronous;
2 3 4 5 6

import java.util.ArrayList;
import java.util.Optional;
import mvd.jester.model.Segment;
import mvd.jester.model.Task;
7
import mvd.jester.simulator.EventPrinter;
8 9
import mvd.jester.simulator.internals.JobContextInterface;
import mvd.jester.simulator.internals.TaskContextInterface;
10 11 12 13

/**
 * TaskContext
 */
14
public class TaskContext implements TaskContextInterface {
15 16 17 18

    private final Task task;
    private final ArrayList<SegmentContext> segments;
    private final long deadline;
19
    private final long releaseTime;
20 21 22
    private int currentSegment;
    private int segmentCounter;

23
    public TaskContext(Task task, long releaseTime) {
24 25 26 27
        this.task = task;
        this.segments = new ArrayList<>();
        this.currentSegment = 0;
        this.segmentCounter = 0;
28 29
        this.releaseTime = releaseTime;
        this.deadline = releaseTime + task.getDeadline();
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

        for (Segment s : task.getSegments()) {
            segments.add(new SegmentContext(this, s));
        }
    }

    /**
     * @return the task
     */
    public Task getTask() {
        return task;
    }

    /**
     * @return the deadline
     */
46
    @Override
47 48 49 50
    public long getDeadline() {
        return deadline;
    }

51 52 53 54 55
    @Override
    public long getReleaseTime() {
        return releaseTime;
    }

56
    public Optional<TaskContextInterface> acceptNotification(long time) {
57 58 59 60 61 62
        segmentCounter++;

        if (segmentCounter >= segments.get(currentSegment).getSegment().getNumberOfJobs()) {
            currentSegment++;
            segmentCounter = 0;
            if (currentSegment >= segments.size()) {
63
                EventPrinter.print("Time " + time + ": Task " + this + "finished!");
64 65 66 67 68 69 70 71
                return Optional.of(this);
            }
        }


        return Optional.empty();
    }

72
    public Optional<JobContextInterface> getNextJob() {
73
        if (currentSegment < segments.size()) {
74
            return segments.get(currentSegment).getNextJob();
75 76 77 78 79 80 81 82 83 84 85 86
        }

        return Optional.empty();
    }


    @Override
    public String toString() {
        return "(period=" + task.getPeriod() + ", deadline=" + deadline + ", segments="
                + segments.size() + ")";
    }
}