MigrationTaskEntity.java
package de.dlr.shepard.data.timeseries.migration.model;
import de.dlr.shepard.common.util.StringListConverter;
import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "migration_tasks")
public class MigrationTaskEntity {
public static final String SPLIT_CHAR_REPLACEMENT = "_";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "container_id", nullable = false, unique = true)
private long containerId;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private MigrationTaskState state = MigrationTaskState.Planned;
@Column(name = "created_at", nullable = false)
private Date createdAt = new Date();
@Column(name = "started_at")
private Date startedAt;
@Column(name = "finished_at")
private Date finishedAt;
@Column(nullable = false, columnDefinition = "TEXT")
@Convert(converter = StringListConverter.class)
private List<String> errors = new ArrayList<String>();
// json representation of a timeseries
private String timeseries;
// influx database name
@Column(name = "database_name")
private String databaseName;
public MigrationTaskEntity(long containerId) {
this.containerId = containerId;
}
public void addError(String message) {
if (message == null || message.isBlank()) {
errors.add("UNKNOWN_ERROR");
return;
}
message = message.replaceAll(Pattern.quote(StringListConverter.SPLIT_CHAR), SPLIT_CHAR_REPLACEMENT);
errors.add(message);
}
}