Project

General

Profile

Download (3.81 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
4
* http://www.e-taxonomy.eu
5
* 
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.editor;
11

    
12
import java.util.Vector;
13

    
14
import org.apache.log4j.Logger;
15

    
16
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
17
import eu.etaxonomy.cdm.model.taxon.Synonym;
18
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
19
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
20
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
21
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
22
import eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour;
23
import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
24

    
25
/**
26
 * Implementation if {@link eu.etaxonomy.taxeditor.store.model.IDataChangeBehaviour}
27
 * for the {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor}.
28
 *
29
 * TODO make this class a bean and thus configurable by Spring
30
 *
31
 * @author n.hoffmann
32
 * @created 01.04.2009
33
 * @version 1.0
34
 */
35
public class MultiPageTaxonEditorDataChangeBehaviour extends AbstractDataChangeBehaviour implements
36
		IDataChangeBehavior {
37
	private static final Logger logger = Logger
38
			.getLogger(MultiPageTaxonEditorDataChangeBehaviour.class);
39

    
40
	private MultiPageTaxonEditor source;
41

    
42
	private TaxonEditorInput input;
43
	
44
	/**
45
	 * <p>Constructor for MultiPageTaxonEditorDataChangeBehaviour.</p>
46
	 *
47
	 * @param multiPageTaxonEditor a {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor} object.
48
	 */
49
	public MultiPageTaxonEditorDataChangeBehaviour(
50
			MultiPageTaxonEditor multiPageTaxonEditor) {
51
		source = multiPageTaxonEditor;
52
	}
53

    
54
	/* (non-Javadoc)
55
	 * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#reactOnDataChange()
56
	 */
57
	/** {@inheritDoc} */
58
	public void reactOnDataChange(CdmDataChangeMap changeEvents) {
59
		input = (TaxonEditorInput) source.getEditorInput();
60
		
61
		// I don't know when this happens but ...
62
		if(input.getTaxon() == null)
63
			return;
64
		
65
		if(changeEvents.sizeByEventType(EventType.UPDATE) > 0){
66
			reactOnUpdate(changeEvents.getEvents(EventType.UPDATE));
67
		}
68
		if(changeEvents.sizeByEventType(EventType.INSERT) > 0){
69
			reactOnInsert(changeEvents.getEvents(EventType.INSERT));
70
		}
71
		if(changeEvents.sizeByEventType(EventType.DELETE) > 0){
72
			reactOnDelete(changeEvents.getEvents(EventType.DELETE));
73
		}
74
	}
75
	
76
	
77
	/** {@inheritDoc} */
78
	//we do not really need this anymore as closing the editors is 
79
	//now run before the delete operation in DeleteHandler
80
	@Override
81
	public void reactOnDelete(Vector<CdmDataChangeEvent> events){
82
		for(CdmDataChangeEvent event : events){
83
			// close open editors
84
			if((event.getEntity() instanceof TaxonNode) 
85
					&& input.getTaxonNode().equals(event.getEntity())){
86
				//EditorUtil.close(source);
87
				logger.debug("Closing open editor for deleted taxon.");
88
			}
89
		}
90
	}
91
	
92
	/** {@inheritDoc} */
93
	@Override
94
	public void reactOnUpdate(Vector<CdmDataChangeEvent> events){
95

    
96
		for(CdmDataChangeEvent event : events){
97
			
98
			// update editor title
99
			if(event.getEntity() instanceof TaxonNameBase){
100
				if(input.getTaxon().getName().equals(event.getEntity())){
101
					// set the name of the editor window
102
					source.setPartName();
103
					logger.debug("Updating title of taxons editor.");
104
				}
105
			}
106
			// TODO other stuff to happen
107
			
108
		}
109
	}
110
	
111
	/** {@inheritDoc} */
112
	@Override
113
	public void reactOnInsert(Vector<CdmDataChangeEvent> events){
114
		boolean doRedraw = false;
115
		for(CdmDataChangeEvent event : events){
116
			// refresh on synonym changes
117
			if(input.getTaxon().hasSynonyms() && event.getEntity() instanceof Synonym){
118
				Synonym synonym = (Synonym) event.getEntity();
119
				
120
				if(synonym.isSynonymOf(input.getTaxon())){
121
					doRedraw = true;
122
					break;
123
				}
124
			}
125
		}
126
//		if(doRedraw)
127
//			source.redraw(Page.NAME);
128
	}
129
}
(9-9/17)