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
.List
;
18 import org
.apache
.log4j
.Logger
;
19 import org
.springframework
.stereotype
.Component
;
21 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
29 public class CdmEntitySessionManager
implements ICdmEntitySessionManager
{
30 private static final Logger logger
= Logger
.getLogger(CdmEntitySessionManager
.class);
32 private final Map
<ICdmEntitySessionEnabled
, ICdmEntitySession
> ownerSessionMap
=
33 new HashMap
<ICdmEntitySessionEnabled
, ICdmEntitySession
>();
35 private final List
<ICdmEntitySessionManagerObserver
> sessionObservers
= new ArrayList
<ICdmEntitySessionManagerObserver
>();
37 private ICdmEntitySession activeSession
;
40 public ICdmEntitySession
newSession(ICdmEntitySessionEnabled sessionOwner
, boolean setAsActive
) {
41 ICdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
43 session
= new CdmEntitySession(sessionOwner
, this);
44 addToOwnerSessionMap(sessionOwner
, session
);
49 activeSession
= session
;
57 public ICdmEntitySession
getActiveSession() {
63 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions()
66 public Collection
<ICdmEntitySession
> getSessions() {
67 return ownerSessionMap
.values();
72 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener)
75 public void bind(ICdmEntitySessionEnabled sessionOwner
) {
76 if(sessionOwner
== null) {
80 ICdmEntitySession session
= ownerSessionMap
.get(sessionOwner
);
82 session
= newSession(sessionOwner
,true);
85 activeSession
= session
;
91 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
94 public <T
extends Object
> T
load(T obj
, boolean update
) {
95 if(activeSession
== null) {
98 return activeSession
.load(obj
, update
);
104 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
107 public <T
extends CdmBase
> T
load(T cdmBase
, boolean update
) {
108 if(activeSession
== null) {
111 return activeSession
.load(cdmBase
, update
);
117 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
120 public <T
extends CdmBase
> Collection
<T
> load(Collection
<T
> cdmBaseList
, boolean update
) {
121 if(activeSession
== null) {
124 return activeSession
.load(cdmBaseList
, update
);
129 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
131 void dispose(ICdmEntitySessionEnabled owner
) {
132 ICdmEntitySession session
= ownerSessionMap
.get(owner
);
133 if(session
== null) {
134 logger
.info("No Session connected to owner, nothing to dispose");
137 if(session
== activeSession
) {
138 activeSession
= null;
140 ownerSessionMap
.remove(owner
);
144 void addToOwnerSessionMap(ICdmEntitySessionEnabled owner
, ICdmEntitySession session
) {
145 ownerSessionMap
.put(owner
, session
);
149 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
152 public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver
) {
153 sessionObservers
.add(sessionObserver
);
156 public void notifyObservers() {
157 for(ICdmEntitySessionManagerObserver sessionObserver
: sessionObservers
) {
158 sessionObserver
.changed();
163 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
166 public boolean isRemoting() {
167 // FIXME:Remoting stupid method to check whether we are in remoting