Project

General

Profile

Download (6.19 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.stereotype.Component;
22

    
23
import eu.etaxonomy.cdm.api.service.UpdateResult;
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25

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

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

    
38
    private final List<ICdmEntitySessionManagerObserver> sessionObservers = new ArrayList<ICdmEntitySessionManagerObserver>();
39

    
40
    private ICdmEntitySession activeSession;
41

    
42

    
43

    
44
    @Override
45
    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

    
51
        }
52

    
53
        if(setAsActive) {
54
            setActiveSession(session);
55

    
56
        }
57

    
58
        return session;
59
    }
60

    
61
    @Override
62
    public ICdmEntitySession getActiveSession() {
63
        return activeSession;
64
    }
65

    
66
    private void setActiveSession(ICdmEntitySession activeSession) {
67
        this.activeSession = activeSession;
68
        notifyObservers();
69
    }
70

    
71

    
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
    /* (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

    
113
    @Override
114
    public <T extends CdmBase> void update() {
115
        if(activeSession != null) {
116
            activeSession.update();
117
        }
118
    }
119

    
120
    /* (non-Javadoc)
121
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
122
     */
123
    @Override
124
    public <T extends CdmBase> T load(T cdmBase, boolean update) {
125
        if(activeSession == null) {
126
            return cdmBase;
127
        }
128
        return activeSession.load(cdmBase, update);
129
    }
130

    
131

    
132
    /* (non-Javadoc)
133
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
134
     */
135
    @Override
136
    public UpdateResult load(UpdateResult updateResult, boolean update) {
137
        if(activeSession == null) {
138
            return updateResult;
139
        }
140
        return activeSession.load(updateResult, update);
141
    }
142

    
143

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

    
155

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

    
170
    }
171

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

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

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

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

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

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

    
221

    
222

    
223
}
224

    
(3-3/7)