e0e3c3a7f0e63f823fa7e7ad234308d5f8950f53
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / component / CdmBeanItemContainerFactory.java
1 /**
2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.cdm.vaadin.component;
10
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.List;
14 import java.util.UUID;
15
16 import com.vaadin.data.util.BeanItemContainer;
17
18 import eu.etaxonomy.cdm.api.application.CdmRepository;
19 import eu.etaxonomy.cdm.api.service.pager.Pager;
20 import eu.etaxonomy.cdm.model.common.CdmBase;
21 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
22 import eu.etaxonomy.cdm.model.common.IEnumTerm;
23 import eu.etaxonomy.cdm.model.common.TermType;
24 import eu.etaxonomy.cdm.model.common.TermVocabulary;
25 import eu.etaxonomy.cdm.persistence.query.OrderHint;
26
27 /**
28 * @author a.kohlbecker
29 * @since Apr 6, 2017
30 *
31 */
32 public class CdmBeanItemContainerFactory {
33
34 private CdmRepository repo;
35
36 private final static List<String> INIT_STRATEGY = Arrays.asList(new String[]{"$", "representations"});
37
38 private static List<OrderHint> orderHints = new ArrayList<>();
39
40 static {
41 orderHints.add(OrderHint.BY_ORDER_INDEX);
42 orderHints.add(OrderHint.ORDER_BY_TITLE_CACHE);
43 }
44
45 /**
46 * Constructor to be used by presenter classes directly
47 *
48 * @param repo
49 */
50 public CdmBeanItemContainerFactory(CdmRepository repo){
51 this.repo = repo;
52 }
53
54 /**
55 * @param termType
56 */
57 public BeanItemContainer<DefinedTermBase> buildBeanItemContainer(TermType termType) {
58 // TODO use TermCacher?
59 List<DefinedTermBase> terms = repo.getTermService().listByTermType(termType, null, null, orderHints, INIT_STRATEGY);
60 BeanItemContainer<DefinedTermBase> termItemContainer = new BeanItemContainer<>(DefinedTermBase.class);
61 termItemContainer.addAll(terms);
62 return termItemContainer;
63 }
64
65 /**
66 * @param termType
67 */
68 public BeanItemContainer<DefinedTermBase> buildBeanItemContainer(UUID vocabularyUuid) {
69
70 TermVocabulary vocab = repo.getVocabularyService().find(vocabularyUuid);
71 Pager<DefinedTermBase> terms = repo.getVocabularyService().getTerms(vocab, null, null, orderHints, INIT_STRATEGY);
72 BeanItemContainer<DefinedTermBase> termItemContainer = new BeanItemContainer<>(DefinedTermBase.class);
73 termItemContainer.addAll(terms.getRecords());
74 return termItemContainer;
75 }
76
77 /**
78 * @param termType
79 */
80 public BeanItemContainer<DefinedTermBase> buildTermItemContainer(UUID ... termUuid) {
81 return buildTermItemContainer(Arrays.asList(termUuid));
82 }
83
84 /**
85 * @param derivation_EVENT_TYPE_UUIDS
86 * @return
87 */
88 public BeanItemContainer<DefinedTermBase> buildTermItemContainer(List<UUID> termsUuids) {
89 List<DefinedTermBase> terms = repo.getTermService().load(termsUuids, INIT_STRATEGY);
90 BeanItemContainer<DefinedTermBase> termItemContainer = new BeanItemContainer<>(DefinedTermBase.class);
91 termItemContainer.addAll(terms);
92 return termItemContainer;
93 }
94
95 /**
96 * @param termType
97 */
98 public <T extends CdmBase> BeanItemContainer<T> buildBeanItemContainer(Class<T> type, List<OrderHint> orderHints) {
99
100 if(orderHints == null){
101 orderHints = OrderHint.defaultOrderHintsFor(type);
102 }
103
104 List<T> terms = repo.getCommonService().list(type, (Integer)null, (Integer)null,
105 orderHints,
106 Arrays.asList(new String[]{"$"}));
107 BeanItemContainer<T> termItemContainer = new BeanItemContainer<>(type);
108 termItemContainer.addAll(terms);
109 return termItemContainer;
110 }
111
112 public <T extends CdmBase> BeanItemContainer<T> buildBeanItemContainer(Class<T> type) {
113 return buildBeanItemContainer(type, null);
114 }
115
116 /**
117 * @param values
118 * @return
119 */
120 public <T extends IEnumTerm<T>> BeanItemContainer<T> buildBeanItemContainer(Class<T> termType, T ... enumTerms) {
121 BeanItemContainer<T> termItemContainer = new BeanItemContainer<>(termType);
122 List<T> termList = Arrays.asList(enumTerms);
123 termItemContainer.addAll(termList);
124 return termItemContainer;
125 }
126
127
128 }