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