Merge branch 'release/4.12.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / TaxonNodeSelectionDialog.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.ui.dialog.selection;
5
6 import java.util.Collections;
7 import java.util.Comparator;
8 import java.util.List;
9 import java.util.UUID;
10
11 import org.eclipse.jface.viewers.ILabelProvider;
12 import org.eclipse.swt.SWT;
13 import org.eclipse.swt.events.SelectionEvent;
14 import org.eclipse.swt.events.SelectionListener;
15 import org.eclipse.swt.layout.GridData;
16 import org.eclipse.swt.layout.GridLayout;
17 import org.eclipse.swt.widgets.Combo;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.swt.widgets.Label;
21 import org.eclipse.swt.widgets.Shell;
22
23 import eu.etaxonomy.cdm.api.service.IClassificationService;
24 import eu.etaxonomy.cdm.model.taxon.Classification;
25 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
26 import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
27 import eu.etaxonomy.taxeditor.store.CdmStore;
28
29 /**
30 * @author p.ciardelli
31 * @version $Id: $
32 */
33 public class TaxonNodeSelectionDialog extends AbstractFilteredCdmResourceSelectionDialog<TaxonNode> implements SelectionListener{
34
35 public static TaxonNode select(Shell shell, //ConversationHolder conversation,
36 String title, List<UUID> excludeTaxa, TaxonNode node, Classification classification) {
37 TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
38 //conversation,
39 title,
40 excludeTaxa,
41 false,
42 node,
43 classification);
44 return getSelectionFromDialog(dialog);
45 }
46
47 private Combo classificationSelectionCombo;
48
49 private List<Classification> classifications;
50
51 private Classification selectedClassification;
52 private final List<UUID> excludeTaxa;
53
54 protected TaxonNodeSelectionDialog(Shell shell, //ConversationHolder conversation,
55 String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, Classification classification) {
56 super(shell, //conversation,
57 title, multi, TaxonNodeSelectionDialog.class.getCanonicalName(), node);
58
59 ILabelProvider labelProvider = new FilteredCdmResourceLabelProvider();
60
61 setListLabelProvider(labelProvider);
62 // setDetailsLabelProvider(labelProvider);
63 this.excludeTaxa = excludeTaxa;
64 if(classification != null){
65 selectedClassification = classification;
66 }
67
68 fillClassifications();
69 createClassificationSelectionCombo(shell);
70 }
71
72 /** {@inheritDoc} */
73 @Override
74 protected Control createDialogArea(Composite parent) {
75 Composite container = (Composite) super.createDialogArea(parent);
76 return createClassificationSelectionCombo(container);
77 }
78
79 /*
80 * currently disabled tree selection composite
81 */
82 private Control createClassificationSelectionCombo(Composite parent){
83 // classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);
84
85 Composite classificationSelection = new Composite(parent, SWT.NULL);
86 classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
87
88 GridLayout layout = new GridLayout();
89 classificationSelection.setLayout(layout);
90
91 Label label = new Label(classificationSelection, SWT.NULL);
92 // TODO not working is not really true but leave it here to remind everyone that this is under construction
93 label.setText("Select Classification");
94 classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);
95 classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
96
97 for(Classification tree : classifications){
98 classificationSelectionCombo.add(tree.getName().getText(), classifications.indexOf(tree));
99
100 }
101
102 classificationSelectionCombo.select(classifications.indexOf(selectedClassification));
103
104 // TODO remember last selection
105 classificationSelectionCombo.addSelectionListener(this);
106
107
108
109 return classificationSelection;
110 }
111
112 /** {@inheritDoc} */
113 @Override
114 protected String getTitle(TaxonNode taxonNode) {
115 if(taxonNode != null && taxonNode.getTaxon() != null){
116 return taxonNode.getTaxon().getTitleCache();
117 }
118
119 return "";
120 }
121
122 /** {@inheritDoc} */
123 @Override
124 protected TaxonNode getPersistentObject(UUID uuid) {
125 return CdmStore.getService(IClassificationService.class).getTaxonNodeByUuid(uuid);
126 }
127
128 /** {@inheritDoc} */
129 @Override
130 protected void callService(String pattern) {
131 model = CdmStore.getService(IClassificationService.class).getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(selectedClassification.getUuid(), limitOfInitialElements, pattern);
132 }
133
134 private void fillClassifications() {
135 if(classifications == null){
136 classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, null);
137 Collections.sort(classifications, new Comparator<Classification>() {
138
139 @Override
140 public int compare(Classification o1, Classification o2) {
141 if (o1.equals(o2)){
142 return 0;
143 }
144 int result = o1.getTitleCache().compareTo(o2.getTitleCache());
145 if (result == 0){
146 return o1.getUuid().compareTo(o2.getUuid());
147 }
148 return result;
149 }
150 });
151 if (selectedClassification == null){
152 if (this.cdmBaseToBeFiltered == null){
153 selectedClassification = classifications.iterator().next();
154 } else {
155 selectedClassification = this.cdmBaseToBeFiltered.getClassification();
156 }
157 }
158 }
159 }
160
161 /** {@inheritDoc} */
162 @Override
163 protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
164 return null;
165 }
166
167 /** {@inheritDoc} */
168 @Override
169 protected String[] getNewWizardText() {
170 return null;
171 }
172
173 /** {@inheritDoc} */
174 @Override
175 public void widgetSelected(SelectionEvent e) {
176 selectedClassification = classifications.get(classificationSelectionCombo.getSelectionIndex());
177
178 // refresh();
179 if (getSearchField().getText() != null){
180 search();
181 }
182 }
183
184 /** {@inheritDoc} */
185 @Override
186 public void widgetDefaultSelected(SelectionEvent e) {}
187
188
189 }