Project

General

Profile

Download (6.06 KB) Statistics
| Branch: | Tag: | Revision:
1 58afb673 Cherian Mathew
// $Id$
2
/**
3 ba0d4c2f Cherian Mathew
 * 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 58afb673 Cherian Mathew
package eu.etaxonomy.taxeditor.session;
11
12 703e8efc Cherian Mathew
import java.util.ArrayList;
13 58afb673 Cherian Mathew
import java.util.Collection;
14
import java.util.HashMap;
15 ba0d4c2f Cherian Mathew
import java.util.HashSet;
16 703e8efc Cherian Mathew
import java.util.List;
17 58afb673 Cherian Mathew
import java.util.Map;
18 ba0d4c2f Cherian Mathew
import java.util.Set;
19 58afb673 Cherian Mathew
20
import org.apache.log4j.Logger;
21
import org.springframework.stereotype.Component;
22
23
import eu.etaxonomy.cdm.model.common.CdmBase;
24 ba0d4c2f Cherian Mathew
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
25 58afb673 Cherian Mathew
26
/**
27
 * @author cmathew
28
 * @date 16 Oct 2014
29
 *
30
 */
31 e78140b5 Cherian Mathew
@Component
32 58afb673 Cherian Mathew
public class CdmEntitySessionManager implements ICdmEntitySessionManager {
33 ba0d4c2f Cherian Mathew
    private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class);
34 58afb673 Cherian Mathew
35 703e8efc Cherian Mathew
    private final Map<ICdmEntitySessionEnabled, ICdmEntitySession> ownerSessionMap =
36 ba0d4c2f Cherian Mathew
            new HashMap<ICdmEntitySessionEnabled, ICdmEntitySession>();
37 703e8efc Cherian Mathew
38
    private final List<ICdmEntitySessionManagerObserver> sessionObservers = new ArrayList<ICdmEntitySessionManagerObserver>();
39 e78140b5 Cherian Mathew
40 80de230c Cherian Mathew
    private ICdmEntitySession activeSession;
41
42 6548ea8a Cherian Mathew
43 ba0d4c2f Cherian Mathew
44 5c6184af Cherian Mathew
    @Override
45 ba0d4c2f Cherian Mathew
    public ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive) {
46
        ICdmEntitySession session = ownerSessionMap.get(sessionOwner);
47
        if(session == null) {
48
            session = new CdmEntitySession(sessionOwner, this);
49
            addToOwnerSessionMap(sessionOwner, session);
50 703e8efc Cherian Mathew
51 ba0d4c2f Cherian Mathew
        }
52 e78140b5 Cherian Mathew
53 ba0d4c2f Cherian Mathew
        if(setAsActive) {
54
            setActiveSession(session);
55 703e8efc Cherian Mathew
56 ba0d4c2f Cherian Mathew
        }
57 703e8efc Cherian Mathew
58 ba0d4c2f Cherian Mathew
        return session;
59
    }
60 e78140b5 Cherian Mathew
61 5c9343bd Cherian Mathew
    @Override
62
    public ICdmEntitySession getActiveSession() {
63
        return activeSession;
64
    }
65
66 ba0d4c2f Cherian Mathew
    private void setActiveSession(ICdmEntitySession activeSession) {
67
        this.activeSession = activeSession;
68 6548ea8a Cherian Mathew
        notifyObservers();
69 ba0d4c2f Cherian Mathew
    }
70
71 703e8efc Cherian Mathew
72
    /* (non-Javadoc)
73
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions()
74
     */
75
    @Override
76
    public Collection<ICdmEntitySession> getSessions() {
77
        return ownerSessionMap.values();
78
    }
79
80
81 ba0d4c2f Cherian Mathew
    /* (non-Javadoc)
82
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener)
83
     */
84
    @Override
85
    public void bind(ICdmEntitySessionEnabled sessionOwner) {
86
        if(sessionOwner == null) {
87
            setActiveSession(null);
88
            return;
89
        }
90
        ICdmEntitySession session  = ownerSessionMap.get(sessionOwner);
91
        if(session == null) {
92
            session = newSession(sessionOwner,true);
93
        }
94
95
        setActiveSession(session);
96
97
    }
98
99
100
    /* (non-Javadoc)
101
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
102
     */
103
    @Override
104
    public <T extends Object> T load(T obj, boolean update) {
105
        if(activeSession == null) {
106
            return obj;
107
        } else {
108
            return activeSession.load(obj, update);
109
        }
110
    }
111
112
    @Override
113
    public <T extends CdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
114
        if(activeSession != null) {
115
            activeSession.addEvent(cdmBase, affectedObjects, EventType.UPDATE);
116
        }
117
    }
118
119
    @Override
120
    public <T extends CdmBase> void update() {
121
        if(activeSession != null) {
122
            activeSession.update();
123
        }
124
    }
125
126
    /* (non-Javadoc)
127
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
128
     */
129
    @Override
130
    public <T extends CdmBase> T load(T cdmBase, boolean update) {
131
        if(activeSession == null) {
132
            return cdmBase;
133
        }
134
        return activeSession.load(cdmBase, update);
135
    }
136
137
138
139
    /* (non-Javadoc)
140
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
141
     */
142
    @Override
143
    public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
144
        if(activeSession == null) {
145
            return cdmBaseList;
146
        }
147
        return activeSession.load(cdmBaseList, update);
148
    }
149
150
151
    /* (non-Javadoc)
152
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
153
     */
154
    void remove(ICdmEntitySessionEnabled owner) {
155
        ICdmEntitySession session = ownerSessionMap.get(owner);
156
        if(session == null) {
157
            logger.info("No Session connected to owner, nothing to do");
158
            return;
159
        }
160
        if(session == activeSession) {
161
            setActiveSession(null);
162
        }
163
        ownerSessionMap.remove(owner);
164
165
    }
166
167
    @Override
168
    public void dispose(ICdmEntitySessionEnabled owner) {
169
        ICdmEntitySession session = ownerSessionMap.get(owner);
170
        if(session != null) {
171
            session.dispose();
172
        }
173
        notifyObservers();
174
    }
175
176
    @Override
177
    public void disposeAll() {
178
        Set<ICdmEntitySessionEnabled> owners =
179
                new HashSet<ICdmEntitySessionEnabled>(ownerSessionMap.keySet());
180
        for(ICdmEntitySessionEnabled owner : owners) {
181
            ICdmEntitySession session = ownerSessionMap.get(owner);
182
            if(session != null) {
183
                session.dispose();
184
            }
185
        }
186
        notifyObservers();
187
    }
188
189
    void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
190
        ownerSessionMap.put(owner, session);
191
    }
192 58afb673 Cherian Mathew
193 703e8efc Cherian Mathew
    /* (non-Javadoc)
194
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
195
     */
196
    @Override
197
    public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) {
198
        sessionObservers.add(sessionObserver);
199
    }
200
201
    public void notifyObservers() {
202
        for(ICdmEntitySessionManagerObserver sessionObserver : sessionObservers) {
203
            sessionObserver.changed();
204
        }
205
    }
206
207
    /* (non-Javadoc)
208
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
209
     */
210
    @Override
211
    public boolean isRemoting() {
212
        // FIXME:Remoting stupid method to check whether we are in remoting
213
        return true;
214
    }
215
216
217 58afb673 Cherian Mathew
}