ref #3984: first implementation for remembering the last selected references in selec...
[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.SelectionAdapter;
14 import org.eclipse.swt.events.SelectionEvent;
15 import org.eclipse.swt.events.SelectionListener;
16 import org.eclipse.swt.layout.GridData;
17 import org.eclipse.swt.layout.GridLayout;
18 import org.eclipse.swt.widgets.Combo;
19 import org.eclipse.swt.widgets.Composite;
20 import org.eclipse.swt.widgets.Control;
21 import org.eclipse.swt.widgets.Label;
22 import org.eclipse.swt.widgets.Shell;
23
24 import eu.etaxonomy.cdm.api.service.IClassificationService;
25 import eu.etaxonomy.cdm.model.taxon.Classification;
26 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
28 import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
29 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
30 import eu.etaxonomy.taxeditor.store.CdmStore;
31
32 /**
33 * @author p.ciardelli
34 * @version $Id: $
35 */
36 public class TaxonNodeSelectionDialog extends AbstractFilteredCdmResourceSelectionDialog<TaxonNode> implements SelectionListener{
37
38 public static TaxonNode select(Shell shell, //ConversationHolder conversation,
39 String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID, boolean allowSelectClassification) {
40 TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
41 //conversation,
42 title,
43 excludeTaxa,
44 false,
45 node,
46 classificationUUID, allowSelectClassification);
47 return getSelectionFromDialog(dialog);
48 }
49 public static TaxonNode select(Shell shell, //ConversationHolder conversation,
50 String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID) {
51 TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
52 //conversation,
53 title,
54 excludeTaxa,
55 false,
56 node,
57 classificationUUID);
58 return getSelectionFromDialog(dialog);
59 }
60
61 public static UuidAndTitleCache<TaxonNode> selectUuidAndTitleCache(Shell shell, //ConversationHolder conversation,
62 String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID) {
63 TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
64 //conversation,
65 title,
66 excludeTaxa,
67 false,
68 node,
69 classificationUUID, false);
70 return getUuidAndTitleCacheSelectionFromDialog(dialog);
71 }
72
73 private Combo classificationSelectionCombo;
74
75 private List<Classification> classifications;
76
77 private Classification selectedClassification;
78 private UUID selectedUuid;
79 private final List<UUID> excludeTaxa;
80 private boolean allowClassificationSelection = false;
81
82 protected TaxonNodeSelectionDialog(Shell shell, //ConversationHolder conversation,
83 String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, UUID classificationUUID, boolean allowSelectClassification) {
84 super(shell, //conversation,
85 title, multi, TaxonNodeSelectionDialog.class.getCanonicalName(), node);
86
87 ILabelProvider labelProvider = new FilteredCdmResourceLabelProvider();
88
89 setListLabelProvider(labelProvider);
90 // setDetailsLabelProvider(labelProvider);
91 this.excludeTaxa = excludeTaxa;
92 if(classificationUUID != null){
93 selectedUuid = classificationUUID;
94 }
95
96 fillClassifications();
97 this.allowClassificationSelection = allowSelectClassification;
98
99 createClassificationSelectionCombo(shell);
100 }
101 protected TaxonNodeSelectionDialog(Shell shell, //ConversationHolder conversation,
102 String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, UUID classificationUUID) {
103 this(shell, title, excludeTaxa, multi, node, classificationUUID, false);
104 }
105
106 /** {@inheritDoc} */
107 @Override
108 protected Control createDialogArea(Composite parent) {
109 Composite container = (Composite) super.createDialogArea(parent);
110 return createClassificationSelectionCombo(container);
111 }
112
113 /*
114 * currently disabled tree selection composite
115 */
116 private Control createClassificationSelectionCombo(Composite parent){
117 // classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);
118
119 Composite classificationSelection = new Composite(parent, SWT.NULL);
120 classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
121
122 GridLayout layout = new GridLayout();
123 classificationSelection.setLayout(layout);
124
125 Label label = new Label(classificationSelection, SWT.NULL);
126 // TODO not working is not really true but leave it here to remind everyone that this is under construction
127 label.setText("Select Classification");
128 classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);
129 classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
130
131 for(Classification tree : classifications){
132 classificationSelectionCombo.add(tree.getName().getText(), classifications.indexOf(tree));
133 if (tree.getUuid().equals(selectedUuid)){
134 selectedClassification = tree;
135 }
136
137 }
138
139 classificationSelectionCombo.select(classifications.indexOf(selectedClassification));
140
141 // TODO remember last selection
142 classificationSelectionCombo.addSelectionListener(this);
143
144
145
146 return classificationSelection;
147 }
148
149 /** {@inheritDoc} */
150 @Override
151 protected String getTitle(TaxonNode taxonNode) {
152 if(taxonNode != null && taxonNode.getTaxon() != null){
153 return taxonNode.getTaxon().getTitleCache();
154 }
155
156 return "";
157 }
158
159 @Override
160 protected SelectionListener getNewWizardButtonSelectionListener(){
161 return new SelectionAdapter() {
162
163 @Override
164 public void widgetSelected(SelectionEvent e) {
165 Classification tree = selectedClassification;
166 setPattern(tree.getRootNode());
167
168 }
169 };
170 }
171
172
173 /** {@inheritDoc} */
174 @Override
175 protected TaxonNode getPersistentObject(UUID uuid) {
176 return CdmStore.getService(IClassificationService.class).getTaxonNodeByUuid(uuid);
177 }
178
179 /** {@inheritDoc} */
180 @Override
181 protected void callService(String pattern) {
182 model = CdmStore.getService(IClassificationService.class).getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(selectedClassification.getUuid(), limitOfInitialElements, pattern, allowClassificationSelection);
183 }
184 @Override
185 protected void sort() {
186 if(!PreferencesUtil.isSortTaxaByRankAndName()){
187 Collections.sort(model, getItemsComparator());
188 }
189 // otherwise result is already sorted
190 }
191
192 private void fillClassifications() {
193 if(classifications == null){
194 classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, null);
195 Collections.sort(classifications, new Comparator<Classification>() {
196
197 @Override
198 public int compare(Classification o1, Classification o2) {
199 if (o1.equals(o2)){
200 return 0;
201 }
202 int result = o1.getTitleCache().compareTo(o2.getTitleCache());
203 if (result == 0){
204 return o1.getUuid().compareTo(o2.getUuid());
205 }
206 return result;
207 }
208 });
209 if (selectedClassification == null){
210 if (this.cdmBaseToBeFiltered == null){
211 selectedClassification = classifications.iterator().next();
212 } else {
213 selectedClassification = this.cdmBaseToBeFiltered.getClassification();
214 }
215 }
216 }
217 }
218
219 /** {@inheritDoc} */
220 @Override
221 protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
222 return null;
223 }
224
225 /** {@inheritDoc} */
226 @Override
227 protected String[] getNewWizardText() {
228 return null;
229 }
230
231 /** {@inheritDoc} */
232 @Override
233 public void widgetSelected(SelectionEvent e) {
234 selectedClassification = classifications.get(classificationSelectionCombo.getSelectionIndex());
235
236 // refresh();
237 if (getSearchField().getText() != null){
238 search();
239 }
240 }
241
242 /** {@inheritDoc} */
243 @Override
244 public void widgetDefaultSelected(SelectionEvent e) {}
245
246
247 }