minor
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / cdm / api / application / CdmDataChangeService.java
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.api.application;
10
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Set;
15
16 /**
17 * @author cmathew
18 * @date 18 Jun 2015
19 */
20 public class CdmDataChangeService implements ICdmDataChangeService {
21
22 protected final Set<ICdmChangeListener> listeners;
23
24 private final List<CdmChangeEvent> currentEvents;
25
26 public CdmDataChangeService() {
27 listeners = new HashSet<ICdmChangeListener>();
28 currentEvents = new ArrayList<CdmChangeEvent>();
29 }
30
31 @Override
32 public void register(ICdmChangeListener listener) {
33 listeners.add(listener);
34 }
35
36 @Override
37 public void unregister(ICdmChangeListener listener) {
38 listeners.remove(listener);
39 }
40
41 @Override
42 public void addEvent(CdmChangeEvent event) {
43 currentEvents.add(event);
44 }
45
46 @Override
47 public void fireCurrentChangeEvents(boolean async) {
48 try {
49 for(CdmChangeEvent event : currentEvents) {
50 fireChangeEvent(event,async);
51 }
52 } finally {
53 currentEvents.clear();
54 }
55 }
56
57 @Override
58 public void fireChangeEvent(final CdmChangeEvent event, boolean async) {
59
60 for(final ICdmChangeListener listener : listeners) {
61 listener.onChange(event);
62 }
63 }
64
65 @Override
66 public void clear() {
67 listeners.clear();
68 currentEvents.clear();
69 }
70 }