a55c1badf2ac116954c872e992370f284c7bdab2
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / taxeditor / session / CdmEntitySessionManager.java
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.Collection;
14 import java.util.HashMap;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.apache.log4j.Logger;
19 import org.springframework.stereotype.Component;
20
21 import eu.etaxonomy.cdm.model.common.CdmBase;
22
23 /**
24 * @author cmathew
25 * @date 16 Oct 2014
26 *
27 */
28 @Component
29 public class CdmEntitySessionManager implements ICdmEntitySessionManager {
30 private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class);
31
32 private final Map<ICdmEntitySessionEnabled, ICdmEntitySession> ownerSessionMap =
33 new HashMap<ICdmEntitySessionEnabled, ICdmEntitySession>();
34
35 private final List<ICdmEntitySessionManagerObserver> sessionObservers = new ArrayList<ICdmEntitySessionManagerObserver>();
36
37 private ICdmEntitySession activeSession;
38
39 @Override
40 public ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive) {
41 ICdmEntitySession session = ownerSessionMap.get(sessionOwner);
42 if(session == null) {
43 session = new CdmEntitySession(sessionOwner, this);
44 addToOwnerSessionMap(sessionOwner, session);
45
46 }
47
48 if(setAsActive) {
49 activeSession = session;
50
51 }
52
53 return session;
54 }
55
56 @Override
57 public ICdmEntitySession getActiveSession() {
58 return activeSession;
59 }
60
61
62 /* (non-Javadoc)
63 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions()
64 */
65 @Override
66 public Collection<ICdmEntitySession> getSessions() {
67 return ownerSessionMap.values();
68 }
69
70
71 /* (non-Javadoc)
72 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener)
73 */
74 @Override
75 public void bind(ICdmEntitySessionEnabled sessionOwner) {
76 if(sessionOwner == null) {
77 activeSession = null;
78 return;
79 }
80 ICdmEntitySession session = ownerSessionMap.get(sessionOwner);
81 if(session == null) {
82 session = newSession(sessionOwner,true);
83 }
84
85 activeSession = session;
86
87 }
88
89
90 /* (non-Javadoc)
91 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
92 */
93 @Override
94 public <T extends Object> T load(T obj, boolean update) {
95 if(activeSession == null) {
96 return obj;
97 } else {
98 return activeSession.load(obj, update);
99 }
100 }
101
102
103 /* (non-Javadoc)
104 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
105 */
106 @Override
107 public <T extends CdmBase> T load(T cdmBase, boolean update) {
108 if(activeSession == null) {
109 return cdmBase;
110 }
111 return activeSession.load(cdmBase, update);
112 }
113
114
115
116 /* (non-Javadoc)
117 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
118 */
119 @Override
120 public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
121 if(activeSession == null) {
122 return cdmBaseList;
123 }
124 return activeSession.load(cdmBaseList, update);
125 }
126
127
128 /* (non-Javadoc)
129 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
130 */
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");
135 return;
136 }
137 if(session == activeSession) {
138 activeSession = null;
139 }
140 ownerSessionMap.remove(owner);
141 notifyObservers();
142 }
143
144 void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
145 ownerSessionMap.put(owner, session);
146 }
147
148 /* (non-Javadoc)
149 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
150 */
151 @Override
152 public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) {
153 sessionObservers.add(sessionObserver);
154 }
155
156 public void notifyObservers() {
157 for(ICdmEntitySessionManagerObserver sessionObserver : sessionObservers) {
158 sessionObserver.changed();
159 }
160 }
161
162 /* (non-Javadoc)
163 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
164 */
165 @Override
166 public boolean isRemoting() {
167 // FIXME:Remoting stupid method to check whether we are in remoting
168 return true;
169 }
170
171
172
173
174
175
176
177 }