1 package de.dlr.shepard.context.collection.entities;
2
3 import de.dlr.shepard.common.neo4j.entities.AbstractDataObject;
4 import de.dlr.shepard.common.util.Constants;
5 import de.dlr.shepard.common.util.HasId;
6 import de.dlr.shepard.context.labJournal.entities.LabJournalEntry;
7 import de.dlr.shepard.context.references.basicreference.entities.BasicReference;
8 import de.dlr.shepard.context.references.dataobject.entities.DataObjectReference;
9 import java.util.ArrayList;
10 import java.util.List;
11 import lombok.Data;
12 import lombok.NoArgsConstructor;
13 import lombok.ToString;
14 import org.neo4j.ogm.annotation.NodeEntity;
15 import org.neo4j.ogm.annotation.Relationship;
16 import org.neo4j.ogm.annotation.Relationship.Direction;
17
18 @NodeEntity
19 @Data
20 @ToString(callSuper = true, onlyExplicitlyIncluded = true)
21 @NoArgsConstructor
22 public class DataObject extends AbstractDataObject {
23
24 @Relationship(type = Constants.HAS_DATAOBJECT, direction = Direction.INCOMING)
25 private Collection collection;
26
27 @Relationship(type = Constants.HAS_REFERENCE)
28 private List<BasicReference> references = new ArrayList<>();
29
30 @Relationship(type = Constants.HAS_SUCCESSOR, direction = Direction.OUTGOING)
31 private List<DataObject> successors = new ArrayList<>();
32
33 @Relationship(type = Constants.HAS_SUCCESSOR, direction = Direction.INCOMING)
34 private List<DataObject> predecessors = new ArrayList<>();
35
36 @Relationship(type = Constants.HAS_CHILD, direction = Direction.OUTGOING)
37 private List<DataObject> children = new ArrayList<>();
38
39 @Relationship(type = Constants.HAS_CHILD, direction = Direction.INCOMING)
40 private DataObject parent;
41
42 @Relationship(type = Constants.POINTS_TO, direction = Direction.INCOMING)
43 private List<DataObjectReference> incoming = new ArrayList<>();
44
45 @Relationship(type = Constants.HAS_LABJOURNAL_ENTRY)
46 private List<LabJournalEntry> labJournalEntries = new ArrayList<>();
47
48
49
50
51
52
53 public DataObject(long id) {
54 super(id);
55 }
56
57 public void addReference(BasicReference reference) {
58 references.add(reference);
59 }
60
61 public void addSuccessor(DataObject successor) {
62 successors.add(successor);
63 }
64
65 public void addPredecessor(DataObject predecessor) {
66 predecessors.add(predecessor);
67 }
68
69 public void addChild(DataObject child) {
70 children.add(child);
71 child.setParent(this);
72 }
73
74 public void addIncoming(DataObjectReference dataObjectReference) {
75 incoming.add(dataObjectReference);
76 }
77
78 @Override
79 public int hashCode() {
80 final int prime = 31;
81 int result = super.hashCode();
82 result = prime * result + HasId.hashcodeHelper(collection);
83 result = prime * result + HasId.hashcodeHelper(references);
84 result = prime * result + HasId.hashcodeHelper(successors);
85 result = prime * result + HasId.hashcodeHelper(predecessors);
86 result = prime * result + HasId.hashcodeHelper(children);
87 result = prime * result + HasId.hashcodeHelper(parent);
88 result = prime * result + HasId.hashcodeHelper(incoming);
89 result = prime * result + HasId.hashcodeHelper(labJournalEntries);
90 return result;
91 }
92
93 @Override
94 public boolean equals(Object obj) {
95 if (this == obj) return true;
96 if (!super.equals(obj)) return false;
97 if (!(obj instanceof DataObject)) return false;
98 DataObject other = (DataObject) obj;
99 return (
100 HasId.equalsHelper(collection, other.collection) &&
101 HasId.areEqualSetsByUniqueId(references, other.references) &&
102 HasId.areEqualSetsByUniqueId(predecessors, other.predecessors) &&
103 HasId.areEqualSetsByUniqueId(successors, other.successors) &&
104 HasId.equalsHelper(parent, other.parent) &&
105 HasId.areEqualSetsByUniqueId(children, other.children) &&
106 HasId.areEqualSetsByUniqueId(incoming, other.incoming) &&
107 HasId.areEqualSetsByUniqueId(labJournalEntries, other.labJournalEntries)
108 );
109 }
110 }