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