fixes #939
authorn.hoffmann <n.hoffmann@localhost>
Wed, 26 Aug 2009 12:52:12 +0000 (12:52 +0000)
committern.hoffmann <n.hoffmann@localhost>
Wed, 26 Aug 2009 12:52:12 +0000 (12:52 +0000)
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSearchDialog.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDescriptor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDialog.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredReferenceSelectionDialog.java

index 2ae289ec87c0e448f8d9b143522e0984d423c731..cc2e47a2d9048574738fd46632fc6e10dddc15c5 100644 (file)
@@ -45,6 +45,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created 13.11.2008\r
  * @version 1.0\r
  */\r
+@Deprecated\r
 public class ReferenceSearchDialog extends Dialog {\r
        \r
        private Table resultsTable;\r
index 0ca73550d771bb06558130a221c922d7e5e86e49..65944483f426b7e48d4c701054101cab848b956a 100644 (file)
@@ -10,6 +10,8 @@
 \r
 package eu.etaxonomy.taxeditor.editor.reference;\r
 \r
+import java.util.UUID;\r
+\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.events.SelectionAdapter;\r
 import org.eclipse.swt.events.SelectionEvent;\r
@@ -24,7 +26,10 @@ import org.eclipse.swt.widgets.Text;
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.model.reference.Generic;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.dialogs.FilteredReferenceSelectionDialog;\r
 import eu.etaxonomy.taxeditor.model.Resources;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -126,12 +131,9 @@ public class ReferenceSelectComposite extends Composite {
         * \r
         */\r
        protected void popupSearch() {\r
-               Dialog dialog = new ReferenceSearchDialog(getShell(), \r
-                               IReferenceSearch.BIBREF);\r
-        Object value = ((ReferenceSearchDialog) dialog).open();\r
-        \r
-               if (value instanceof ReferenceBase) {\r
-                       setSavedReference((ReferenceBase<?>) value);\r
+        ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference(getShell());\r
+               if (reference != null) {\r
+                       setSavedReference(reference);\r
                }\r
        }\r
 \r
index dbb002de278bbb6cb9a20e220b1ca73e4fbdce1b..239d3b28fe8c524a4f052b346797f662e8ac66e5 100644 (file)
@@ -13,10 +13,10 @@ import org.eclipse.jface.viewers.CellEditor;
 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
@@ -38,29 +38,14 @@ abstract public class ReferenceSearchDescriptor extends PropertyDescriptor {
 \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
index 4b8f97a2604ae8e809e7093daeefbcce59909129..ec81a31378287627afdc2fed8a322e33dee424c9 100644 (file)
@@ -45,6 +45,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created 13.11.2008\r
  * @version 1.0\r
  */\r
+@Deprecated\r
 public class ReferenceSearchDialog extends Dialog {\r
        \r
        private Table resultsTable;\r
index cee084a9c4086f3924d0743193a3912b739bb3ee..c95cf34445f0e7570b79ad0651963d38fac006eb 100644 (file)
 
 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
@@ -26,47 +40,162 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @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;
        }
+       
+
 }