TaskContext.java 2.24 KB
Newer Older
1
package mvd.jester.simulator.internals.schmidmottok;
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

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


24
    public TaskContext(Task task, long numberOfProcessors, long releaseTime) {
25 26 27 28
        this.task = task;
        this.segments = new ArrayList<>();
        this.currentSegment = 0;
        this.segmentCounter = 0;
29 30
        this.deadline = releaseTime + task.getDeadline();
        this.releaseTime = releaseTime;
31 32

        for (Segment s : task.getSegments()) {
33
            segments.add(new SegmentContext(this, s, numberOfProcessors));
34 35 36 37 38 39 40 41 42 43 44 45 46
        }
    }

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

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

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

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

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


        return Optional.empty();
    }

73
    public Optional<JobContextInterface> getNextJob() {
74
        if (currentSegment < segments.size()) {
75
            return segments.get(currentSegment).getNextJob();
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() + ")";
    }
87

88
}