CdmRemoteCacheManager : added cache getter methods
[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) {
95 if(activeSession == null) {
96 return obj;
97 } else {
98 return activeSession.load(obj);
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) {
108 if(activeSession == null) {
109 return cdmBase;
110 }
111 return activeSession.load(cdmBase);
112 }
113
114
115 /* (non-Javadoc)
116 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
117 */
118 @Override
119 public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList) {
120 if(activeSession == null) {
121 return cdmBaseList;
122 }
123 return activeSession.load(cdmBaseList);
124 }
125
126
127 /* (non-Javadoc)
128 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
129 */
130 void dispose(ICdmEntitySessionEnabled owner) {
131 ICdmEntitySession session = ownerSessionMap.get(owner);
132 if(session == null) {
133 logger.info("No Session connected to owner, nothing to dispose");
134 return;
135 }
136 ownerSessionMap.remove(owner);
137 notifyObservers();
138 }
139
140 void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
141 ownerSessionMap.put(owner, session);
142 }
143
144 /* (non-Javadoc)
145 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
146 */
147 @Override
148 public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) {
149 sessionObservers.add(sessionObserver);
150 }
151
152 public void notifyObservers() {
153 for(ICdmEntitySessionManagerObserver sessionObserver : sessionObservers) {
154 sessionObserver.changed();
155 }
156 }
157
158 /* (non-Javadoc)
159 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
160 */
161 @Override
162 public boolean isRemoting() {
163 // FIXME:Remoting stupid method to check whether we are in remoting
164 return true;
165 }
166
167
168
169
170
171 }