- delete description CDM entity when invoking Delete*DescriptionOperation (fixes...
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / MultiPageTaxonEditorDataChangeBehaviour.java
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 }