.
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / handler / FilteredTaxonSelectionDialog.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.editor.name.handler;
5
6 import java.text.Collator;
7 import java.util.Comparator;
8 import java.util.Map;
9 import java.util.UUID;
10
11 import org.apache.log4j.Logger;
12 import org.eclipse.core.runtime.CoreException;
13 import org.eclipse.core.runtime.IProgressMonitor;
14 import org.eclipse.core.runtime.IStatus;
15 import org.eclipse.core.runtime.Status;
16 import org.eclipse.jface.dialogs.IDialogSettings;
17 import org.eclipse.jface.viewers.ILabelProvider;
18 import org.eclipse.jface.viewers.LabelProvider;
19 import org.eclipse.jface.window.Window;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.Control;
22 import org.eclipse.swt.widgets.Shell;
23 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
24
25 import eu.etaxonomy.cdm.model.taxon.Taxon;
26 import eu.etaxonomy.taxeditor.store.CdmStore;
27 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
28
29 /**
30 * @author p.ciardelli
31 *
32 */
33 //public class FilteredTaxonSelectionDialog extends FilteredCdmResourceSelectionDialog {
34 /**
35 * @author p.ciardelli
36 *
37 */
38 public class FilteredTaxonSelectionDialog extends FilteredItemsSelectionDialog {
39
40 private static final Logger logger = Logger
41 .getLogger(FilteredTaxonSelectionDialog.class);
42
43 public static final String SETTINGS = FilteredTaxonSelectionDialog.class.getCanonicalName();
44
45 /**
46 * @param taxon
47 * @return
48 */
49 public static Taxon getTaxon(Shell shell, Taxon excludeTaxon) {
50 FilteredTaxonSelectionDialog dialog = new FilteredTaxonSelectionDialog(shell,
51 "Choose a taxon", false);
52 if (dialog.open() == Window.CANCEL) {
53 return null;
54 }
55 return dialog.getTaxon();
56 }
57
58 private Taxon taxon;
59 private Map<UUID, String> allTaxonBases;
60
61 /**
62 * @param shell
63 * @param title
64 */
65 public FilteredTaxonSelectionDialog(Shell shell, String title, boolean multi) {
66 super(shell, multi);
67 setTitle(title);
68 setMessage("Choose");
69
70 ILabelProvider labelProvider = new LabelProvider() {
71 public String getText(Object element) {
72 if (element == null) {
73 return null;
74 }
75 return ((TaxonUuidAndTitleCache) element).getTitleCache();
76 }
77 };
78 setListLabelProvider(labelProvider);
79 setDetailsLabelProvider(labelProvider);
80
81 allTaxonBases = CdmStore.getTaxonService().getUuidAndTitleCacheOfAcceptedTaxa();
82 }
83
84 /* (non-Javadoc)
85 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)
86 */
87 @Override
88 protected void fillContentProvider(AbstractContentProvider contentProvider,
89 ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
90 throws CoreException {
91 progressMonitor.beginTask("Looking for taxa", 1000); // Why no progres monitor?
92 for (UUID uuid : allTaxonBases.keySet()) {
93 TaxonUuidAndTitleCache taxon = new TaxonUuidAndTitleCache(uuid, allTaxonBases.get(uuid));
94 contentProvider.add(taxon, itemsFilter);
95 }
96 }
97
98 /**
99 * @return
100 */
101 private Taxon getTaxon() {
102 Object[] result = getResult();
103 return result[0] == null ? null : (Taxon) result[0];
104 }
105
106 /* (non-Javadoc)
107 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createExtendedContentArea(org.eclipse.swt.widgets.Composite)
108 */
109 @Override
110 protected Control createExtendedContentArea(Composite parent) {
111 // TODO Auto-generated method stub
112 return null;
113 }
114
115 /* (non-Javadoc)
116 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
117 */
118 @Override
119 protected ItemsFilter createFilter() {
120 return new ItemsFilter() {
121
122 @Override
123 public boolean isConsistentItem(Object item) {
124 return false;
125 }
126
127 @Override
128 public boolean matchItem(Object item) {
129 return matches(((TaxonUuidAndTitleCache) item).titleCache);
130 }
131
132 };
133 }
134
135 /* (non-Javadoc)
136 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getDialogSettings()
137 */
138 @Override
139 protected IDialogSettings getDialogSettings() {
140 IDialogSettings settings = TaxeditorStorePlugin.getDefault().getDialogSettings().getSection(getSettings());
141
142 if (settings == null) {
143 settings = TaxeditorStorePlugin.getDefault().getDialogSettings().addNewSection(getSettings());
144 }
145 return settings;
146 }
147
148 /* (non-Javadoc)
149 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getElementName(java.lang.Object)
150 */
151 @Override
152 public String getElementName(Object item) {
153 return ((TaxonUuidAndTitleCache) item).getTitleCache();
154 }
155
156 /* (non-Javadoc)
157 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getItemsComparator()
158 */
159 @Override
160 protected Comparator getItemsComparator() {
161 return new Comparator<TaxonUuidAndTitleCache>() {
162 public int compare(TaxonUuidAndTitleCache entity1,
163 TaxonUuidAndTitleCache entity2) {
164 Collator collator = Collator.getInstance();
165 return collator.compare(entity1.getTitleCache(), entity2.getTitleCache());
166 }
167 };
168 }
169
170 /* (non-Javadoc)
171 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#validateItem(java.lang.Object)
172 */
173 @Override
174 protected IStatus validateItem(Object item) {
175 return Status.OK_STATUS;
176 }
177
178 protected void restoreDialog(IDialogSettings settings) {
179
180 }
181
182 public String getSettings() {
183 if(SETTINGS == null){
184 throw new IllegalStateException("No SETTINGS set.");
185 }
186 return SETTINGS;
187 }
188
189 class TaxonUuidAndTitleCache {
190
191 UUID uuid;
192 String titleCache;
193
194 TaxonUuidAndTitleCache(UUID uuid, String titleCache) {
195 this.uuid = uuid;
196 this.titleCache = titleCache;
197 }
198
199 /**
200 * @return the titleCache
201 */
202 public String getTitleCache() {
203 return titleCache;
204 }
205
206 /**
207 * @return the uuid
208 */
209 public UUID getUuid() {
210 return uuid;
211 }
212 }
213 }