View Javadoc
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     * For testing purposes only
51     *
52     * @param username identifies the user
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     * For testing purposes only
76     *
77     * @param uid identifies the entity
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 }