AT: committing CDMLIB to Branch post Merge
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / common / ObservableBase.java
1 /**
2 * Copyright (C) 2007 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
10 package eu.etaxonomy.cdm.io.common;
11
12 import java.util.HashSet;
13 import java.util.Set;
14
15 import eu.etaxonomy.cdm.io.common.events.IIoEvent;
16 import eu.etaxonomy.cdm.io.common.events.IIoObserver;
17 import eu.etaxonomy.cdm.io.common.events.IoProblemEvent;
18
19 /**
20 * @author a.mueller
21 * @created 30.03.2012
22 *
23 */
24 public class ObservableBase implements IIoObservable {
25
26 private Set<IIoObserver> observers = new HashSet<IIoObserver>();
27
28 /* (non-Javadoc)
29 * @see eu.etaxonomy.cdm.io.common.IObservable#getObservers()
30 */
31 @Override
32 public Set<IIoObserver> getObservers() {
33 return observers;
34 }
35
36 /* (non-Javadoc)
37 * @see eu.etaxonomy.cdm.io.common.IIoObservable#countObservers()
38 */
39 @Override
40 public int countObservers(){
41 return observers.size();
42 }
43
44 public void setObservers(Set<IIoObserver> observers) {
45 this.observers = observers;
46 }
47
48 /* (non-Javadoc)
49 * @see eu.etaxonomy.cdm.io.common.IObservable#addObserver(eu.etaxonomy.cdm.io.common.events.IIoObserver)
50 */
51 @Override
52 public boolean addObserver(IIoObserver observer){
53 return this.observers.add(observer);
54 }
55
56
57 /* (non-Javadoc)
58 * @see eu.etaxonomy.cdm.io.common.IIoObservable#removeObservers()
59 */
60 public void removeObservers(){
61 observers.removeAll(observers);
62 }
63
64 @Override
65 public void addObservers(Set<IIoObserver> newObservers) {
66 for (IIoObserver observer : newObservers){
67 this.observers.add(observer);
68 }
69 }
70
71 /* (non-Javadoc)
72 * @see eu.etaxonomy.cdm.io.common.IObservable#removeObserver(eu.etaxonomy.cdm.io.common.events.IIoObserver)
73 */
74 @Override
75 public boolean removeObserver(IIoObserver observer){
76 return this.observers.remove(observer);
77 }
78
79 /* (non-Javadoc)
80 * @see eu.etaxonomy.cdm.io.common.ICdmIO#fire(eu.etaxonomy.cdm.io.common.events.IIoEvent)
81 */
82 protected void fire(IIoEvent event){
83 for (IIoObserver observer: observers){
84 observer.handleEvent(event);
85 }
86 }
87
88 protected void fireWarningEvent(String message, String dataLocation, Integer severity) {
89 fireWarningEvent(message, dataLocation, severity, 1);
90 }
91
92 protected void fireWarningEvent(String message, String dataLocation, Integer severity, int stackDepth) {
93 stackDepth++;
94 StackTraceElement[] stackTrace = new Exception().getStackTrace();
95 int lineNumber = stackTrace[stackDepth].getLineNumber();
96 String methodName = stackTrace[stackDepth].getMethodName();
97
98 IoProblemEvent event = IoProblemEvent.NewInstance(this.getClass(), message, dataLocation,
99 lineNumber, severity, methodName);
100
101 //for performance improvement one may read:
102 //http://stackoverflow.com/questions/421280/in-java-how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection
103 // Object o = new SecurityManager().getSecurityContext();
104
105
106 fire(event);
107 }
108
109 }