merge-update of trunk and disabling GUI-Control separation
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / AbstractFilteredCdmResourceSelectionDialog.java
index 171df7231870c61ab6e7b7822587245deb579f2c..5e3e5c1ee568b3aeaefd8a49d7297ba95a520e62 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy 
 * http://www.e-taxonomy.eu
-*
+* 
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
@@ -66,14 +66,14 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
        protected List<UuidAndTitleCache<T>> model;
        private final Set<T> transientCdmObjects = new HashSet<T>();
        private final String settings;
-
+       
        protected T cdmBaseToBeFiltered;
-
+       
        /**
         * <p>Constructor for AbstractFilteredCdmResourceSelectionDialog.</p>
         *
         * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
-        * @param conversation
+        * @param conversation 
         * @param title a {@link java.lang.String} object.
         * @param multi a boolean.
         * @param settings a {@link java.lang.String} object.
@@ -85,29 +85,29 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                setTitle(title);
                setMessage("Use * for wildcard, or ? to see all entries");
                this.settings = settings;
-
+               
                this.conversation = conversation;
-
+               
                init();
-
+               
                initModel();
-
+               
                String objectTitle = getTitle(cdmObject);
                if (objectTitle != null) {
                        setInitialPattern(objectTitle);
                }
-
+               
                setListLabelProvider(createListLabelProvider());
                setDetailsLabelProvider(createDetailsLabelProvider());
-
+               
                setSelectionHistory(new ResourceSelectionHistory());
        }
-
+       
        /**
         * By default, we are returning the standard list label provider
-        *
-        * Override in subclasses if you want different behavior
-        *
+        * 
+        * Override in subclasses if you want different behavior 
+        * 
         * @return
         */
        protected ILabelProvider createDetailsLabelProvider() {
@@ -115,7 +115,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
        }
 
        /**
-        *
+        * 
         * @return
         */
        protected ILabelProvider createListLabelProvider() {
@@ -127,9 +127,9 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
         * Will run before initModel()
         */
        protected void init() {
-
+               
        }
-
+       
        /**
         * <p>getSelectionFromDialog</p>
         *
@@ -140,18 +140,18 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
        protected static <TYPE extends CdmBase> TYPE getSelectionFromDialog(AbstractFilteredCdmResourceSelectionDialog<TYPE> dialog) {
                //dialog.setInitialPattern("");
                int result = dialog.open();
-
+               
                if (result == Window.CANCEL) {
                        return null;
                }
-
+               
                UUID uuid = dialog.getSelectedUuidAndTitleCache().getUuid();
                if(uuid == null){
                        return null;
-               }
+               }       
                return dialog.getCdmObjectByUuid(uuid);
        }
-
+       
        /**
         * Check if object was created during the life of this dialog. If not,
         * retrieve it from the CdmStore.
@@ -167,7 +167,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                }
                return getPersistentObject(cdmUuid);
        }
-
+       
        /**
         * <p>getPersistentObject</p>
         *
@@ -204,16 +204,16 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                if(cdmObject == null){
                        return "";
                }
-
+               
                if (cdmObject instanceof IIdentifiableEntity) {
-                       return ((IIdentifiableEntity) cdmObject).getTitleCache();
+                       return ((IIdentifiableEntity) cdmObject).getTitleCache();                       
                }
-
+               
                throw new IllegalArgumentException("Generic method only" +
                                " supports cdmObject of type IIdentifiableEntity." +
                                " Please implement specific method in subclass.");
        }
-
+       
 
        /** {@inheritDoc} */
        @Override
@@ -222,7 +222,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                filterExcludedObjects();
                super.refresh();
        }
-
+       
        /**
         * <p>initModel</p>
         */
@@ -243,7 +243,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                        public boolean equalsFilter(ItemsFilter filter) {
                                return false;
                        }
-
+                       
                        @Override
                        public boolean isConsistentItem(Object item) {
                                return false;
@@ -259,10 +259,10 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                                }
                                return text != null ? matches(text) : false;
                        }
-
+                       
                };
        }
-
+       
 
        /**
         * Set the filter input to the Agent's title cache
@@ -270,11 +270,11 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
         * @param cdmObject a T object.
         */
        protected void setPattern(T cdmObject) {
-               // FilteredSelection does some very tricky caching to make sure it
-               // runs with high performance.
+               // FilteredSelection does some very tricky caching to make sure it 
+               // runs with high performance. 
                // This works for most use cases, but we want to change the model while the dialog is open
                // and all the clever caching prevents the content provider from knowing that the model has changed
-               // I am aware, that this is a hack, but the FilteredSelectionDialog API does not offer a convenient
+               // I am aware, that this is a hack, but the FilteredSelectionDialog API does not offer a convenient 
                // way to solve the problem.
                try {
                        Field lastCompletedFilter = this.getClass().getSuperclass().getSuperclass().getDeclaredField("lastCompletedFilter");
@@ -289,14 +289,14 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                } catch (IllegalAccessException e) {
                        AbstractUtility.error(getClass(), e);
                }
-
-               // this also is not the nicest way to do it.
+               
+               // this also is not the nicest way to do it. 
                // I am still amazed, that FilteredSelectionDialog does not offer any methods to change its data
                // once it was opened. Am I doing it wrong?
                String pattern = getTitle(cdmObject);
                ((Text) getPatternControl()).setText(pattern);
        }
-
+       
        /* (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)
        */
