jenkins merging release branch into master (strategy: theirs)
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / container / TaxonNodeContainer.java
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 }