Project

General

Profile

Download (2.22 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.cdm.persistence.hibernate;
11

    
12
import java.util.Set;
13

    
14
import org.apache.log4j.Logger;
15
import org.hibernate.HibernateException;
16
import org.hibernate.event.DeleteEvent;
17
import org.hibernate.event.DeleteEventListener;
18

    
19
import eu.etaxonomy.cdm.model.common.IRelated;
20
import eu.etaxonomy.cdm.model.common.RelationshipBase;
21

    
22
/**
23
 * @author a.mueller
24
 * @created 04.03.2009
25
 * @version 1.0
26
 */
27
public class CdmDeleteListener implements DeleteEventListener {
28
	private static final long serialVersionUID = -5511287200489449838L;
29
	@SuppressWarnings("unused")
30
	protected static final Logger logger = Logger.getLogger(CdmDeleteListener.class);
31

    
32
	/* (non-Javadoc)
33
	 * @see org.hibernate.event.DeleteEventListener#onDelete(org.hibernate.event.DeleteEvent)
34
	 */
35
	public void onDelete(DeleteEvent event) throws HibernateException {
36
		Object entity = event.getObject();
37
		if(entity != null && RelationshipBase.class.isAssignableFrom(entity.getClass())) {
38
			logger.info("Deleting " + entity);
39
			deleteRelationship(event, entity);
40
		}
41
	}
42

    
43
	/* (non-Javadoc)
44
	 * @see org.hibernate.event.DeleteEventListener#onDelete(org.hibernate.event.DeleteEvent, java.util.Set)
45
	 */
46
	public void onDelete(DeleteEvent event, Set transientEntities)
47
			throws HibernateException {
48
		Object entity = event.getObject();
49
		if(entity != null && RelationshipBase.class.isAssignableFrom(entity.getClass())) {
50
			logger.info("Deleting " + entity);
51
			deleteRelationship(event, entity);
52
		}
53
	}
54

    
55
	/**
56
	 * @param event
57
	 * @param entity
58
	 */
59
	private void deleteRelationship(DeleteEvent event, Object entity) {
60
		RelationshipBase relationshipEntity = (RelationshipBase)entity;
61
		if (relationshipEntity.isRemoved()){
62
			Set<IRelated> deletedObjects = relationshipEntity.getDeletedObjects();
63
			for (IRelated rel : deletedObjects){
64
				if (rel != null){
65
					logger.info("Updating related entity " + rel);
66
					event.getSession().update(rel);
67
				}
68
			}
69
		}
70
	}
71
}
(4-4/10)