2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
;
12 import java
.util
.Vector
;
14 import org
.apache
.log4j
.Logger
;
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
;
26 * Implementation if {@link eu.etaxonomy.taxeditor.store.model.IDataChangeBehaviour}
27 * for the {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor}.
29 * TODO make this class a bean and thus configurable by Spring
35 public class MultiPageTaxonEditorDataChangeBehaviour
extends AbstractDataChangeBehaviour
implements
37 private static final Logger logger
= Logger
38 .getLogger(MultiPageTaxonEditorDataChangeBehaviour
.class);
40 private MultiPageTaxonEditor source
;
42 private TaxonEditorInput input
;
45 * <p>Constructor for MultiPageTaxonEditorDataChangeBehaviour.</p>
47 * @param multiPageTaxonEditor a {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor} object.
49 public MultiPageTaxonEditorDataChangeBehaviour(
50 MultiPageTaxonEditor multiPageTaxonEditor
) {
51 source
= multiPageTaxonEditor
;
55 * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#reactOnDataChange()
58 public void reactOnDataChange(CdmDataChangeMap changeEvents
) {
59 input
= (TaxonEditorInput
) source
.getEditorInput();
61 // I don't know when this happens but ...
62 if(input
.getTaxon() == null)
65 if(changeEvents
.sizeByEventType(EventType
.UPDATE
) > 0){
66 reactOnUpdate(changeEvents
.getEvents(EventType
.UPDATE
));
68 if(changeEvents
.sizeByEventType(EventType
.INSERT
) > 0){
69 reactOnInsert(changeEvents
.getEvents(EventType
.INSERT
));
71 if(changeEvents
.sizeByEventType(EventType
.DELETE
) > 0){
72 reactOnDelete(changeEvents
.getEvents(EventType
.DELETE
));
78 //we do not really need this anymore as closing the editors is
79 //now run before the delete operation in DeleteHandler
81 public void reactOnDelete(Vector
<CdmDataChangeEvent
> events
){
82 for(CdmDataChangeEvent event
: events
){
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.");
94 public void reactOnUpdate(Vector
<CdmDataChangeEvent
> events
){
96 for(CdmDataChangeEvent event
: events
){
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.");
106 // TODO other stuff to happen
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();
120 if(synonym
.isSynonymOf(input
.getTaxon())){
127 // source.redraw(Page.NAME);