Revision 4d68581f
Added by Katja Luther over 3 years ago
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dto/TermNodeDto.java | ||
---|---|---|
15 | 15 |
import java.util.Set; |
16 | 16 |
import java.util.UUID; |
17 | 17 |
|
18 |
import org.springframework.util.Assert; |
|
19 |
|
|
18 | 20 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
19 | 21 |
import eu.etaxonomy.cdm.model.description.FeatureState; |
20 |
import eu.etaxonomy.cdm.model.term.DefinedTermBase; |
|
21 | 22 |
import eu.etaxonomy.cdm.model.term.TermNode; |
22 | 23 |
import eu.etaxonomy.cdm.model.term.TermTree; |
23 | 24 |
import eu.etaxonomy.cdm.model.term.TermType; |
... | ... | |
26 | 27 |
* @author k.luther |
27 | 28 |
* @since Mar 18, 2020 |
28 | 29 |
*/ |
29 |
public class TermNodeDto<T extends DefinedTermBase> implements Serializable{
|
|
30 |
public class TermNodeDto implements Serializable{ |
|
30 | 31 |
|
31 | 32 |
private static final long serialVersionUID = 7568459208397248126L; |
32 | 33 |
|
33 | 34 |
UUID parentUuid; |
34 | 35 |
String treeIndex; |
35 |
List<TermNodeDto<T>> children;
|
|
36 |
List<TermNodeDto> children; |
|
36 | 37 |
Set<FeatureState> onlyApplicableIf = new HashSet<>(); |
37 | 38 |
Set<FeatureState> inapplicableIf = new HashSet<>(); |
38 | 39 |
UUID uuid; |
39 | 40 |
TermDto term; |
40 | 41 |
TermType type; |
41 | 42 |
TermTreeDto tree; |
42 |
|
|
43 |
public TermNodeDto(TermNode<T> node){ |
|
44 |
uuid = node.getUuid(); |
|
43 |
String path; |
|
44 |
|
|
45 |
public static TermNodeDto fromNode(TermNode node){ |
|
46 |
Assert.notNull(node, "Node should not be null"); |
|
47 |
TermDto term = node.getTerm() != null?TermDto.fromTerm(node.getTerm()): null; |
|
48 |
TermTreeDto tree = node.getGraph() != null? TermTreeDto.fromTree(HibernateProxyHelper.deproxy(node.getGraph(), TermTree.class)):null; |
|
49 |
TermNodeDto dto = new TermNodeDto(term, null, node.getParent() != null? node.getParent().getIndex(node): 0, tree, node.getUuid(), node.treeIndex(), node.getPath()); |
|
50 |
// uuid = node.getUuid(); |
|
45 | 51 |
if (node.getParent() != null){ |
46 |
parentUuid = node.getParent().getUuid();
|
|
52 |
dto.setParentUuid(node.getParent().getUuid());
|
|
47 | 53 |
} |
48 |
TermTree termTree = HibernateProxyHelper.deproxy(node.getGraph(), TermTree.class); |
|
49 |
tree = new TermTreeDto(termTree); |
|
50 |
treeIndex = node.treeIndex(); |
|
51 |
children = new ArrayList(); |
|
52 |
for (TermNode<T> child: node.getChildNodes()){ |
|
53 |
|
|
54 |
children.add(new TermNodeDto(child)); |
|
55 |
} |
|
56 |
onlyApplicableIf = node.getOnlyApplicableIf(); |
|
57 |
inapplicableIf = node.getInapplicableIf(); |
|
58 |
if (node.getTerm() != null){ |
|
59 |
term = TermDto.fromTerm(node.getTerm()); |
|
54 |
// TermTree termTree = HibernateProxyHelper.deproxy(node.getGraph(), TermTree.class); |
|
55 |
// tree = TermTreeDto.fromTree(termTree); |
|
56 |
// treeIndex = node.treeIndex(); |
|
57 |
List<TermNodeDto> children = new ArrayList(); |
|
58 |
for (Object o: node.getChildNodes()){ |
|
59 |
if (o instanceof TermNode){ |
|
60 |
TermNode child = (TermNode)o; |
|
61 |
|
|
62 |
if (child != null){ |
|
63 |
if(child.getTermType().equals(TermType.Character)){ |
|
64 |
children.add(CharacterNodeDto.fromTermNode(child)); |
|
65 |
}else{ |
|
66 |
children.add(TermNodeDto.fromNode(child)); |
|
67 |
} |
|
68 |
} |
|
69 |
} |
|
60 | 70 |
} |
61 |
type = node.getTermType(); |
|
71 |
dto.setChildren(children); |
|
72 |
dto.setOnlyApplicableIf(node.getOnlyApplicableIf()); |
|
73 |
dto.setInapplicableIf(node.getInapplicableIf()); |
|
74 |
// if (node.getTerm() != null){ |
|
75 |
// term = TermDto.fromTerm(node.getTerm()); |
|
76 |
// } |
|
77 |
dto.setTermType(node.getTermType()); |
|
78 |
// path = node.getPath(); |
|
79 |
return dto; |
|
62 | 80 |
} |
63 | 81 |
|
64 | 82 |
|
65 |
public TermNodeDto(TermDto termDto, TermNodeDto parent, int position, TermTreeDto treeDto){ |
|
66 |
uuid = null;
|
|
83 |
public TermNodeDto(TermDto termDto, TermNodeDto parent, int position, TermTreeDto treeDto, UUID uuid, String treeIndex, String path){
|
|
84 |
this.uuid = uuid;
|
|
67 | 85 |
if (parent != null){ |
68 | 86 |
parentUuid = parent.getUuid(); |
69 | 87 |
} |
70 |
treeIndex = null;
|
|
88 |
this.treeIndex = treeIndex;
|
|
71 | 89 |
term = termDto; |
72 | 90 |
type = termDto!= null? termDto.getTermType(): null; |
73 | 91 |
children = new ArrayList<>(); |
... | ... | |
75 | 93 |
parent.getChildren().add(position, this); |
76 | 94 |
} |
77 | 95 |
tree = treeDto; |
96 |
this.path = path; |
|
97 |
|
|
78 | 98 |
} |
79 | 99 |
|
80 | 100 |
/*--------Getter and Setter ---------------*/ |
... | ... | |
103 | 123 |
this.tree = tree; |
104 | 124 |
} |
105 | 125 |
|
106 |
public List<TermNodeDto<T>> getChildren() {
|
|
126 |
public List<TermNodeDto> getChildren() { |
|
107 | 127 |
return children; |
108 | 128 |
} |
109 | 129 |
|
110 |
public void setChildren(List<TermNodeDto<T>> children) {
|
|
130 |
public void setChildren(List<TermNodeDto> children) { |
|
111 | 131 |
this.children = children; |
112 | 132 |
} |
113 | 133 |
|
... | ... | |
162 | 182 |
return -1; |
163 | 183 |
} |
164 | 184 |
|
165 |
public boolean removeChild(TermNodeDto nodeDto){ |
|
185 |
/** |
|
186 |
* @return the path |
|
187 |
*/ |
|
188 |
public String getPath() { |
|
189 |
return path; |
|
190 |
} |
|
191 |
|
|
192 |
|
|
193 |
/** |
|
194 |
* @param path the path to set |
|
195 |
*/ |
|
196 |
public void setPath(String path) { |
|
197 |
this.path = path; |
|
198 |
} |
|
199 |
|
|
200 |
|
|
201 |
public boolean removeChild(TermNodeDto nodeDto){ |
|
166 | 202 |
int index = this.getIndex(nodeDto); |
167 | 203 |
if (index > -1){ |
168 | 204 |
this.getChildren().remove(index); |
... | ... | |
179 | 215 |
} |
180 | 216 |
|
181 | 217 |
|
218 |
public static String getTermNodeDtoSelect(){ |
|
219 |
String[] result = createSqlParts(); |
|
220 |
|
|
221 |
return result[0]+result[1]+result[2]; |
|
222 |
} |
|
223 |
|
|
224 |
/** |
|
225 |
* @param fromTable |
|
226 |
* @return |
|
227 |
*/ |
|
228 |
private static String[] createSqlParts() { |
|
229 |
String sqlSelectString = "" |
|
230 |
+ "select a.uuid, " |
|
231 |
+ "r, " |
|
232 |
+ "a.termType, " |
|
233 |
+ "a.uri, " |
|
234 |
+ "root, " |
|
235 |
+ "a.titleCache, " |
|
236 |
+ "a.allowDuplicates, " |
|
237 |
+ "a.orderRelevant, " |
|
238 |
+ "a.isFlat "; |
|
239 |
String sqlFromString = "from TermNode as a "; |
|
240 |
|
|
241 |
String sqlJoinString = "LEFT JOIN a.tree " |
|
242 |
+ "LEFT JOIN a.representations AS r " |
|
243 |
; |
|
244 |
|
|
245 |
String[] result = new String[3]; |
|
246 |
result[0] = sqlSelectString; |
|
247 |
result[1] = sqlFromString; |
|
248 |
result[2] = sqlJoinString; |
|
249 |
return result; |
|
250 |
} |
|
251 |
|
|
252 |
|
|
182 | 253 |
|
183 | 254 |
|
184 | 255 |
} |
Also available in: Unified diff
ref #8774: further implementations for using term dtos in editor