Project

General

Profile

Download (8.95 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2014 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.taxeditor.session;
11

    
12
import java.util.ArrayList;
13
import java.util.Arrays;
14
import java.util.Collection;
15
import java.util.HashSet;
16
import java.util.List;
17
import java.util.Set;
18
import java.util.UUID;
19

    
20
import net.sf.ehcache.statistics.LiveCacheStatistics;
21

    
22
import org.apache.log4j.Logger;
23

    
24
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
25
import eu.etaxonomy.cdm.api.service.IService;
26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
28
import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
29

    
30

    
31
/**
32
 *
33
 * NOTE : It would be nice to have this class performing merge / delete operations
34
 * using services, but this is only possible if we can 'intelligently'
35
 * get from a model class to the correspoding service class
36
 * @author cmathew
37
 * @date 20 Oct 2014
38
 *
39
 */
40

    
41
public class CdmEntitySession implements ICdmEntitySession  {
42

    
43
    private static final Logger logger = Logger.getLogger(CdmEntitySession.class);
44

    
45
    private final CdmEntitySessionManager cdmEntitySessionManager;
46

    
47
    private final ICdmEntitySessionEnabled sessionOwner;
48

    
49
    private final CdmTransientEntityCacher cdmTransientEntityCacher;
50

    
51
    private final List<ICdmEntitySessionEnabled> changeObservers;
52

    
53
    private final Set<CdmBase> newCdmEntities;
54

    
55

    
56

    
57
    public CdmEntitySession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
58
        this.sessionOwner = sessionOwner;
59
        this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager);
60
        this.cdmEntitySessionManager = cdmEntitySessionManager;
61
        this.changeObservers = new ArrayList<ICdmEntitySessionEnabled>();
62
        this.newCdmEntities = new HashSet<CdmBase>();
63
        cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this);
64
        CdmApplicationState.getCurrentDataChangeService().register(sessionOwner);
65
    }
66

    
67

    
68

    
69
    /* (non-Javadoc)
70
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.lang.Object, boolean)
71
     */
72
    @Override
73
    public  <O extends Object> O load(O obj, boolean update) {
74
        return cdmTransientEntityCacher.load(obj, update);
75
    }
76

    
77

    
78
    /* (non-Javadoc)
79
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.model.common.CdmBase, boolean)
80
     */
81
    @Override
82
    public  <T extends CdmBase> T load(T cdmBase, boolean update) {
83
        return (T)cdmTransientEntityCacher.load(cdmBase, update);
84
    }
85

    
86
    @Override
87
    public <T extends CdmBase> void  update() {
88
        List<T> rootEntities = getRootEntities();
89
        if(rootEntities != null) {
90
            for(T rootEntity : rootEntities) {
91
                load(rootEntity, true);
92
            }
93
        }
94
    }
95

    
96
//    @Override
97
//    public <T extends ICdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
98
//        addEvent(cdmBase, affectedObjects, EventType.UPDATE);
99
//    }
100
//
101
//    @Override
102
//    public <T extends ICdmBase> void update(T cdmBase, CdmBase affectedObject) {
103
//        Set<CdmBase> set = new HashSet<CdmBase>();
104
//        set.add(affectedObject);
105
//        addEvent(cdmBase, set, EventType.UPDATE);
106
//    }
107
//
108
//
109
//    @Override
110
//    public <T extends ICdmBase> void delete(T cdmBase, Set<CdmBase> affectedObjects) {
111
//        addEvent(cdmBase, affectedObjects, EventType.DELETE);
112
//    }
113
//
114
//    @Override
115
//    public <T extends ICdmBase> void delete(Set<T> cdmBases, Set<CdmBase> affectedObjects) {
116
//        addEvent(cdmBases, affectedObjects, EventType.DELETE);
117
//    }
118

    
119

    
120

    
121
    /* (non-Javadoc)
122
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase)
123
     */
124
    @Override
125
    public <T extends CdmBase> EntityCacherDebugResult debug(T cdmBase) {
126
        return debug(Arrays.asList(cdmBase));
127
    }
128

    
129

    
130

    
131
    /* (non-Javadoc)
132
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.List)
133
     */
134
    @Override
135
    public <T extends CdmBase> EntityCacherDebugResult debug(List<T> cdmBases) {
136
        EntityCacherDebugResult entityCacherDebugResult =
137
                new EntityCacherDebugResult(cdmTransientEntityCacher, cdmBases);
138
        return entityCacherDebugResult;
139
    }
140

    
141

    
142
    /* (non-Javadoc)
143
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug()
144
     */
