SortedTaskSet.java 1.65 KB
Newer Older
1 2
package mvd.jester.model;

3
import java.lang.reflect.Type;
4
import java.util.TreeSet;
5 6 7 8 9
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
10
import mvd.jester.priority.PriorityManager;
11
import mvd.jester.priority.RateMonotonic;
12 13 14 15

/**
 * SortedTaskSet
 */
16
public class SortedTaskSet<T extends Task> extends TreeSet<T> {
17 18 19

    private static final long serialVersionUID = 4808544133562675597L;

20
    public SortedTaskSet(final PriorityManager priorityMananger) {
21 22
        super((t1, t2) -> priorityMananger.compare(t1, t2));
    }
23

24 25 26 27 28 29 30

    public double getUtilization() {
        return super.stream().mapToDouble(T::getUtilization).sum();
    }


    public double getParallelTaskRatio() {
31 32
        final long parallelTasks =
                super.stream().filter(t -> t.getMaximumParallelism() > 1).count();
33 34 35 36 37

        return (double) parallelTasks / super.size();
    }

    public static class Deserializer<T extends Task> implements JsonDeserializer<SortedTaskSet<T>> {
38 39

        @Override
40 41 42
        public SortedTaskSet<T> deserialize(final JsonElement json, final Type typeOfT,
                final JsonDeserializationContext context) throws JsonParseException {
            final SortedTaskSet<T> taskSet = new SortedTaskSet<>(new RateMonotonic());
43
            if (json.isJsonArray()) {
44
                final JsonArray array = json.getAsJsonArray();
45
                array.forEach(e -> {
46
                    taskSet.add(context.deserialize(e, SynchronousTask.class));
47 48 49 50 51
                });
            }
            return taskSet;
        }
    }
52
}