Project

General

Profile

« Previous | Next » 

Revision 97ee0157

Added by Andreas Müller over 8 years ago

Adapt listeners and tests to new pre-insert strategy #5066

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CacheStrategyGenerator.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.cdm.persistence.hibernate;
11

  
12
import java.util.Map;
13

  
14
import org.apache.log4j.Logger;
15
import org.hibernate.HibernateException;
16
import org.hibernate.event.spi.MergeEvent;
17
import org.hibernate.event.spi.MergeEventListener;
18
import org.hibernate.event.spi.SaveOrUpdateEvent;
19
import org.hibernate.event.spi.SaveOrUpdateEventListener;
20

  
21
import eu.etaxonomy.cdm.model.agent.Team;
22
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
23
import eu.etaxonomy.cdm.model.common.CdmBase;
24
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
25
import eu.etaxonomy.cdm.model.molecular.Amplification;
26
import eu.etaxonomy.cdm.model.name.NonViralName;
27
import eu.etaxonomy.cdm.model.reference.Reference;
28

  
29
/**
30
 * @author a.mueller
31
 * @created 04.03.2009
32
 */
33
public class CacheStrategyGenerator implements SaveOrUpdateEventListener, MergeEventListener {
34
    private static final long serialVersionUID = -5511287200489449838L;
35
    @SuppressWarnings("unused")
36
    private static final Logger logger = Logger.getLogger(CacheStrategyGenerator.class);
37

  
38
    @Override
39
    public void onSaveOrUpdate(SaveOrUpdateEvent event) throws HibernateException {
40
        Object entity = event.getObject();
41
        saveOrUpdateOrMerge(entity);
42
    }
43

  
44
    /* (non-Javadoc)
45
     * @see org.hibernate.event.spi.MergeEventListener#onMerge(org.hibernate.event.spi.MergeEvent)
46
     */
47
    @Override
48
    public void onMerge(MergeEvent event) throws HibernateException {
49
        Object entity = event.getOriginal();
50
        saveOrUpdateOrMerge(entity);
51
    }
52

  
53
    /* (non-Javadoc)
54
     * @see org.hibernate.event.spi.MergeEventListener#onMerge(org.hibernate.event.spi.MergeEvent, java.util.Map)
55
     */
56
    @Override
57
    public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException {
58

  
59
    }
60

  
61
    private void saveOrUpdateOrMerge(Object entity) {
62
        if (entity != null){
63
            Class<?> entityClazz = entity.getClass();
64

  
65
            //non-viral-name caches
66
            if(NonViralName.class.isAssignableFrom(entityClazz)) {
67
                NonViralName<?> nonViralName = (NonViralName<?>)entity;
68
                nonViralName.getAuthorshipCache();
69
                nonViralName.getNameCache();
70
                nonViralName.getTitleCache();
71
                nonViralName.getFullTitleCache();
72
                //team-or-person caches
73
            }else if(TeamOrPersonBase.class.isAssignableFrom(entityClazz)){
74
                TeamOrPersonBase<?> teamOrPerson = (TeamOrPersonBase<?>)entity;
75
                String nomTitle = teamOrPerson.getNomenclaturalTitle();
76
                if (teamOrPerson instanceof Team){
77
                    Team team =CdmBase.deproxy(teamOrPerson, Team.class);
78
                    team.setNomenclaturalTitle(nomTitle, team.isProtectedNomenclaturalTitleCache()); //nomTitle is not necessarily cached when it is created
79
                }else{
80
                    teamOrPerson.setNomenclaturalTitle(nomTitle);
81
                }
82
                String titleCache = teamOrPerson.getTitleCache();
83
                if (! teamOrPerson.isProtectedTitleCache()){
84
                    teamOrPerson.setTitleCache(titleCache, false);
85
                }
86

  
87
                //reference caches
88
            }else if(Reference.class.isAssignableFrom(entityClazz)){
89
                Reference<?> ref = (Reference<?>)entity;
90
                ref.getAbbrevTitleCache();
91
                ref.getTitleCache();
92
                //title cache
93
            }else if(IdentifiableEntity.class.isAssignableFrom(entityClazz)) {
94
                IdentifiableEntity<?> identifiableEntity = (IdentifiableEntity)entity;
95
                identifiableEntity.getTitleCache();
96
            }else if(Amplification.class.isAssignableFrom(entityClazz)) {
97
                Amplification amplification = (Amplification)entity;
98
                amplification.updateCache();
99
            }
100

  
101
        }
102
    }
103
}
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.Map;
13

  
14
import org.apache.log4j.Logger;
15
import org.hibernate.HibernateException;
16
import org.hibernate.event.spi.MergeEvent;
17
import org.hibernate.event.spi.MergeEventListener;
18
import org.hibernate.event.spi.SaveOrUpdateEvent;
19
import org.hibernate.event.spi.SaveOrUpdateEventListener;
20

  
21
/**
22
 * @author a.mueller
23
 * @created 04.03.2009
24
 */
