Project

General

Profile

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

    
12
import java.util.Map;
13

    
14
import org.hibernate.Hibernate;
15
import org.hibernate.HibernateException;
16
import org.hibernate.event.spi.MergeEvent;
17
import org.hibernate.event.spi.MergeEventListener;
18

    
19
import eu.etaxonomy.cdm.model.common.CdmBase;
20

    
21
/**
22
 * @author cmathew
23
 * @date 23 Sep 2015
24
 *
25
 */
26
public class PostMergeEntityListener implements MergeEventListener {
27

    
28

    
29

    
30
    /* (non-Javadoc)
31
     * @see org.hibernate.event.spi.MergeEventListener#onMerge(org.hibernate.event.spi.MergeEvent)
32
     */
33
    @Override
34
    public void onMerge(MergeEvent event) throws HibernateException {
35

    
36
    }
37

    
38
    /* (non-Javadoc)
39
     * @see org.hibernate.event.spi.MergeEventListener#onMerge(org.hibernate.event.spi.MergeEvent, java.util.Map)
40
     */
41
    @Override
42
    public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException {
43
        // at this point the original entity to merge has already been copied to the result
44
        // => the result is an exact copy of the original EXCEPT or the the id which is set by hibernate
45
        // the following code sets the id in the original entity so that it can be used as a return value
46
        // for the CdmEntityDaoBase.merge(T transientObject, boolean returnTransientEntity) call
47
        if(event.getOriginal() != null && CdmBase.class.isAssignableFrom(event.getOriginal().getClass()) &&
48
                event.getResult() != null && CdmBase.class.isAssignableFrom(event.getResult().getClass())) {
49
            CdmBase original = (CdmBase) event.getOriginal();
50
            CdmBase result = (CdmBase) event.getResult();
51
            if(original != null && Hibernate.isInitialized(original) && original.getId() == 0 &&
52
                    result != null && Hibernate.isInitialized(result) && result.getId() > 0) {
53
                original.setId(result.getId());
54
                //FIXME: Once the EventType.SAVE_UPDATE listeners are cleaned up
55
                //       the same calls should be made on the result object
56
                //       followed by a copy (uncomment code below) to the
57
                //       original object
58
//                try {
59
//                    BeanUtils.copyProperties(original, result);
60
//                } catch (IllegalAccessException e) {
61
//                    // TODO Auto-generated catch block
62
//                    e.printStackTrace();
63
//                } catch (InvocationTargetException e) {
64
//                    // TODO Auto-generated catch block
65
//                    e.printStackTrace();
66
//                }
67
            }
68
        }
69
    }
70

    
71
}
(13-13/19)