Project

General

Profile

Download (3.13 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2015 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.cdm.vaadin.session;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14

    
15
import eu.etaxonomy.cdm.vaadin.util.CdmVaadinUtilities;
16

    
17
/**
18
 * @author cmathew
19
 * @date 7 Apr 2015
20
 *
21
 */
22
public class CdmDataChangeService {
23

    
24
    public final static String KEY = "cdmDataChangeService";
25

    
26
    private final List<ICdmChangeListener> listeners;
27

    
28
    private final List<CdmChangeEvent> currentEvents;
29

    
30
    public CdmDataChangeService() {
31
        listeners = new ArrayList<ICdmChangeListener>();
32
        currentEvents = new ArrayList<CdmChangeEvent>();
33
    }
34

    
35
    public void register(ICdmChangeListener listener) {
36
        listeners.add(listener);
37
    }
38

    
39
    public void addEvent(CdmChangeEvent event) {
40
        currentEvents.add(event);
41
    }
42

    
43
    public void fireCurrentChangeEvents(boolean async) {
44
        for(CdmChangeEvent event : currentEvents) {
45
            fireChangeEvent(event,async);
46
        }
47
        currentEvents.clear();
48
    }
49

    
50
    public void fireChangeEvent(CdmChangeEvent event, boolean async) {
51
        switch(event.getAction()) {
52
        case Create:
53
            fireCreateChangeEvent(event, async);
54
            break;
55
        case Update:
56
            fireUpdateChangeEvent(event, async);
57
            break;
58
        case Delete:
59
            fireDeleteChangeEvent(event, async);
60
            break;
61
        default:
62
            break;
63
        }
64
    }
65

    
66

    
67
    public void fireCreateChangeEvent(final CdmChangeEvent event, boolean async) {
68
        for(final ICdmChangeListener listener : listeners) {
69
            if(async) {
70
                CdmVaadinUtilities.asyncExec(new Runnable() {
71
                    @Override
72
                    public void run() {
73
                        listener.onCreate(event);
74
                    }
75
                });
76
            } else {
77
                listener.onCreate(event);
78
            }
79
        }
80
    }
81

    
82
    public void fireUpdateChangeEvent(final CdmChangeEvent event, boolean async) {
83
        for(final ICdmChangeListener listener : listeners) {
84
            if(async) {
85
                CdmVaadinUtilities.asyncExec(new Runnable() {
86
                    @Override
87
                    public void run() {
88
                        listener.onUpdate(event);
89
                    }
90
                });
91
            } else {
92
                listener.onUpdate(event);
93
            }
94
        }
95
    }
96

    
97
    public void fireDeleteChangeEvent(final CdmChangeEvent event, boolean async) {
98
        for(final ICdmChangeListener listener : listeners) {
99
            if(async) {
100
                CdmVaadinUtilities.asyncExec(new Runnable() {
101
                    @Override
102
                    public void run() {
103
                        listener.onDelete(event);
104
                    }
105
                });
106
            } else {
107
                listener.onDelete(event);
108
            }
109
        }
110
    }
111

    
112
    public void dispose() {
113
        listeners.clear();
114
        currentEvents.clear();
115
    }
116
}
(2-2/3)