Project

General

Profile

Download (3.14 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 com.vaadin.ui.UI;
16

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

    
24
    public final static String KEY = "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
        try {
45
            for(CdmChangeEvent event : currentEvents) {
46
                fireChangeEvent(event,async);
47
            }
48
        } finally {
49
            currentEvents.clear();
50
        }
51
    }
52

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

    
69

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

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

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

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