package io.vivarium.net.jobs; import java.util.ArrayList; import java.util.Collection; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.vivarium.net.UUIDDeserializer; import io.vivarium.net.UUIDSerializer; import io.vivarium.util.UUID; import lombok.EqualsAndHashCode; import lombok.ToString; @EqualsAndHashCode(callSuper = false) @ToString @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class") public abstract class Job { private final JobType _type; private final UUID _jobID; private final Collection<UUID> _inputResources; private final Collection<UUID> _outputResources; private final Collection<UUID> _dependencies; @JsonCreator public Job(@JsonProperty("type") JobType jobType, @JsonProperty("jobID") @JsonSerialize(using = UUIDSerializer.class) UUID jobID, @JsonProperty("inputResources") Collection<UUID> inputResources, @JsonProperty("outputResources") Collection<UUID> outputResources, @JsonProperty("dependencies") Collection<UUID> dependencies) { _type = jobType; _jobID = jobID; this._inputResources = new ArrayList<>(inputResources); this._outputResources = new ArrayList<>(outputResources); this._dependencies = new ArrayList<>(dependencies); } public JobType getType() { return _type; } @JsonDeserialize(using = UUIDDeserializer.class) public UUID getJobID() { return _jobID; } @JsonSerialize(contentUsing = UUIDSerializer.class) public Collection<UUID> getInputResources() { return _inputResources; } @JsonSerialize(contentUsing = UUIDSerializer.class) public Collection<UUID> getOutputResources() { return _outputResources; } @JsonSerialize(contentUsing = UUIDSerializer.class) public Collection<UUID> getDependencies() { return _dependencies; } }