3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.remoting
.session
;
12 import java
.util
.HashMap
;
13 import java
.util
.HashSet
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.springframework
.stereotype
.Component
;
19 import eu
.etaxonomy
.cdm
.api
.cache
.CachedCommonServiceImpl
;
20 import eu
.etaxonomy
.cdm
.api
.cache
.CdmClientCacheException
;
21 import eu
.etaxonomy
.cdm
.api
.cache
.CdmClientCachingTest
;
22 import eu
.etaxonomy
.cdm
.api
.cache
.CdmTransientEntityCacher
;
23 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
31 public class CdmEntitySessionManager
{
32 private static final Logger logger
= Logger
.getLogger(CdmEntitySessionManager
.class);
34 private Map
<ISessionEventListener
, CdmEntitySession
> ownerSessionMap
=
35 new HashMap
<ISessionEventListener
, CdmEntitySession
>();
37 // private HashMap<String, HashSet<CdmClientBase<T>>> entitiesMap =
38 // new HashMap<String, HashSet<CdmClientBase<T>>>();
40 private CdmTransientEntityCacher latestEntityCacher
=
41 new CdmTransientEntityCacher("latestEntityCacher");
43 private CdmEntitySession activeSession
;
45 public CdmEntitySession
getActiveSession() {
49 public CdmTransientEntityCacher
getActiveCdmTransientEntityCacher() {
50 return activeSession
.getCdmTransientEntityCacher();
53 public CdmTransientEntityCacher
getCdmTransientEntityCacher(ISessionEventListener sessionOwner
) {
54 if(sessionOwner
== null) {
55 throw new CdmClientSessionException("Session owner object cannot be null");
57 CdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
59 logger
.info("No session exists for session owner with class : " + sessionOwner
.getClass().getName());
62 return session
.getCdmTransientEntityCacher();
65 private CdmEntitySession
newSession(ISessionEventListener sessionOwner
, boolean setAsActive
) {
66 CdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
68 session
= new CdmEntitySession(sessionOwner
, this);
69 addToOwnerSessionMap(sessionOwner
, session
);
73 activeSession
= session
;
78 public void bind(ISessionEventListener sessionOwner
) {
79 CdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
81 session
= newSession(sessionOwner
,true);
83 activeSession
= session
;
86 @SuppressWarnings("unchecked")
87 public <T
extends CdmBase
> T
add(ISessionEventListener sessionOwner
, T cdmBase
) {
88 CdmEntitySession session
= newSession(sessionOwner
,true);
89 return (T
)session
.getCdmTransientEntityCacher().load(cdmBase
,true);
92 void addToOwnerSessionMap(ISessionEventListener owner
, CdmEntitySession session
) {
93 ownerSessionMap
.put(owner
, session
);
96 // void addToLinkedEntities(T cdmBase) {
97 // if(cdmBase == null) {
100 // String id = CdmTransientEntityCacher.generateId(cdmBase);
101 // HashSet<CdmClientBase<T>> linkedEntities = entitiesMap.get(id);
102 // if(linkedEntities == null) {
103 // linkedEntities = new HashSet<CdmClientBase<T>>();
105 // linkedEntities.add(cdmBase);
108 void setEntityAsLatest(CdmBase cdmBase
) {
109 latestEntityCacher
.put(cdmBase
);
112 void promoteSessionEntitiesToLatest(ISessionEventListener owner
) {
113 CdmEntitySession session
= ownerSessionMap
.get(owner
);
114 if(session
!= null) {
115 session
.setEntitiesAsLatest();