Project

General

Profile

Download (5.01 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.List;
15

    
16
import org.apache.poi.ss.formula.functions.T;
17

    
18
import eu.etaxonomy.cdm.model.common.CdmBase;
19
import eu.etaxonomy.cdm.model.common.ICdmBase;
20
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
21
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
22
import eu.etaxonomy.cdm.persistence.hibernate.CdmPostDataChangeObservableListener;
23
import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
24

    
25

    
26
/**
27
 *
28
 * NOTE : It would be nice to have this class performing merge / delete operations
29
 * using services, but this is only possible if we can 'intelligently'
30
 * get from a model class to the correspoding service class
31
 * @author cmathew
32
 * @date 20 Oct 2014
33
 *
34
 */
35

    
36
public class CdmEntitySession implements ICdmEntitySession  {
37

    
38

    
39
	private final CdmEntitySessionManager cdmEntitySessionManager;
40

    
41
	private final ICdmEntitySessionEnabled sessionOwner;
42

    
43
	private final CdmTransientEntityCacher cdmTransientEntityCacher;
44

    
45
	private final List<ICdmEntitySessionEnabled> changeObservers;
46

    
47
	private final List<T> rootEntities;
48

    
49
	CdmEntitySession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
50
		this.sessionOwner = sessionOwner;
51
		this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager);
52
		this.rootEntities = new ArrayList<T>();
53
		this.cdmEntitySessionManager = cdmEntitySessionManager;
54
		this.changeObservers = new ArrayList<ICdmEntitySessionEnabled>();
55
		cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this);
56
	}
57

    
58

    
59
	/* (non-Javadoc)
60
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(T)
61
	 */
62
	@Override
63
	public <T extends Object> T load(T obj) {
64
		return cdmTransientEntityCacher.load(obj,true);
65
	}
66

    
67

    
68
	/* (non-Javadoc)
69
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(T)
70
	 */
71
	@Override
72
	public <T extends CdmBase> T load(T cdmBase) {
73
		return (T)cdmTransientEntityCacher.load(cdmBase,true);
74
	}
75

    
76
	/* (non-Javadoc)
77
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection)
78
	 */
79
	@Override
80
	public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList) {
81
		return cdmTransientEntityCacher.load(cdmBaseList,true);
82
	}
83

    
84
	/* (non-Javadoc)
85
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest()
86
	 */
87
	@Override
88
	public void setEntitiesAsLatest() {
89
	    //FIXME:Remoting need to think more about whether we really need this
90
//		List<CdmBase> entities = cdmTransientEntityCacher.getAllEntities();
91
//		for(CdmBase entity : entities) {
92
//			cdmEntitySessionManager.setEntityAsLatest(entity);
93
//		}
94
	}
95

    
96
    /**
97
     * Register to get updated after any interaction with the datastore
98
     */
99
	@Override
100
    public void registerForDataStoreChanges(ICdmEntitySessionEnabled observer) {
101
        CdmPostDataChangeObservableListener.getDefault().register(observer);
102
    }
103

    
104
    /**
105
     * Register to get updated after any interaction with the datastore
106
     */
107
	@Override
108
    public void unregisterForDataStoreChanges(ICdmEntitySessionEnabled observer) {
109
        CdmPostDataChangeObservableListener.getDefault().unregister(observer);
110
    }
111

    
112

    
113

    
114
	@Override
115
	public void bind() {
116
	    cdmEntitySessionManager.bind(sessionOwner);
117
	}
118
	/* (non-Javadoc)
119
	 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose()
120
	 */
121
	@Override
122
	public void dispose() {
123
		rootEntities.clear();
124
		cdmTransientEntityCacher.dispose();
125
		for(ICdmEntitySessionEnabled observer : changeObservers) {
126
		    CdmPostDataChangeObservableListener.getDefault().unregister(observer);
127
		}
128
		changeObservers.clear();
129
	}
130

    
131

    
132
    /* (non-Javadoc)
133
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
134
     */
135
    @Override
136
    public void addEvent(ICdmBase cdmBase, EventType eventType) {
137
        CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, EventType.UPDATE);
138
        CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce);
139
    }
140

    
141

    
142
    /* (non-Javadoc)
143
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#notify(java.util.Collection, eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType)
144
     */
145
    @Override
146
    public <T extends ICdmBase> void addEvent(Collection <T> cdmBases, EventType eventType) {
147
        for(ICdmBase cdmBase : cdmBases) {
148
            CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, EventType.UPDATE);
149
            CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce);
150
        }
151

    
152
    }
153

    
154
    /* (non-Javadoc)
155
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
156
     */
157
    @Override
158
    public void commit() {
159
        CdmPostDataChangeObservableListener.getDefault().delayedNotify();
160
    }
161

    
162

    
163

    
164

    
165

    
166
}
(2-2/6)