Revision 5c9343bd
Added by Cherian Mathew about 9 years ago
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java | ||
---|---|---|
16 | 16 |
import org.apache.poi.ss.formula.functions.T; |
17 | 17 |
|
18 | 18 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
19 |
import eu.etaxonomy.cdm.model.common.ICdmBase; |
|
20 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent; |
|
21 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType; |
|
22 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmPostDataChangeObservableListener; |
|
19 | 23 |
import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; |
20 | 24 |
|
21 | 25 |
|
... | ... | |
32 | 36 |
public class CdmEntitySession implements ICdmEntitySession { |
33 | 37 |
|
34 | 38 |
|
35 |
private CdmEntitySessionManager cdmEntitySessionManager; |
|
39 |
private final CdmEntitySessionManager cdmEntitySessionManager;
|
|
36 | 40 |
|
37 |
private final ISessionEventListener sessionOwner;
|
|
41 |
private final ICdmEntitySessionEnabled sessionOwner;
|
|
38 | 42 |
|
39 | 43 |
private final CdmTransientEntityCacher cdmTransientEntityCacher; |
40 | 44 |
|
45 |
private final List<ICdmEntitySessionEnabled> changeObservers; |
|
46 |
|
|
41 | 47 |
private final List<T> rootEntities; |
42 | 48 |
|
43 |
CdmEntitySession(ISessionEventListener sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
|
|
49 |
CdmEntitySession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
|
|
44 | 50 |
this.sessionOwner = sessionOwner; |
45 | 51 |
this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager); |
46 | 52 |
this.rootEntities = new ArrayList<T>(); |
47 |
|
|
53 |
this.cdmEntitySessionManager = cdmEntitySessionManager; |
|
54 |
this.changeObservers = new ArrayList<ICdmEntitySessionEnabled>(); |
|
48 | 55 |
cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this); |
49 | 56 |
} |
50 | 57 |
|
... | ... | |
86 | 93 |
// } |
87 | 94 |
} |
88 | 95 |
|
96 |
/** |
|
97 |
* Register to get updated after any interaction with the datastore |
|
98 |
*/ |
|
99 |
@Override |
|
100 |
public void registerForDataStoreChanges(ICdmEntitySessionEnabled observer) { |
|
101 |
CdmPostDataChangeObservableListener.getDefault().register(observer); |
|
102 |
} |
|
103 |
|
|
104 |
/** |
|
105 |
* Register to get updated after any interaction with the datastore |
|
106 |
*/ |
|
107 |
@Override |
|
108 |
public void unregisterForDataStoreChanges(ICdmEntitySessionEnabled observer) { |
|
109 |
CdmPostDataChangeObservableListener.getDefault().unregister(observer); |
|
110 |
} |
|
111 |
|
|
89 | 112 |
|
113 |
|
|
114 |
@Override |
|
90 | 115 |
public void bind() { |
91 | 116 |
cdmEntitySessionManager.bind(sessionOwner); |
92 | 117 |
} |
... | ... | |
97 | 122 |
public void dispose() { |
98 | 123 |
rootEntities.clear(); |
99 | 124 |
cdmTransientEntityCacher.dispose(); |
125 |
for(ICdmEntitySessionEnabled observer : changeObservers) { |
|
126 |
CdmPostDataChangeObservableListener.getDefault().unregister(observer); |
|
127 |
} |
|
128 |
changeObservers.clear(); |
|
100 | 129 |
} |
101 | 130 |
|
102 | 131 |
|
132 |
/* (non-Javadoc) |
|
133 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit() |
|
134 |
*/ |
|
135 |
@Override |
|
136 |
public void addEvent(ICdmBase cdmBase, EventType eventType) { |
|
137 |
CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, EventType.UPDATE); |
|
138 |
CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce); |
|
139 |
} |
|
140 |
|
|
141 |
|
|
142 |
/* (non-Javadoc) |
|
143 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#notify(java.util.Collection, eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType) |
|
144 |
*/ |
|
145 |
@Override |
|
146 |
public <T extends ICdmBase> void addEvent(Collection <T> cdmBases, EventType eventType) { |
|
147 |
for(ICdmBase cdmBase : cdmBases) { |
|
148 |
CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, EventType.UPDATE); |
|
149 |
CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce); |
|
150 |
} |
|
151 |
|
|
152 |
} |
|
153 |
|
|
154 |
/* (non-Javadoc) |
|
155 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit() |
|
156 |
*/ |
|
157 |
@Override |
|
158 |
public void commit() { |
|
159 |
CdmPostDataChangeObservableListener.getDefault().delayedNotify(); |
|
160 |
} |
|
161 |
|
|
162 |
|
|
163 |
|
|
103 | 164 |
|
104 | 165 |
|
105 | 166 |
} |
Also available in: Unified diff
CdmTransientEntityCacher : comments and cleanup
MockCdmEntitySessionManager, MockCdmEntitySession : implementing new interface methods
renamed ISessionEventListener to ICdmEntitySessionEnabled
ICdmEntitySession, CdmEntitySession : added methods to register session observer and add change events
ICdmEntitySessionManager, CdmEntitySessionManager : added getActiveSession method
CdmServerInfo :: added possiblity to connect directly to dev eclipse cdm server