-// $Id$
/**
* Copyright (C) 2007 EDIT
* European Distributed Institute of Taxonomy
package eu.etaxonomy.taxeditor.ui.dialog.selection;
-import java.lang.reflect.Field;
import java.text.Collator;
import java.util.Comparator;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IMemento;
-import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.ICdmBase;
import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
-import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
+import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
/**
* @version 1.0
*/
public abstract class AbstractFilteredCdmResourceSelectionDialog<T extends ICdmBase> extends
- FilteredItemsSelectionDialog implements IConversationEnabled {
+ CdmFilteredItemsSelectionDialog implements IConversationEnabled {
private final ConversationHolder conversation;
protected List<UuidAndTitleCache<T>> model;
private final Set<T> transientCdmObjects = new HashSet<T>();
private final String settings;
+ protected final int limitOfInitialElements = 100;
protected T cdmBaseToBeFiltered;
+
/**
* <p>Constructor for AbstractFilteredCdmResourceSelectionDialog.</p>
*
this.settings = settings;
this.conversation = conversation;
-
+ this.cdmBaseToBeFiltered = cdmObject;
+ Cursor cursor = shell.getCursor();
+ shell.setCursor(shell.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
init();
-
initModel();
-
+ shell.setCursor(cursor);
String objectTitle = getTitle(cdmObject);
- if (objectTitle != null) {
- setInitialPattern(objectTitle);
- }
+// if (objectTitle != null) {
+// setInitialPattern(objectTitle);
+// }
setListLabelProvider(createListLabelProvider());
setDetailsLabelProvider(createDetailsLabelProvider());
/** {@inheritDoc} */
@Override
public void refresh() {
- initModel();
- filterExcludedObjects();
super.refresh();
}
- /**
- * <p>initModel</p>
- */
- abstract protected void initModel();
+
/* (non-Javadoc)
* @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
// 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
// way to solve the problem.
- try {
- Field lastCompletedFilter = this.getClass().getSuperclass().getSuperclass().getDeclaredField("lastCompletedFilter");
- lastCompletedFilter.setAccessible(true);
- lastCompletedFilter.set(this, null);
- } catch (SecurityException e) {
- AbstractUtility.error(getClass(), e);
- } catch (NoSuchFieldException e) {
- AbstractUtility.error(getClass(), e);
- } catch (IllegalArgumentException e) {
- AbstractUtility.error(getClass(), e);
- } catch (IllegalAccessException e) {
- AbstractUtility.error(getClass(), e);
- }
+// try {
+// Field lastCompletedFilter = this.getClass().getSuperclass().getSuperclass().getDeclaredField("lastCompletedFilter");
+// lastCompletedFilter.setAccessible(true);
+// lastCompletedFilter.set(this, null);
+// } catch (SecurityException e) {
+// MessagingUtils.error(getClass(), e);
+// } catch (NoSuchFieldException e) {
+// MessagingUtils.error(getClass(), e);
+// } catch (IllegalArgumentException e) {
+// MessagingUtils.error(getClass(), e);
+// } catch (IllegalAccessException e) {
+// MessagingUtils.error(getClass(), e);
+// }
// 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
((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)
*/
try {
if(model != null){
progressMonitor.beginTask("Looking for entities", model.size());
- for(UuidAndTitleCache<T> element : model){
- contentProvider.add(element, itemsFilter);
+ filterExcludedObjects();
+ Iterator<UuidAndTitleCache<T>> iterator = model.iterator();
+ UuidAndTitleCache<T> element;
+ while(iterator.hasNext()){
+ element = iterator.next();
+ if (!element.equals(cdmBaseToBeFiltered)){
+ contentProvider.add(element, itemsFilter);
+ }
if (progressMonitor.isCanceled()) {
throw new OperationCanceledException();
}
progressMonitor.worked(1);
}
}else{
- AbstractUtility.warn(getClass(), "Model for Filtered Selection is null:" + this.getClass().getSimpleName());
+ MessagingUtils.warn(getClass(), "Model for Filtered Selection is null:" + this.getClass().getSimpleName());
}
}
finally {
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());
+ if (entity1.getUuid().equals(entity2.getUuid())){
+ return 0;
+ }
+ int result = collator.compare(entity1.getTitleCache(), entity2.getTitleCache());
+ if (result == 0){
+ result = entity1.getUuid().compareTo(entity2.getUuid());
+ }
+ return result;
}
};
}
* @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$
}
/*
* 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$
}
}
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();
+ UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache) element;
+ String titleCache = uuidAndTitleCache.getTitleCache();
+ if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ID_IN_ENTITY_SELECTION_DIAOLOG)){
+ titleCache += " ["+uuidAndTitleCache.getId()+"]";
+ }
+ return titleCache;
}
};
@Override
public void widgetSelected(SelectionEvent e) {
- AbstractNewEntityWizard wizard = getNewEntityWizard(e.text);
-
- wizard.init(null, null);
- WizardDialog dialog = new WizardDialog(getShell(), wizard);
- int status = dialog.open();
-
- if (status == IStatus.OK) {
-
- T entity = (T) wizard.getEntity();
-
-// addObjectToModel(teamOrPerson);
- refresh();
- setPattern(entity);
- getConversationHolder().bind();
- //FIXME : Need to make sure this is a stable fix (ticket 3822)
- getConversationHolder().commit();
- }
+ AbstractNewEntityWizard wizard = getNewEntityWizard(e.text);
+ if(wizard!=null){
+ wizard.init(null, null);
+ if(wizard.getEntity() != null) {
+ WizardDialog dialog = new WizardDialog(getShell(), wizard);
+ int status = dialog.open();
+
+ if (status == IStatus.OK) {
+
+ T entity = (T) wizard.getEntity();
+ // model.add(new UuidAndTitleCache<T>(entity.getUuid(), entity.getId(), getTitle(entity)));
+ refresh();
+ setPattern(entity);
+ if (getConversationHolder() != null){
+ getConversationHolder().bind();
+ }
+ }
+ //FIXME : Need to make sure this is a stable fix (ticket 3822)
+ if (getConversationHolder() != null){
+ getConversationHolder().commit();
+ }
+ }
+ }
}
};
}
* @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