1 package eu
.etaxonomy
.cdm
.vaadin
.container
;
3 import java
.util
.Collection
;
4 import java
.util
.HashMap
;
7 import com
.vaadin
.data
.Item
;
8 import com
.vaadin
.data
.util
.HierarchicalContainer
;
10 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
11 import eu
.etaxonomy
.cdm
.persistence
.dto
.UuidAndTitleCache
;
12 import eu
.etaxonomy
.cdm
.vaadin
.util
.CdmSpringContextHelper
;
14 public class TaxonNodeContainer
extends HierarchicalContainer
{
16 private static final long serialVersionUID
= 102401340698963360L;
18 public static final String LABEL
= "titleCache";
20 private Map
<Object
, Object
> itemCache
= new HashMap
<>();
23 * Creates a new taxon node container
24 * @param roots the root elements of the table
26 public TaxonNodeContainer(Collection
<UuidAndTitleCache
<TaxonNode
>> roots
) {
27 addContainerProperty(LABEL
, String
.class, "[no taxon]");
28 for (UuidAndTitleCache
<TaxonNode
> root
: roots
) {
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);
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
);
59 setParent(child
, parent
);
61 Collection
<UuidAndTitleCache
<TaxonNode
>> grandChildren
= CdmSpringContextHelper
.getTaxonNodeService().listChildNodesAsUuidAndTitleCache(child
);
62 setChildrenAllowed(child
, !grandChildren
.isEmpty());
64 itemCache
.put(parent
.getId(), true);