Project

General

Profile

Download (4.41 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.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
}
(3-3/7)