1 package de.dlr.shepard.data.timeseries.migration.model;
2
3 import de.dlr.shepard.common.util.StringListConverter;
4 import jakarta.persistence.Column;
5 import jakarta.persistence.Convert;
6 import jakarta.persistence.Entity;
7 import jakarta.persistence.EnumType;
8 import jakarta.persistence.Enumerated;
9 import jakarta.persistence.GeneratedValue;
10 import jakarta.persistence.GenerationType;
11 import jakarta.persistence.Id;
12 import jakarta.persistence.Table;
13 import java.util.ArrayList;
14 import java.util.Date;
15 import java.util.List;
16 import java.util.regex.Pattern;
17 import lombok.Getter;
18 import lombok.NoArgsConstructor;
19 import lombok.Setter;
20
21 @Getter
22 @Setter
23 @NoArgsConstructor
24 @Entity
25 @Table(name = "migration_tasks")
26 public class MigrationTaskEntity {
27
28 public static final String SPLIT_CHAR_REPLACEMENT = "_";
29
30 @Id
31 @GeneratedValue(strategy = GenerationType.IDENTITY)
32 private int id;
33
34 @Column(name = "container_id", nullable = false, unique = true)
35 private long containerId;
36
37 @Enumerated(EnumType.STRING)
38 @Column(nullable = false)
39 private MigrationTaskState state = MigrationTaskState.Planned;
40
41 @Column(name = "created_at", nullable = false)
42 private Date createdAt = new Date();
43
44 @Column(name = "started_at")
45 private Date startedAt;
46
47 @Column(name = "finished_at")
48 private Date finishedAt;
49
50 @Column(nullable = false, columnDefinition = "TEXT")
51 @Convert(converter = StringListConverter.class)
52 private List<String> errors = new ArrayList<String>();
53
54
55 private String timeseries;
56
57
58 @Column(name = "database_name")
59 private String databaseName;
60
61 public MigrationTaskEntity(long containerId) {
62 this.containerId = containerId;
63 }
64
65 public void addError(String message) {
66 if (message == null || message.isBlank()) {
67 errors.add("UNKNOWN_ERROR");
68 return;
69 }
70 message = message.replaceAll(Pattern.quote(StringListConverter.SPLIT_CHAR), SPLIT_CHAR_REPLACEMENT);
71 errors.add(message);
72 }
73 }