Project

General

Profile

Download (4.34 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) {
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
		if(session == activeSession) {
137
		    activeSession = null;
138
		}
139
		ownerSessionMap.remove(owner);
140
		notifyObservers();
141
	}
142

    
143
	 void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
144
		ownerSessionMap.put(owner, session);
145
	}
146

    
147
    /* (non-Javadoc)
148
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
149
     */
150
    @Override
151
    public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) {
152
        sessionObservers.add(sessionObserver);
153
    }
154

    
155
    public void notifyObservers() {
156
        for(ICdmEntitySessionManagerObserver sessionObserver : sessionObservers) {
157
            sessionObserver.changed();
158
        }
159
    }
160

    
161
    /* (non-Javadoc)
162
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
163
     */
164
    @Override
165
    public boolean isRemoting() {
166
        // FIXME:Remoting stupid method to check whether we are in remoting
167
        return true;
168
    }
169

    
170

    
171

    
172

    
173

    
174
}
(3-3/7)