145
    @Override
146
    public <T extends CdmBase> EntityCacherDebugResult debug() {
147
        return debug(getRootEntities());
148
    }
149

    
150
    /* (non-Javadoc)
151
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection)
152
     */
153
    @Override
154
    public  <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
155
        return cdmTransientEntityCacher.load(cdmBaseList, update);
156
    }
157

    
158
    /* (non-Javadoc)
159
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest()
160
     */
161
    @Override
162
    public void setEntitiesAsLatest() {
163
        //FIXME:Remoting need to think more about whether we really need this
164
        //		List<CdmBase> entities = cdmTransientEntityCacher.getAllEntities();
165
        //		for(CdmBase entity : entities) {
166
        //			cdmEntitySessionManager.setEntityAsLatest(entity);
167
        //		}
168
    }
169

    
170

    
171
    @Override
172
    public void bind() {
173
        logger.info("Binding session with owner " + sessionOwner.toString());
174
        cdmEntitySessionManager.bind(sessionOwner);
175

    
176
    }
177

    
178
    /* (non-Javadoc)
179
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose()
180
     */
181
    @Override
182
    public void dispose() {
183

    
184
        cdmTransientEntityCacher.dispose();
185
//        for(ICdmEntitySessionEnabled observer : changeObservers) {
186
//            CdmPostDataChangeObservableListener.getDefault().unregister(observer);
187
//        }
188
        changeObservers.clear();
189
        cdmEntitySessionManager.remove(sessionOwner);
190
        CdmApplicationState.getCurrentDataChangeService().unregister(sessionOwner);
191
    }
192

    
193

    
194
//    /* (non-Javadoc)
195
//     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
196
//     */
197
//    @Override
198
//    public void addEvent(ICdmBase cdmBase, Set<CdmBase> affectedObjects, EventType eventType) {
199
//        affectedObjects = (Set<CdmBase>) load(affectedObjects, true);
200
//        CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, affectedObjects, eventType);
201
//        CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce);
202
//    }
203

    
204

    
205
    /* (non-Javadoc)
206
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.UUID, java.lang.Class)
207
     */
208
    @Override
209
    public  <T extends CdmBase>  T remoteLoad(IService<T> service, UUID uuid) {
210
        T cdmBase = service.load(uuid);
211
        return load(cdmBase, false);
212
    }
213

    
214

    
215
    /* (non-Javadoc)
216
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.IService, java.util.UUID, java.util.List)
217
     */
218
    @Override
219
    public <T extends CdmBase>  T remoteLoad(IService<T> service, UUID uuid, List<String> propertyPaths) {
220
        T cdmBase = service.load(uuid, propertyPaths);
221
        return load(cdmBase, false);
222
    }
223

    
224

    
225
    /* (non-Javadoc)
226
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#save(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase)
227
     */
228
    @Override
229
    public <T extends CdmBase> UUID remoteSave(IService<T> service, T cdmBase) {
230
        UUID uuid = service.save(cdmBase);
231
        load(cdmBase,false);
232
        return uuid;
233
    }
234

    
235

    
236
    /* (non-Javadoc)
237
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase)
238
     */
239
    @Override
240
    public <T extends CdmBase> T remoteUpdate(IService<T> service, T cdmBase) {
241
        T mergedCdmBase = service.merge(cdmBase);
242
        return mergedCdmBase;
243
    }
244

    
245

    
246
    /* (non-Javadoc)
247
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#isActive()
248
     */
249
    @Override
250
    public boolean isActive() {
251
        return cdmEntitySessionManager.getActiveSession() == this;
252
    }
253

    
254

    
255
    /* (non-Javadoc)
256
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getOwner()
257
     */
258
    @Override
259
    public ICdmEntitySessionEnabled getOwner() {
260
        return sessionOwner;
261
    }
262

    
263

    
264
    /* (non-Javadoc)
265
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getNoOfObjectsInCache()
266
     */
267
    @Override
268
    public LiveCacheStatistics getCacheStatistics() {
269
        return cdmTransientEntityCacher.getCacheStatistics();
270
    }
271

    
272

    
273
    /* (non-Javadoc)
274
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getRootEntities()
275
     */
276
    @Override
277
    public <T extends CdmBase> List<T> getRootEntities() {
278
        return sessionOwner.getRootEntities();
279
    }
280

    
281
    public CdmTransientEntityCacher getCacher() {
282
        return cdmTransientEntityCacher;
283
    }
284

    
285

    
286

    
287

    
288

    
289

    
290

    
291

    
292

    
293

    
294

    
295
}
(2-2/7)