de.factoryfx.data.storage.ScheduledDataMetadata Maven / Gradle / Ivy
package de.factoryfx.data.storage;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* metadata for a future data
*
* implements Delayed to make it's easy usable width a DelayQueue
*
* Note: this class has a natural ordering that is inconsistent with equals
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class ScheduledDataMetadata extends StoredDataMetadata implements Delayed{
/** for scheduled update: date and time of planned activation of this configuration */
public final LocalDateTime scheduled;
@JsonCreator
public ScheduledDataMetadata(
@JsonProperty("creationTime")LocalDateTime creationTime,
@JsonProperty("id")String id,
@JsonProperty("user")String user,
@JsonProperty("comment")String comment,
@JsonProperty("baseVersionId")String baseVersionId,
@JsonProperty("dataModelVersion")int dataModelVersion,
@JsonProperty("changeSummary")T changeSummary,
@JsonProperty("scheduled")LocalDateTime scheduled ) {
super(creationTime, id, user, comment, baseVersionId, dataModelVersion, changeSummary);
this.scheduled=scheduled;
}
public ScheduledDataMetadata(NewDataMetadata storedDataMetadata, LocalDateTime scheduled) {
this(null, "", "", "", storedDataMetadata.baseVersionId, storedDataMetadata.dataModelVersion, null, scheduled);
}
@JsonIgnore
@Override
public long getDelay(TimeUnit unit) {
return convert(unit).between(LocalDateTime.now(),scheduled);
}
@JsonIgnore
@Override
public int compareTo(Delayed o) {
return scheduled.compareTo(((ScheduledDataMetadata)o).scheduled);
}
private ChronoUnit convert(TimeUnit unit) {
//TODO if java 9 replace with TimeUnit.toChronoUnit()
if (unit == null) {
return null;
}
switch (unit) {
case DAYS:
return ChronoUnit.DAYS;
case HOURS:
return ChronoUnit.HOURS;
case MINUTES:
return ChronoUnit.MINUTES;
case SECONDS:
return ChronoUnit.SECONDS;
case MICROSECONDS:
return ChronoUnit.MICROS;
case MILLISECONDS:
return ChronoUnit.MILLIS;
case NANOSECONDS:
return ChronoUnit.NANOS;
default:
return null;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy