import org.eclipse.jface.viewers.DialogCellEditor;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Dialog;\r
import org.eclipse.ui.views.properties.PropertyDescriptor;\r
\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.dialogs.FilteredReferenceSelectionDialog;\r
\r
/** \r
* @author p.ciardelli\r
\r
protected Object openDialogBox(\r
Control cellEditorWindow) { \r
- \r
- Dialog dialog = new ReferenceSearchDialog(cellEditorWindow.getShell(), \r
- searchType);\r
- Object value = ((ReferenceSearchDialog) dialog).open();\r
- if (value instanceof ReferenceBase) {\r
- \r
- ReferenceBase<?> reference = (ReferenceBase<?>) value;\r
+\r
+ ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference(cellEditorWindow.getShell());\r
+ if (reference != null) {\r
saveReference(reference);\r
return new ReferencePropertySource(reference);\r
}\r
return null;\r
\r
- // FIXME FilteredReferenceSelectionDialog implementation has session problems\r
-// FilteredReferenceSelectionDialog dialog = new FilteredReferenceSelectionDialog(cellEditorWindow.getShell());\r
-// \r
-// \r
-// if (dialog.open() == Status.OK) { \r
-// ReferenceBase<?> reference = (ReferenceBase<?>) dialog.getFirstResult();\r
-// saveReference(reference);\r
-// return new ReferencePropertySource(reference);\r
-// }\r
-// return null;\r
- \r
}\r
};\r
if (getValidator() != null) {\r
package eu.etaxonomy.taxeditor.dialogs;
-import java.util.List;
+import java.text.Collator;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.UUID;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+import eu.etaxonomy.taxeditor.model.UuidAndTitleCache;
import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
/**
* @author n.hoffmann
* @version 1.0
*/
public class FilteredReferenceSelectionDialog extends
- FilteredCdmResourceSelectionDialog {
+ FilteredItemsSelectionDialog {
private static final Logger logger = Logger
- .getLogger(FilteredReferenceSelectionDialog.class);
+ .getLogger(FilteredTaxonNodeSelectionDialog.class);
+ public static final String SETTINGS = FilteredTaxonNodeSelectionDialog.class.getCanonicalName();
- public static final String SETTINGS = FilteredReferenceSelectionDialog.class.getCanonicalName();
+ /**
+ * @param taxon
+ * @return
+ */
+ public static ReferenceBase selectReference(Shell shell) {
+ FilteredReferenceSelectionDialog dialog = new FilteredReferenceSelectionDialog(shell,
+ "Choose a reference", false);
+ if (dialog.open() == Window.CANCEL) {
+ return null;
+ }
+
+ UUID referenceUuid = dialog.getReferenceUuidAndTitleCache().getUuid();
+
+ if(referenceUuid == null){
+ return null;
+ }
+
+ return CdmStore.getReferenceService().getReferenceByUuid(referenceUuid);
+ }
+
+ private Map<UUID, String> allReferenceBases;
/**
- * @param shell
- * @param title
- */
- public FilteredReferenceSelectionDialog(Shell shell) {
- super(shell, "Select Reference");
+ * @param shell
+ * @param title
+ */
+ public FilteredReferenceSelectionDialog(Shell shell, String title, boolean multi) {
+ super(shell, multi);
+ setTitle(title);
+ setMessage("Choose");
+
+ ILabelProvider labelProvider = new LabelProvider() {
+ public String getText(Object element) {
+ if (element == null) {
+ return null;
+ }
+ return ((UuidAndTitleCache) element).getTitleCache();
+ }
+ };
+ setListLabelProvider(labelProvider);
+ setDetailsLabelProvider(labelProvider);
+
+ allReferenceBases = CdmStore.getReferenceService().getUuidAndTitleCacheOfReferences();
}
-
-
+
/* (non-Javadoc)
- * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)
- */
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)
+ */
@Override
protected void fillContentProvider(AbstractContentProvider contentProvider,
- ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
- throws CoreException {
-
- List<ReferenceBase> references = CdmStore.getReferencesByTitle("*");
- progressMonitor.beginTask("Looking for references", references.size());
- for (ReferenceBase reference : references){
+ ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
+ throws CoreException {
+ progressMonitor.beginTask("Looking for references", 1000); // Why no progress monitor?
+ for (UUID uuid : allReferenceBases.keySet()) {
+ UuidAndTitleCache reference = new UuidAndTitleCache(uuid, allReferenceBases.get(uuid));
contentProvider.add(reference, itemsFilter);
- progressMonitor.worked(1);
- }
+ }
+ }
+
+ /**
+ * @return
+ */
+ private UuidAndTitleCache getReferenceUuidAndTitleCache() {
+ Object[] result = getResult();
+ return result[0] == null ? null : (UuidAndTitleCache) result[0];
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createExtendedContentArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createExtendedContentArea(Composite parent) {
+ return null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
+ */
+ @Override
+ protected ItemsFilter createFilter() {
+ return new ItemsFilter() {
+
+ @Override
+ public boolean isConsistentItem(Object item) {
+ return false;
+ }
+
+ @Override
+ public boolean matchItem(Object item) {
+ return matches(((UuidAndTitleCache) item).getTitleCache());
+ }
+
+ };
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getDialogSettings()
+ */
+ @Override
+ protected IDialogSettings getDialogSettings() {
+ IDialogSettings settings = TaxeditorStorePlugin.getDefault().getDialogSettings().getSection(getSettings());
+
+ if (settings == null) {
+ settings = TaxeditorStorePlugin.getDefault().getDialogSettings().addNewSection(getSettings());
+ }
+ return settings;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getElementName(java.lang.Object)
+ */
+ @Override
+ public String getElementName(Object item) {
+ return ((UuidAndTitleCache) item).getTitleCache();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getItemsComparator()
+ */
+ @Override
+ protected Comparator getItemsComparator() {
+ return new Comparator<UuidAndTitleCache>() {
+ public int compare(UuidAndTitleCache entity1,
+ UuidAndTitleCache entity2) {
+ Collator collator = Collator.getInstance();
+ return collator.compare(entity1.getTitleCache(), entity2.getTitleCache());
+ }
+ };
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#validateItem(java.lang.Object)
+ */
+ @Override
+ protected IStatus validateItem(Object item) {
+ return Status.OK_STATUS;
+ }
+
+ protected void restoreDialog(IDialogSettings settings) {
+
}
- /*
- * (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.dialogs.FilteredCdmResourceSelectionDialog#getSettings()
- */
public String getSettings() {
if(SETTINGS == null){
throw new IllegalStateException("No SETTINGS set.");
}
return SETTINGS;
}
+
+
}