Project

General

Profile

Download (6.26 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.HashSet;
16
import java.util.List;
17
import java.util.Map;
18
import java.util.Set;
19

    
20
import org.apache.log4j.Logger;
21
import org.springframework.beans.factory.annotation.Autowired;
22
import org.springframework.stereotype.Component;
23

    
24
import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
27

    
28
/**
29
 * @author cmathew
30
 * @date 16 Oct 2014
31
 *
32
 */
33
@Component
34
public class CdmEntitySessionManager implements ICdmEntitySessionManager {
35
    private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class);
36

    
37
    private final Map<ICdmEntitySessionEnabled, ICdmEntitySession> ownerSessionMap =
38
            new HashMap<ICdmEntitySessionEnabled, ICdmEntitySession>();
39

    
40
    private final List<ICdmEntitySessionManagerObserver> sessionObservers = new ArrayList<ICdmEntitySessionManagerObserver>();
41

    
42
    private ICdmEntitySession activeSession;
43

    
44
    @Autowired
45
    private CdmServiceCacher cdmServiceCacher;
46

    
47
    @Override
48
    public ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive) {
49
        ICdmEntitySession session = ownerSessionMap.get(sessionOwner);
50
        if(session == null) {
51
            session = new CdmEntitySession(sessionOwner, this);
52
            addToOwnerSessionMap(sessionOwner, session);
53

    
54
        }
55

    
56
        if(setAsActive) {
57
            setActiveSession(session);
58

    
59
        }
60

    
61
        return session;
62
    }
63

    
64
    @Override
65
    public ICdmEntitySession getActiveSession() {
66
        return activeSession;
67
    }
68

    
69
    private void setActiveSession(ICdmEntitySession activeSession) {
70
        this.activeSession = activeSession;
71
        cdmServiceCacher.setActiveSession(activeSession);
72
    }
73

    
74

    
75
    /* (non-Javadoc)
76
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions()
77
     */
78
    @Override
79
    public Collection<ICdmEntitySession> getSessions() {
80
        return ownerSessionMap.values();
81
    }
82

    
83

    
84
    /* (non-Javadoc)
85
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener)
86
     */
87
    @Override
88
    public void bind(ICdmEntitySessionEnabled sessionOwner) {
89
        if(sessionOwner == null) {
90
            setActiveSession(null);
91
            return;
92
        }
93
        ICdmEntitySession session  = ownerSessionMap.get(sessionOwner);
94
        if(session == null) {
95
            session = newSession(sessionOwner,true);
96
        }
97

    
98
        setActiveSession(session);
99

    
100
    }
101

    
102

    
103
    /* (non-Javadoc)
104
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
105
     */
106
    @Override
107
    public <T extends Object> T load(T obj, boolean update) {
108
        if(activeSession == null) {
109
            return obj;
110
        } else {
111
            return activeSession.load(obj, update);
112
        }
113
    }
114

    
115
    @Override
116
    public <T extends CdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
117
        if(activeSession != null) {
118
            activeSession.addEvent(cdmBase, affectedObjects, EventType.UPDATE);
119
        }
120
    }
121

    
122
    @Override
123
    public <T extends CdmBase> void update() {
124
        if(activeSession != null) {
125
            activeSession.update();
126
        }
127
    }
128

    
129
    /* (non-Javadoc)
130
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
131
     */
132
    @Override
133
    public <T extends CdmBase> T load(T cdmBase, boolean update) {
134
        if(activeSession == null) {
135
            return cdmBase;
136
        }
137
        return activeSession.load(cdmBase, update);
138
    }
139

    
140

    
141

    
142
    /* (non-Javadoc)
143
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
144
     */
145
    @Override
146
    public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
147
        if(activeSession == null) {
148
            return cdmBaseList;
149
        }
150
        return activeSession.load(cdmBaseList, update);
151
    }
152

    
153

    
154
    /* (non-Javadoc)
155
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener)
156
     */
157
    void remove(ICdmEntitySessionEnabled owner) {
158
        ICdmEntitySession session = ownerSessionMap.get(owner);
159
        if(session == null) {
160
            logger.info("No Session connected to owner, nothing to do");
161
            return;
162
        }
163
        if(session == activeSession) {
164
            setActiveSession(null);
165
        }
166
        ownerSessionMap.remove(owner);
167

    
168
    }
169

    
170
    @Override
171
    public void dispose(ICdmEntitySessionEnabled owner) {
172
        ICdmEntitySession session = ownerSessionMap.get(owner);
173
        if(session != null) {
174
            session.dispose();
175
        }
176
        notifyObservers();
177
    }
178

    
179
    @Override
180
    public void disposeAll() {
181
        Set<ICdmEntitySessionEnabled> owners =
182
                new HashSet<ICdmEntitySessionEnabled>(ownerSessionMap.keySet());
183
        for(ICdmEntitySessionEnabled owner : owners) {
184
            ICdmEntitySession session = ownerSessionMap.get(owner);
185
            if(session != null) {
186
                session.dispose();
187
            }
188
        }
189
        notifyObservers();
190
    }
191

    
192
    void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
193
        ownerSessionMap.put(owner, session);
194
    }
195

    
196
    /* (non-Javadoc)
197
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener()
198
     */
199
    @Override
200
    public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) {
201
        sessionObservers.add(sessionObserver);
202
    }
203

    
204
    public void notifyObservers() {
205
        for(ICdmEntitySessionManagerObserver sessionObserver : sessionObservers) {
206
            sessionObserver.changed();
207
        }
208
    }
209

    
210
    /* (non-Javadoc)
211
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting()
212
     */
213
    @Override
214
    public boolean isRemoting() {
215
        // FIXME:Remoting stupid method to check whether we are in remoting
216
        return true;
217
    }
218

    
219

    
220
}
221

    
(3-3/7)