@@ -306,7 +306,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
                throws CoreException {
                try {
-                       if(model != null){
+                       if(model != null){                              
                                progressMonitor.beginTask("Looking for entities", model.size());
                                for(UuidAndTitleCache<T> element : model){
                                        contentProvider.add(element, itemsFilter);
@@ -355,7 +355,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
        protected Comparator getItemsComparator() {
                return new Comparator<UuidAndTitleCache>() {
                        @Override
-            public int compare(UuidAndTitleCache entity1,
+                       public int compare(UuidAndTitleCache entity1,
                                        UuidAndTitleCache entity2) {
                                Collator collator = Collator.getInstance();
                                return collator.compare(entity1.getTitleCache(), entity2.getTitleCache());
@@ -371,7 +371,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
        protected IStatus validateItem(Object item) {
                return Status.OK_STATUS;
        }
-
+       
        /**
         * <p>getSelectedUuidAndTitleCache</p>
         *
@@ -381,7 +381,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                Object[] result = getResult();
                return result[0] == null ? null : (UuidAndTitleCache) result[0];
        }
-
+       
        /**
         * <p>Getter for the field <code>settings</code>.</p>
         *
@@ -393,9 +393,9 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                }
                return settings;
        }
-
+       
        /**
-        *
+        * 
         * @author n.hoffmann
         * @created Oct 19, 2009
         * @version 1.0
@@ -405,7 +405,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
            * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#restoreItemFromMemento(org.eclipse.ui.IMemento)
                */
                @Override
-        protected Object restoreItemFromMemento(IMemento element) {
+               protected Object restoreItemFromMemento(IMemento element) {
                        return element.getString("resource"); //$NON-NLS-1$
                }
                /*
@@ -413,33 +413,33 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                 *      org.eclipse.ui.IMemento)
                 */
                @Override
-        protected void storeItemToMemento(Object item, IMemento element) {
+               protected void storeItemToMemento(Object item, IMemento element) {
                        element.putString("resource", item.toString()); //$NON-NLS-1$
                }
        }
-
+       
        /**
         * <p>getNewWizardLinkText</p>
         *
         * @return a {@link java.lang.String} object.
         */
        protected abstract String getNewWizardLinkText();
-
+       
        /**
         * <p>getNewEntityWizard</p>
-        * @param parameter
+        * @param parameter 
         * @return a {@link eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard} object.
         */
        protected abstract AbstractNewEntityWizard getNewEntityWizard(String parameter);
-
+       
        public class FilteredCdmResourceLabelProvider extends LabelProvider {
                @Override
-        public String getText(Object element) {
+               public String getText(Object element) {
                        if (element == null) {
                                return null;
                        }
                        return ((UuidAndTitleCache) element).getTitleCache();
-               }
+               }                       
        };
 
        /* (non-Javadoc)
@@ -457,10 +457,10 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                }
                return null;
        }
-
+       
        protected SelectionListener getNewWizardLinkSelectionListener(){
                return new SelectionAdapter() {
-
+                       
                        /* (non-Javadoc)
                         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
                         */
@@ -470,53 +470,53 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmB
                                AbstractNewEntityWizard wizard = getNewEntityWizard(e.text);
 
                                wizard.init(null, null);
-                               WizardDialog dialog = new WizardDialog(getShell(), wizard);
-                               int status = dialog.open();
-
-                               if (status == IStatus.OK) {
+                               if(wizard.getEntity() != null) {
+                                       WizardDialog dialog = new WizardDialog(getShell(), wizard);
+                                       int status = dialog.open();
 
-                                       T entity = (T) wizard.getEntity();
+                                       if (status == IStatus.OK) {
 
-//                                     addObjectToModel(teamOrPerson);
-                                       refresh();
-                                       setPattern(entity);
-                                       getConversationHolder().bind();
+                                               T entity = (T) wizard.getEntity();
+                                               refresh();
+                                               setPattern(entity);
+                                               getConversationHolder().bind();
+                                       }
                                        //FIXME : Need to make sure this is a stable fix (ticket 3822)
                                        getConversationHolder().commit();
                                }
                        }
                };
        }
-
+       
        /**
         * <p>getConversationHolder</p>
         *
         * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
         */
        @Override
-    public ConversationHolder getConversationHolder() {
+       public ConversationHolder getConversationHolder() {
                return conversation;
        }
-
+       
        /** {@inheritDoc} */
        @Override
-    public void update(CdmDataChangeMap changeEvents) {}
+       public void update(CdmDataChangeMap changeEvents) {}
 
        /**
-        * Don't want to add for example a taxon or synonym to itself
-        * so filter the list to remove the taxon in question
+        * Don't want to add for example a taxon or synonym to itself 
+        * so filter the list to remove the taxon in question 
         * (<code>cdmBaseToBeFiltered</code>)
         * so it is not available in the filtered list.
         */
        private void filterExcludedObjects() {
                if (model != null && cdmBaseToBeFiltered != null) {
-
+                       
                        UuidAndTitleCache uuidAndTitleCacheToRemove = null;
-
+                                               
                        for (UuidAndTitleCache uuidAndTitleCache : model){
                                if ((cdmBaseToBeFiltered.getUuid()).equals(uuidAndTitleCache.getUuid())) {
                                        uuidAndTitleCacheToRemove = uuidAndTitleCache;
-                               }
+                               }                               
                        }
                        model.remove(uuidAndTitleCacheToRemove);
                }