25
public class CacheStrategyGenerator implements SaveOrUpdateEventListener, MergeEventListener {
26
    private static final long serialVersionUID = -5511287200489449838L;
27
    @SuppressWarnings("unused")
28
    private static final Logger logger = Logger.getLogger(CacheStrategyGenerator.class);
29

  
30
    @Override
31
    public void onSaveOrUpdate(SaveOrUpdateEvent event) throws HibernateException {
32
        Object entity = event.getObject();
33
        saveOrUpdateOrMerge(entity);
34
    }
35

  
36
    @Override
37
    public void onMerge(MergeEvent event) throws HibernateException {
38
        Object entity = event.getOriginal();
39
        saveOrUpdateOrMerge(entity);
40
    }
41

  
42
    @Override
43
    public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException {
44

  
45
    }
46

  
47
    private void saveOrUpdateOrMerge(Object entity) {
48
        CdmPreDataChangeObservableListener.generateCaches(entity);
49
        //moved to CdmPreDataChangeObservableListener
50
//        if (entity != null){
51
//            Class<?> entityClazz = entity.getClass();
52
//
53
//            //non-viral-name caches
54
//            if(NonViralName.class.isAssignableFrom(entityClazz)) {
55
//                NonViralName<?> nonViralName = (NonViralName<?>)entity;
56
//                nonViralName.getAuthorshipCache();
57
//                nonViralName.getNameCache();
58
//                nonViralName.getTitleCache();
59
//                nonViralName.getFullTitleCache();
60
//                //team-or-person caches
61
//            }else if(TeamOrPersonBase.class.isAssignableFrom(entityClazz)){
62
//                TeamOrPersonBase<?> teamOrPerson = (TeamOrPersonBase<?>)entity;
63
//                String nomTitle = teamOrPerson.getNomenclaturalTitle();
64
//                if (teamOrPerson instanceof Team){
65
//                    Team team =CdmBase.deproxy(teamOrPerson, Team.class);
66
//                    team.setNomenclaturalTitle(nomTitle, team.isProtectedNomenclaturalTitleCache()); //nomTitle is not necessarily cached when it is created
67
//                }else{
68
//                    teamOrPerson.setNomenclaturalTitle(nomTitle);
69
//                }
70
//                String titleCache = teamOrPerson.getTitleCache();
71
//                if (! teamOrPerson.isProtectedTitleCache()){
72
//                    teamOrPerson.setTitleCache(titleCache, false);
73
//                }
74
//
75
//                //reference caches
76
//            }else if(Reference.class.isAssignableFrom(entityClazz)){
77
//                Reference<?> ref = (Reference<?>)entity;
78
//                ref.getAbbrevTitleCache();
79
//                ref.getTitleCache();
80
//                //title cache
81
//            }else if(IdentifiableEntity.class.isAssignableFrom(entityClazz)) {
82
//                IdentifiableEntity<?> identifiableEntity = (IdentifiableEntity)entity;
83
//                identifiableEntity.getTitleCache();
84
//            }else if(Amplification.class.isAssignableFrom(entityClazz)) {
85
//                Amplification amplification = (Amplification)entity;
86
//                amplification.updateCache();
87
//            }
88
//
89
//        }
90
    }
91
}

Also available in: Unified diff