1
|
package eu.etaxonomy.cdm.vaadin.container;
|
2
|
|
3
|
import java.util.Collection;
|
4
|
import java.util.HashMap;
|
5
|
import java.util.Map;
|
6
|
|
7
|
import com.vaadin.data.Item;
|
8
|
import com.vaadin.data.util.HierarchicalContainer;
|
9
|
|
10
|
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
|
11
|
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
|
12
|
|
13
|
public class TaxonNodeContainer extends HierarchicalContainer {
|
14
|
|
15
|
private static final long serialVersionUID = 102401340698963360L;
|
16
|
|
17
|
public static final String LABEL = "titleCache";
|
18
|
|
19
|
private Map<Integer, Boolean> itemCache = new HashMap<>();
|
20
|
|
21
|
/**
|
22
|
* Creates a new taxon node container
|
23
|
* @param roots the root elements of the table
|
24
|
*/
|
25
|
public TaxonNodeContainer(Collection<TaxonNodeDto> roots) {
|
26
|
addContainerProperty(LABEL, String.class, "[no taxon]");
|
27
|
for (TaxonNodeDto root: roots) {
|
28
|
addItem(root);
|
29
|
addChildItems(root);
|
30
|
}
|
31
|
}
|
32
|
|
33
|
/**
|
34
|
* {@inheritDoc}
|
35
|
*/
|
36
|
@Override
|
37
|
public Item addItem(Object itemId) {
|
38
|
if(itemId instanceof TaxonNodeDto){
|
39
|
TaxonNodeDto dto = (TaxonNodeDto) itemId;
|
40
|
Item item = super.addItem(itemId);
|
41
|
item.getItemProperty(TaxonNodeContainer.LABEL).setValue(dto.getTitleCache());
|
42
|
itemCache.put(((TaxonNodeDto) itemId).getId(), false);
|
43
|
return item;
|
44
|
}
|
45
|
return null;
|
46
|
}
|
47
|
|
48
|
/**
|
49
|
* @param parent
|
50
|
*/
|
51
|
public void addChildItems(TaxonNodeDto parent) {
|
52
|
if(itemCache.get(parent.getId()).equals(Boolean.FALSE)){
|
53
|
Collection<TaxonNodeDto> children = CdmSpringContextHelper.getTaxonNodeService().listChildNodesAsTaxonNodeDto(parent);
|
54
|
setChildrenAllowed(parent, !children.isEmpty());
|
55
|
for (TaxonNodeDto child : children) {
|
56
|
Item childItem = addItem(child);
|
57
|
if(childItem!=null){
|
58
|
setParent(child, parent);
|
59
|
addChildItems(child);
|
60
|
}
|
61
|
/*
|
62
|
Collection<UuidAndTitleCache<TaxonNode>> grandChildren = CdmSpringContextHelper.getTaxonNodeService().listChildNodesAsUuidAndTitleCache(child);
|
63
|
setChildrenAllowed(child, !grandChildren.isEmpty());*/
|
64
|
}
|
65
|
itemCache.put(parent.getId(), true);
|
66
|
}
|
67
|
}
|
68
|
|
69
|
}
|