Project

General

Profile

Download (3.13 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2015 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.vaadin.session;
10

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

    
14
import com.vaadin.ui.UI;
15

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

    
23
    public final static String KEY = "key_cdmDataChangeService";
24

    
25
    private final List<ICdmChangeListener> listeners;
26

    
27
    private final List<CdmChangeEvent> currentEvents;
28

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

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

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

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

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

    
68

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

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

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

    
114
    public void dispose() {
115
        listeners.clear();
116
        currentEvents.clear();
117
    }
118
}
(4-4/10)