1 package de.dlr.shepard.context.version.entities;
2
3 import de.dlr.shepard.auth.users.entities.User;
4 import de.dlr.shepard.common.neo4j.entities.Named;
5 import de.dlr.shepard.common.neo4j.entities.UserCreated;
6 import de.dlr.shepard.common.util.Constants;
7 import de.dlr.shepard.common.util.HasId;
8 import java.util.Date;
9 import java.util.Objects;
10 import java.util.UUID;
11 import lombok.Data;
12 import lombok.NoArgsConstructor;
13 import lombok.ToString;
14 import org.neo4j.ogm.annotation.GeneratedValue;
15 import org.neo4j.ogm.annotation.Id;
16 import org.neo4j.ogm.annotation.NodeEntity;
17 import org.neo4j.ogm.annotation.Relationship;
18 import org.neo4j.ogm.annotation.typeconversion.Convert;
19 import org.neo4j.ogm.annotation.typeconversion.DateLong;
20 import org.neo4j.ogm.id.UuidStrategy;
21 import org.neo4j.ogm.typeconversion.UuidStringConverter;
22
23 @NodeEntity
24 @Data
25 @NoArgsConstructor
26 public class Version implements HasId, UserCreated, Named {
27
28 @Id
29 @GeneratedValue(strategy = UuidStrategy.class)
30 @Convert(UuidStringConverter.class)
31 private UUID uid;
32
33 private String name;
34
35 private String description;
36
37 private boolean isHEADVersion;
38
39 @DateLong
40 private Date createdAt;
41
42 @ToString.Exclude
43 @Relationship(type = Constants.CREATED_BY)
44 private User createdBy;
45
46 @Relationship(type = Constants.HAS_PREDECESSOR)
47 private Version predecessor;
48
49
50
51
52
53
54 public Version(String name) {
55 this.name = name;
56 }
57
58 public Version(String name, String description, Date createdAt, User createdBy, Version predecessor) {
59 this.name = name;
60 this.description = description;
61 this.createdAt = createdAt;
62 this.createdBy = createdBy;
63 this.predecessor = predecessor;
64 }
65
66 public Version(String name, String description, Date createdAt, User createdBy) {
67 this.name = name;
68 this.description = description;
69 this.createdAt = createdAt;
70 this.createdBy = createdBy;
71 this.isHEADVersion = true;
72 }
73
74
75
76
77
78
79 public Version(UUID uid) {
80 this.uid = uid;
81 }
82
83 @Override
84 public String getUniqueId() {
85 return uid.toString();
86 }
87
88 @Override
89 public int hashCode() {
90 final int prime = 31;
91 int result = 1;
92 result = prime * result + Objects.hash(createdAt, uid, name, description, isHEADVersion);
93 result = prime * result + HasId.hashcodeHelper(createdBy);
94 result = prime * result + HasId.hashcodeHelper(predecessor);
95 return result;
96 }
97
98 @Override
99 public boolean equals(Object obj) {
100 if (this == obj) return true;
101 if (!(obj instanceof Version other)) return false;
102 return (
103 Objects.equals(createdAt, other.createdAt) &&
104 Objects.equals(isHEADVersion, other.isHEADVersion) &&
105 HasId.equalsHelper(createdBy, other.createdBy) &&
106 Objects.equals(description, other.description) &&
107 Objects.equals(uid, other.uid) &&
108 HasId.equalsHelper(predecessor, other.predecessor) &&
109 Objects.equals(name, other.name)
110 );
111 }
112 }