/**
* 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.
*/
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.taxon.ITreeNode;
+import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
* @created 01.04.2009
* @version 1.0
*/
-public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements
+public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements
IDataChangeBehavior {
private TaxonNavigator source;
private Set<CdmBase> staleObjects;
-
+
/**
* <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
*
public TaxonNavigatorDataChangeBehavior(TaxonNavigator taxonNavigator) {
source = taxonNavigator;
}
-
+
/* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#isRelevant(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
*/
* @return a boolean.
*/
public boolean isRelevant(CdmDataChangeMap events) {
-
+
// TODO react only on insert/update/delete of taxon and synonym objects
// and on update of name objects
boolean relevant = false;
staleObjects = new HashSet<CdmBase>();
-
+
for(CdmDataChangeEvent event : events.getAllEvents()){
EventType eventType = event.getEventType();
CdmBase eventEntity = event.getEntity();
-
+
// all tree node changes are relevant
- if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
- && event.getEntity() instanceof ITreeNode){
+ if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
+ && event.getEntity() instanceof ITaxonTreeNode){
return true;
}
-
+
// name updates of the accepted taxon of open editors are relevant
if(eventType == EventType.UPDATE){
TaxonNameBase name = null;
}else{
continue;
}
-
+
Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
for(IEditorPart editor : openEditors){
-
+
if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){
return true;
}
}
}
-
-
+
+
// if(eventType == EventType.UPDATE){
// relevant = true;
// CdmBase entity = event.getEntity();
// }
// }
}
-
+
return false;
-
+
// @deprecated
// react on everything except load
// if(events.sizeByEventType(EventType.INSERT) > 0){
* @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#reactOnDataChange(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
*/
/** {@inheritDoc} */
- public void reactOnDataChange(CdmDataChangeMap events) {
+ @Override
+ public void reactOnDataChange(CdmDataChangeMap events) {
if(isRelevant(events)){
final Display display = Display.getCurrent();
Job job = new Job("Updating Taxon Navigator") {
-
+
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Updating Taxon Navigator", 3);
monitor.worked(1);
-
+
// clear the session completely
monitor.subTask("Clearing Taxon Navigators session");
display.asyncExec(new Runnable() {
- public void run() {
+ @Override
+ public void run() {
source.getConversationHolder().clear();
}
- });
- // FIXME completely clearing the session is a brute force approach.
+ });
+ // FIXME completely clearing the session is a brute force approach.
// It would be much more elegant to clear only those elements that have been changed.
// I could not get that to work but we should consider workin on this because we might
// run into serious performance issues, especially when it comes to large trees
// at least, we moved this to a job so it can run in a background thred
// seems to improve the situation but not sure if final solution
monitor.worked(1);
-
+
monitor.subTask("Refreshing viewer");
-
+
display.asyncExec(new Runnable() {
- public void run() {
+ @Override
+ public void run() {
source.refresh();
}
});
-
-
-
+
+
+
monitor.worked(1);
monitor.done();
return Status.OK_STATUS;
}
};
-
+
job.setPriority(Job.SHORT);
job.schedule();
-
+
}
}
}