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
.session
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Collection
;
14 import java
.util
.HashMap
;
15 import java
.util
.HashSet
;
16 import java
.util
.List
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.springframework
.stereotype
.Component
;
23 import eu
.etaxonomy
.cdm
.api
.service
.UpdateResult
;
24 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
32 public class CdmEntitySessionManager
implements ICdmEntitySessionManager
{
33 private static final Logger logger
= Logger
.getLogger(CdmEntitySessionManager
.class);
35 private final Map
<ICdmEntitySessionEnabled
, ICdmEntitySession
> ownerSessionMap
=
36 new HashMap
<ICdmEntitySessionEnabled
, ICdmEntitySession
>();
38 private final List
<ICdmEntitySessionManagerObserver
> sessionObservers
= new ArrayList
<ICdmEntitySessionManagerObserver
>();
40 private ICdmEntitySession activeSession
;
42 private NullSession nullSession
;
45 public ICdmEntitySession
getNullSession() {
50 public ICdmEntitySession
newSession(ICdmEntitySessionEnabled sessionOwner
, boolean setAsActive
) {
51 ICdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
53 session
= new CdmEntitySession(sessionOwner
, this);
54 addToOwnerSessionMap(sessionOwner
, session
);
58 setActiveSession(session
);
65 public ICdmEntitySession
bindNullSession(ICdmEntitySessionEnabled sessionOwner
) {
67 if(nullSession
== null) {
68 nullSession
= new NullSession(sessionOwner
, this);
70 nullSession
.setOwner(sessionOwner
);
73 setActiveSession(nullSession
);
79 public ICdmEntitySession
getActiveSession() {
83 private void setActiveSession(ICdmEntitySession activeSession
) {
84 this.activeSession
= activeSession
;
90 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions()
93 public Collection
<ICdmEntitySession
> getSessions() {
94 return ownerSessionMap
.values();
99 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener)
102 public void bind(ICdmEntitySessionEnabled sessionOwner
) {
103 if(sessionOwner
== null) {
104 setActiveSession(null);
107 ICdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
108 if(session
== null) {
109 throw new CdmClientSessionException("Trying to bind session which does not exist");
112 setActiveSession(session
);
117 public boolean contains(ICdmEntitySessionEnabled sessionOwner
) {
118 return ownerSessionMap
.containsKey(sessionOwner
);
123 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
126 public <T
extends Object
> T
load(T obj
, boolean update
) {
127 if(activeSession
== null) {
130 return activeSession
.load(obj
, update
);
136 public <T
extends CdmBase
> void update() {
137 if(activeSession
!= null) {
138 activeSession
.update();
143 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
146 public <T
extends CdmBase
> T
load(T cdmBase
, boolean update
) {
147 if(activeSession
== null) {
150 return activeSession
.load(cdmBase
, update
);
155 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
158 public UpdateResult
load(UpdateResult updateResult
, boolean update
) {
159 if(activeSession
== null) {
162 return activeSession
.load(updateResult
, update
);
167 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
170 public <T
extends CdmBase
> Collection
<T
> load(Collection
<T
> cdmBaseList
, boolean update
) {
171 if(activeSession
== null) {
174 return activeSession
.load(cdmBaseList
, update
);
179 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
181 void remove(ICdmEntitySessionEnabled owner
) {
182 ICdmEntitySession session
= ownerSessionMap
.get(owner
);
183 if(session
== null) {
184 logger
.info("No Session connected to owner, nothing to do");
187 if(session
== activeSession
) {
188 setActiveSession(null);
190 ownerSessionMap
.remove(owner
);
195 public void dispose(ICdmEntitySessionEnabled owner
) {
196 ICdmEntitySession session
= ownerSessionMap
.get(owner
);
197 if(session
!= null) {
204 public void disposeAll() {
205 Set
<ICdmEntitySessionEnabled
> owners
=
206 new HashSet
<ICdmEntitySessionEnabled
>(ownerSessionMap
.keySet());
207 for(ICdmEntitySessionEnabled owner
: owners
) {
208 ICdmEntitySession session
= ownerSessionMap
.get(owner
);
209 if(session
!= null) {
216 void addToOwnerSessionMap(ICdmEntitySessionEnabled owner
, ICdmEntitySession session
) {
217 ownerSessionMap
.put(owner
, session
);
221 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
224 public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver
) {
225 sessionObservers
.add(sessionObserver
);
228 public void notifyObservers() {
229 for(ICdmEntitySessionManagerObserver sessionObserver
: sessionObservers
) {
230 sessionObserver
.changed();
235 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
238 public boolean isRemoting() {
239 // FIXME:Remoting stupid method to check whether we are in remoting