Project

General

Profile

Download (6.06 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.model.common.CdmBase;
24
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
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
    @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

    
193
    /* (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
}
218

    
(3-3/7)