Project

General

Profile

Download (4.71 KB) Statistics
| Branch: | Tag: | Revision:
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.Collection;
13
import java.util.HashMap;
14
import java.util.Map;
15

    
16
import org.apache.log4j.Logger;
17
import org.springframework.stereotype.Component;
18

    
19
import eu.etaxonomy.cdm.api.cache.CdmTransientEntityCacher;
20
import eu.etaxonomy.cdm.model.common.CdmBase;
21

    
22
/**
23
 * @author cmathew
24
 * @date 16 Oct 2014
25
 *
26
 */
27
@Component("cdmEntitySessionManager")
28
public class CdmEntitySessionManager implements ICdmEntitySessionManager {
29
	private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class);
30

    
31
    private Map<ISessionEventListener, CdmEntitySession> ownerSessionMap = 
32
    		new HashMap<ISessionEventListener, CdmEntitySession>();
33
    
34
//    private HashMap<String, HashSet<CdmClientBase<T>>> entitiesMap = 
35
//    		new HashMap<String, HashSet<CdmClientBase<T>>>();
36
    
37
    private CdmTransientEntityCacher latestEntityCacher =
38
    		new CdmTransientEntityCacher("latestEntityCacher", this);
39
    
40
    private ICdmEntitySession activeSession;
41

    
42
   
43
	
44
	private ICdmEntitySession newSession(ISessionEventListener sessionOwner, boolean setAsActive) {
45
		CdmEntitySession session = ownerSessionMap.get(sessionOwner);
46
		if(session == null) {		
47
			session = new CdmEntitySession(sessionOwner, this);
48
			addToOwnerSessionMap(sessionOwner, session);
49
		}
50
		
51
		if(setAsActive) {
52
			activeSession = session;
53
		}		
54
		return session;
55
	}
56
	
57
	/* (non-Javadoc)
58
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener)
59
	 */
60
	@Override
61
	public void bind(ISessionEventListener sessionOwner) {
62
		if(sessionOwner == null) {
63
			activeSession = null;
64
			return;
65
		}
66
		ICdmEntitySession session  = ownerSessionMap.get(sessionOwner);
67
		if(session == null) {
68
			session = newSession(sessionOwner,true);
69
		}
70
		activeSession = session;
71
	}
72
	
73
	/* (non-Javadoc)
74
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.taxeditor.session.ISessionEventListener, T)
75
	 */
76
	@Override
77
	public <T extends Object> T load(ISessionEventListener sessionOwner, T obj) {
78
		ICdmEntitySession session = newSession(sessionOwner,true);		
79
		return (T) session.load(obj);
80
	}
81
	
82
	/* (non-Javadoc)
83
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
84
	 */
85
	@Override
86
	public <T extends Object> T load(T obj) {
87
		if(activeSession == null) {
88
			return obj;
89
		} else {
90
			return (T)activeSession.load(obj);
91
		}
92
	}
93

    
94
	/* (non-Javadoc)
95
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.taxeditor.session.ISessionEventListener, T)
96
	 */
97
	@Override
98
	public <T extends CdmBase> T load(ISessionEventListener sessionOwner, T cdmBase) {
99
		ICdmEntitySession session = newSession(sessionOwner,true);
100
		return (T)session.load(cdmBase);
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 (T)activeSession.load(cdmBase);
112
	}
113
	
114

    
115
	/* (non-Javadoc)
116
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.taxeditor.session.ISessionEventListener, java.util.Collection)
117
	 */
118
	@Override
119
	public <T extends CdmBase> Collection<T> load(ISessionEventListener sessionOwner, Collection<T> cdmBaseList) {
120
		ICdmEntitySession session = newSession(sessionOwner,true);
121
		return session.load(cdmBaseList);
122
	}
123
	
124
	
125
	/* (non-Javadoc)
126
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
127
	 */
128
	@Override
129
	public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList) {
130
		if(activeSession == null) {
131
			return cdmBaseList;
132
		}
133
		return activeSession.load(cdmBaseList);
134
	}
135

    
136
	
137
	/* (non-Javadoc)
138
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
139
	 */
140
	@Override
141
	public void dispose(ISessionEventListener owner) {
142
		ICdmEntitySession session = ownerSessionMap.get(owner);
143
		if(session == null) {
144
			logger.info("No Session connected to owner, nothing to dispose");
145
			return;
146
		}
147
		session.dispose();	
148
	}
149
	
150
	 void addToOwnerSessionMap(ISessionEventListener owner, CdmEntitySession session) {
151
		ownerSessionMap.put(owner, session);
152
	}
153
	
154

    
155
	void setEntityAsLatest(CdmBase cdmBase) {		
156
		latestEntityCacher.put(cdmBase);
157
	}
158
	
159
	void promoteSessionEntitiesToLatest(ISessionEventListener owner) {
160
		ICdmEntitySession session = ownerSessionMap.get(owner);
161
		if(session != null) {
162
			session.setEntitiesAsLatest();
163
		}
164
	}
165

    
166
}
(3-3/6)