Project

General

Profile

« Previous | Next » 

Revision f6a8dc56

Added by Patrick Plitzner over 10 years ago

merged model adaptions to cdmlib 3.2.4 from campanula branch

View differences:

eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java
1 1
/**
2 2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
3
* European Distributed Institute of Taxonomy
4 4
* http://www.e-taxonomy.eu
5
* 
5
*
6 6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7 7
* See LICENSE.TXT at the top of this package for the full license terms.
8 8
*/
......
21 21

  
22 22
import eu.etaxonomy.cdm.model.common.CdmBase;
23 23
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
24
import eu.etaxonomy.cdm.model.taxon.ITreeNode;
24
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
25 25
import eu.etaxonomy.cdm.model.taxon.Taxon;
26 26
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
27 27
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
......
38 38
 * @created 01.04.2009
39 39
 * @version 1.0
40 40
 */
41
public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements 
41
public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements
42 42
		IDataChangeBehavior {
43 43

  
44 44
	private TaxonNavigator source;
45 45

  
46 46
	private Set<CdmBase> staleObjects;
47
	
47

  
48 48
	/**
49 49
	 * <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
50 50
	 *
......
53 53
	public TaxonNavigatorDataChangeBehavior(TaxonNavigator taxonNavigator) {
54 54
		source = taxonNavigator;
55 55
	}
56
	
56

  
57 57
	/* (non-Javadoc)
58 58
	 * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#isRelevant(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
59 59
	 */
......
64 64
	 * @return a boolean.
65 65
	 */
66 66
	public boolean isRelevant(CdmDataChangeMap events) {
67
		
67

  
68 68
		// TODO react only on insert/update/delete of taxon and synonym objects
69 69
		// and on update of name objects
70 70
		boolean relevant = false;
71 71
		staleObjects = new HashSet<CdmBase>();
72
		
72

  
73 73
		for(CdmDataChangeEvent event : events.getAllEvents()){
74 74
			EventType eventType = event.getEventType();
75 75
			CdmBase eventEntity = event.getEntity();
76
			
76

  
77 77
			// all tree node changes are relevant
78
			if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE) 
79
					&& event.getEntity() instanceof ITreeNode){
78
			if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
79
					&& event.getEntity() instanceof ITaxonTreeNode){
80 80
				return true;
81 81
			}
82
			
82

  
83 83
			// name updates of the accepted taxon of open editors are relevant
84 84
			if(eventType == EventType.UPDATE){
85 85
				TaxonNameBase name = null;
......
90 90
				}else{
91 91
					continue;
92 92
				}
93
				
93

  
94 94
				Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
95 95
				for(IEditorPart editor : openEditors){
96
					
96

  
97 97
					if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){
98 98
						return true;
99 99
					}
100 100
				}
101 101
			}
102
			
103
			
102

  
103

  
104 104
//			if(eventType == EventType.UPDATE){
105 105
//				relevant = true;
106 106
//				CdmBase entity = event.getEntity();
......
111 111
//				}
112 112
//			}
113 113
		}
114
		
114

  
115 115
		return false;
116
		
116

  
117 117
		// @deprecated
118 118
		// react on everything except load
119 119
//		if(events.sizeByEventType(EventType.INSERT) > 0){
......
131 131
	 * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#reactOnDataChange(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
132 132
	 */
133 133
	/** {@inheritDoc} */
134
	public void reactOnDataChange(CdmDataChangeMap events) {
134
	@Override
135
    public void reactOnDataChange(CdmDataChangeMap events) {
135 136
		if(isRelevant(events)){
136 137

  
137 138
			final Display display = Display.getCurrent();
138 139
			Job job = new Job("Updating Taxon Navigator") {
139
				
140

  
140 141
				@Override
141 142
				protected IStatus run(IProgressMonitor monitor) {
142 143
					monitor.beginTask("Updating Taxon Navigator", 3);
143 144
					monitor.worked(1);
144
					
145

  
145 146
					// clear the session completely
146 147
					monitor.subTask("Clearing Taxon Navigators session");
147 148
					display.asyncExec(new Runnable() {
148
						 public void run() {
149
						 @Override
150
                        public void run() {
149 151
							 source.getConversationHolder().clear();
150 152
						 }
151
					});					
152
					// FIXME completely clearing the session is a brute force approach. 
153
					});
154
					// FIXME completely clearing the session is a brute force approach.
153 155
					// It would be much more elegant to clear only those elements that have been changed.
154 156
					// I could not get that to work but we should consider workin on this because we might
155 157
					// run into serious performance issues, especially when it comes to large trees
......
157 159
					// at least, we moved this to a job so it can run in a background thred
158 160
					// seems to improve the situation but not sure if final solution
159 161
					monitor.worked(1);
160
					
162

  
161 163
					monitor.subTask("Refreshing viewer");
162
					
164

  
163 165
					display.asyncExec(new Runnable() {
164
					    public void run() {
166
					    @Override
167
                        public void run() {
165 168
					    	source.refresh();
166 169
					    }
167 170
					});
168
					
169
					
170
					
171

  
172

  
173

  
171 174
					monitor.worked(1);
172 175
					monitor.done();
173 176
					return Status.OK_STATUS;
174 177
				}
175 178
			};
176
			
179

  
177 180
			job.setPriority(Job.SHORT);
178 181
			job.schedule();
179
			
182

  
180 183
		}
181 184
	}
182 185
}

Also available in: Unified diff