merge
[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.conversation.ConversationHolder;
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.taxeditor.newWizard.AbstractNewEntityWizard;
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, 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
53 protected TaxonNodeSelectionDialog(Shell shell, ConversationHolder conversation, String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, Classification classification) {
54 super(shell, conversation, title, multi, TaxonNodeSelectionDialog.class.getCanonicalName(), node);
55
56 ILabelProvider labelProvider = new FilteredCdmResourceLabelProvider();
57
58 setListLabelProvider(labelProvider);
59 setDetailsLabelProvider(labelProvider);
60
61 if(classification != null){
62 selectedClassification = classification;
63 }
64 }
65
66 /** {@inheritDoc} */
67 @Override
68 protected Control createExtendedContentArea(Composite parent) {
69 return createClassificationSelectionCombo(parent);
70 }
71
72 /*
73 * currently disabled tree selection composite
74 */
75 private Control createClassificationSelectionCombo(Composite parent){
76 // classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);
77
78 Composite classificationSelection = new Composite(parent, SWT.NULL);
79 classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
80
81 GridLayout layout = new GridLayout();
82 classificationSelection.setLayout(layout);
83
84 Label label = new Label(classificationSelection, SWT.NULL);
85 // TODO not working is not really true but leave it here to remind everyone that this is under construction
86 label.setText("Select Classification");
87 classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);
88 classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
89
90 for(Classification tree : classifications){
91 classificationSelectionCombo.add(tree.getName().getText(), classifications.indexOf(tree));
92
93 }
94
95 classificationSelectionCombo.select(classifications.indexOf(selectedClassification));
96
97 // TODO remember last selection
98 classificationSelectionCombo.addSelectionListener(this);
99
100
101
102 return classificationSelection;
103 }
104
105 /** {@inheritDoc} */
106 @Override
107 protected String getTitle(TaxonNode taxonNode) {
108 if(taxonNode != null && taxonNode.getTaxon() != null){
109 return taxonNode.getTaxon().getTitleCache();
110 }
111
112 return "";
113 }
114
115 /** {@inheritDoc} */
116 @Override
117 protected TaxonNode getPersistentObject(UUID uuid) {
118 return CdmStore.getService(IClassificationService.class).getTaxonNodeByUuid(uuid);
119 }
120
121 /** {@inheritDoc} */
122 @Override
123 protected void initModel() {
124 // default to first tree
125 // TODO this will be problematic and can only be seen as workaround
126
127
128 if(classifications == null){
129 classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, null);
130 Collections.sort(classifications, new Comparator<Classification>() {
131
132 @Override
133 public int compare(Classification o1, Classification o2) {
134 return o1.getTitleCache().compareTo(o2.getTitleCache());
135 }
136 });
137 selectedClassification = classifications.iterator().next();
138 }
139
140 model = CdmStore.getService(IClassificationService.class).getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(selectedClassification);
141 }
142
143 /** {@inheritDoc} */
144 @Override
145 protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
146 return null;
147 }
148
149 /** {@inheritDoc} */
150 @Override
151 protected String getNewWizardLinkText() {
152 return null;
153 }
154
155 /** {@inheritDoc} */
156 @Override
157 public void widgetSelected(SelectionEvent e) {
158 selectedClassification = classifications.get(classificationSelectionCombo.getSelectionIndex());
159
160 // refresh();
161 setPattern(null);
162 }
163
164 /** {@inheritDoc} */
165 @Override
166 public void widgetDefaultSelected(SelectionEvent e) {}
167
168
169 }