Project

General

Profile

« Previous | Next » 

Revision 933e5ac3

Added by Cherian Mathew about 9 years ago

ICdmCacher, ICdmUuidCacher, CdmCacher, CdmTermCacher : refactored and added load method
Language, NameRelationshipType, Rank : now uses cacher only if termap is null or empty and only when class matches the specific term type
MockCdmCacher: not required anymore
DefaultTermInitializer : removed acall to mock cacher
MatchStrategyConfigurator : moved from editor to cdmlib
CdmDataChangeEvent : added constructor
CommonServiceImpl, ICommonService : added call to findMatchingStrategy with enum instead of object
DescriptionServiceImpl, IDescriptionService, PolytomousKeyNodeServiceImpl, IPolytomousKeyNodeService, TaxonNodeServiceImpl, ITaxonNodeService, TaxonServiceImpl: added uuid methods

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeEvent.java
1 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
*/
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 9

  
10 10
package eu.etaxonomy.cdm.persistence.hibernate;
11 11

  
12 12
import java.io.Serializable;
13
import java.util.Set;
13 14

  
14 15
import org.apache.log4j.Logger;
15 16
import org.hibernate.event.spi.AbstractEvent;
......
33 34
 * @version 1.0
34 35
 */
35 36
public class CdmDataChangeEvent extends AbstractEvent{
36
	private static final long serialVersionUID = 9113025682352080372L;
37
	private static final Logger logger = Logger.getLogger(CdmDataChangeEvent.class);
38

  
39
	/**
40
	 * The event types currently implemented
41
	 *
42
	 * @author n.hoffmann
43
	 * @created 25.03.2009
44
	 * @version 1.0
45
	 */
46
	public enum EventType {
47
		INSERT, LOAD, UPDATE, DELETE
48
	}
49

  
50
	private final CdmBase entity;
51
	private final EntityPersister persister;
52
	private final Object[] state;
53
	// for update only
54
	private Object[] oldState;
55
	private final Serializable id;
56
	protected final EventType eventType;
57

  
58
	/**
59
	 * @param source
60
	 */
61
	private CdmDataChangeEvent(
62
			CdmBase entity,
63
			Serializable id,
64
			Object[] state,
65
			Object[] oldState,
66
			EntityPersister persister,
67
			EventSource source,
68
			EventType eventType
69
	) {
70
		super(source);
71
		this.entity = entity;
72
		this.id = id;
73
		this.state = state;
74
		this.oldState = oldState;
75
		this.persister = persister;
76
		this.eventType = eventType;
77
	}
78

  
79
	public CdmBase getEntity() {
80
		return entity;
81
	}
82
	public Serializable getId() {
83
		return id;
84
	}
85
	public EntityPersister getPersister() {
86
		return persister;
87
	}
88
	public Object[] getState() {
89
		return state;
90
	}
91
	public Object[] getOldState() {
92
		if(oldState == null){
93
			oldState = state;
94
		}
95
		return oldState;
96
	}
97

  
98
	public EventType getEventType(){
99
		return eventType;
100
	}
101

  
102
	public boolean isInsert(){
103
		return eventType == EventType.INSERT;
104
	}
105

  
106
	public boolean isLoad(){
107
		return eventType == EventType.LOAD;
108
	}
109

  
110
	public boolean isUpdate(){
111
		return eventType == EventType.UPDATE;
112
	}
113

  
114
	public boolean isDelete(){
115
		return eventType == EventType.DELETE;
116
	}
117

  
118
	/**
119
	 * @param event
120
	 * @return
121
	 */
122
	public static CdmDataChangeEvent NewInstance(AbstractEvent event) {
123

  
124
		CdmDataChangeEvent mediationEvent = null;
125
		try{
126
			if(event instanceof PostInsertEvent){
127
				PostInsertEvent postEvent = (PostInsertEvent) event;
128
				mediationEvent = new CdmDataChangeEvent(
129
																(CdmBase)postEvent.getEntity(),
130
																postEvent.getId(),
131
																postEvent.getState(),
132
																null,
133
																postEvent.getPersister(),
134
																postEvent.getSession(),
135
																EventType.INSERT
136
																);
137
			}
138
			if(event instanceof PostLoadEvent){
139
				PostLoadEvent updateEvent = (PostLoadEvent) event;
140
				mediationEvent = new CdmDataChangeEvent(
141
																(CdmBase)updateEvent.getEntity(),
142
																updateEvent.getId(),
143
																null,
144
																null,
145
																updateEvent.getPersister(),
146
																updateEvent.getSession(),
147
																EventType.LOAD
148
																);
149
			}
150
			if(event instanceof PostUpdateEvent){
151
				PostUpdateEvent updateEvent = (PostUpdateEvent) event;
152
				mediationEvent = new CdmDataChangeEvent(
153
																(CdmBase)updateEvent.getEntity(),
154
																updateEvent.getId(),
155
																updateEvent.getState(),
156
																updateEvent.getOldState(),
157
																updateEvent.getPersister(),
158
																updateEvent.getSession(),
159
																EventType.UPDATE
160
																);
161
			}
162
			if(event instanceof PostDeleteEvent){
163
				PostDeleteEvent deleteEvent = (PostDeleteEvent) event;
164
				mediationEvent = new CdmDataChangeEvent(
165
																(CdmBase)deleteEvent.getEntity(),
166
																deleteEvent.getId(),
167
																deleteEvent.getDeletedState(),
168
																null,
169
																deleteEvent.getPersister(),
170
																deleteEvent.getSession(),
171
																EventType.DELETE
172
																);
173
			}
174
		}catch(ClassCastException e){
175
			// we are only interested in CdmBase entities, we have the try/catch block in case another entity slips through
176
			logger.warn("tried to instantiate event for non CdmBase entity");
177
		}
178

  
179
		return mediationEvent;
180
	}
181

  
182
	public static CdmDataChangeEvent NewInstance(CdmBase entity, EventType eventType) {
183
	    return new CdmDataChangeEvent(entity,
184
                null,
185
                null,
186
                null,
187
                null,
188
                null,
189
                eventType);
190
	}
37
    private static final long serialVersionUID = 9113025682352080372L;
38
    private static final Logger logger = Logger.getLogger(CdmDataChangeEvent.class);
39

  
40
    /**
41
     * The event types currently implemented
42
     *
43
     * @author n.hoffmann
44
     * @created 25.03.2009
45
     * @version 1.0
46
     */
47
    public enum EventType {
48
        INSERT, LOAD, UPDATE, DELETE
49
    }
50

  
51
    private final CdmBase entity;
52
    private final EntityPersister persister;
53
    private final Set<CdmBase> affectedObjects;
54

  
55

  
56
    private final Object[] state;
57
    // for update only
58
    private Object[] oldState;
59
    private final Serializable id;
60
    protected final EventType eventType;
61

  
62
    /**
63
     * @param source
64
     */
65
    private CdmDataChangeEvent(
66
            CdmBase entity,
67
            Serializable id,
68
            Object[] state,
69
            Object[] oldState,
70
            EntityPersister persister,
71
            EventSource source,
72
            EventType eventType
73
            ) {
74
        super(source);
75
        this.entity = entity;
76
        this.id = id;
77
        this.state = state;
78
        this.oldState = oldState;
79
        this.persister = persister;
80
        this.eventType = eventType;
81
        this.affectedObjects = null;
82
    }
83
    /**
84
     * @param source
85
     */
86
    private CdmDataChangeEvent(
87
            CdmBase entity,
88
            Set<CdmBase> affectedObjects,
89
            EventType eventType
90
            ) {
91
        super(null);
92
        this.entity = entity;
93
        this.persister = null;
94
        this.affectedObjects = affectedObjects;
95
        this.state = null;
96
        this.oldState = null;
97
        this.id = null;
98
        this.eventType = eventType;
99
    }
100

  
101
    public CdmBase getEntity() {
102
        return entity;
103
    }
104
    public Serializable getId() {
105
        return id;
106
    }
107
    public EntityPersister getPersister() {
108
        return persister;
109
    }
110
    public Object[] getState() {
111
        return state;
112
    }
113
    public Object[] getOldState() {
114
        if(oldState == null){
115
            oldState = state;
116
        }
117
        return oldState;
118
    }
119

  
120
    public Set<CdmBase> getAffectedObjects() {
121
        return affectedObjects;
122
    }
123

  
124
    public EventType getEventType(){
125
        return eventType;
126
    }
127

  
128
    public boolean isInsert(){
129
        return eventType == EventType.INSERT;
130
    }
131

  
132
    public boolean isLoad(){
133
        return eventType == EventType.LOAD;
134
    }
135

  
136
    public boolean isUpdate(){
137
        return eventType == EventType.UPDATE;
138
    }
139

  
140
    public boolean isDelete(){
141
        return eventType == EventType.DELETE;
142
    }
143

  
144
    /**
145
     * @param event
146
     * @return
147
     */
148
    public static CdmDataChangeEvent NewInstance(AbstractEvent event) {
149

  
150
        CdmDataChangeEvent mediationEvent = null;
151
        try{
152
            if(event instanceof PostInsertEvent){
153
                PostInsertEvent postEvent = (PostInsertEvent) event;
154
                mediationEvent = new CdmDataChangeEvent(
155
                        (CdmBase)postEvent.getEntity(),
156
                        postEvent.getId(),
157
                        postEvent.getState(),
158
                        null,
159
                        postEvent.getPersister(),
160
                        postEvent.getSession(),
161
                        EventType.INSERT
162
                        );
163
            }
164
            if(event instanceof PostLoadEvent){
165
                PostLoadEvent updateEvent = (PostLoadEvent) event;
166
                mediationEvent = new CdmDataChangeEvent(
167
                        (CdmBase)updateEvent.getEntity(),
168
                        updateEvent.getId(),
169
                        null,
170
                        null,
171
                        updateEvent.getPersister(),
172
                        updateEvent.getSession(),
173
                        EventType.LOAD
174
                        );
175
            }
176
            if(event instanceof PostUpdateEvent){
177
                PostUpdateEvent updateEvent = (PostUpdateEvent) event;
178
                mediationEvent = new CdmDataChangeEvent(
179
                        (CdmBase)updateEvent.getEntity(),
180
                        updateEvent.getId(),
181
                        updateEvent.getState(),
182
                        updateEvent.getOldState(),
183
                        updateEvent.getPersister(),
184
                        updateEvent.getSession(),
185
                        EventType.UPDATE
186
                        );
187
            }
188
            if(event instanceof PostDeleteEvent){
189
                PostDeleteEvent deleteEvent = (PostDeleteEvent) event;
190
                mediationEvent = new CdmDataChangeEvent(
191
                        (CdmBase)deleteEvent.getEntity(),
192
                        deleteEvent.getId(),
193
                        deleteEvent.getDeletedState(),
194
                        null,
195
                        deleteEvent.getPersister(),
196
                        deleteEvent.getSession(),
197
                        EventType.DELETE
198
                        );
199
            }
200
        }catch(ClassCastException e){
201
            // we are only interested in CdmBase entities, we have the try/catch block in case another entity slips through
202
            logger.warn("tried to instantiate event for non CdmBase entity");
203
        }
204

  
205
        return mediationEvent;
206
    }
207

  
208
    public static CdmDataChangeEvent NewInstance(CdmBase entity, Set<CdmBase> affectedObjects, EventType eventType) {
209

  
210
        return new CdmDataChangeEvent(entity, affectedObjects, eventType);
211
    }
191 212

  
192 213
}

Also available in: Unified diff