2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
.common
;
12 import java
.util
.HashSet
;
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
;
24 public class ObservableBase
implements IIoObservable
{
26 private Set
<IIoObserver
> observers
= new HashSet
<IIoObserver
>();
29 * @see eu.etaxonomy.cdm.io.common.IObservable#getObservers()
32 public Set
<IIoObserver
> getObservers() {
37 * @see eu.etaxonomy.cdm.io.common.IIoObservable#countObservers()
40 public int countObservers(){
41 return observers
.size();
44 public void setObservers(Set
<IIoObserver
> observers
) {
45 this.observers
= observers
;
49 * @see eu.etaxonomy.cdm.io.common.IObservable#addObserver(eu.etaxonomy.cdm.io.common.events.IIoObserver)
52 public boolean addObserver(IIoObserver observer
){
53 return this.observers
.add(observer
);
58 * @see eu.etaxonomy.cdm.io.common.IIoObservable#removeObservers()
60 public void removeObservers(){
61 observers
.removeAll(observers
);
65 public void addObservers(Set
<IIoObserver
> newObservers
) {
66 for (IIoObserver observer
: newObservers
){
67 this.observers
.add(observer
);
72 * @see eu.etaxonomy.cdm.io.common.IObservable#removeObserver(eu.etaxonomy.cdm.io.common.events.IIoObserver)
75 public boolean removeObserver(IIoObserver observer
){
76 return this.observers
.remove(observer
);
80 * @see eu.etaxonomy.cdm.io.common.ICdmIO#fire(eu.etaxonomy.cdm.io.common.events.IIoEvent)
82 protected void fire(IIoEvent event
){
83 for (IIoObserver observer
: observers
){
84 observer
.handleEvent(event
);
88 protected void fireWarningEvent(String message
, String dataLocation
, Integer severity
) {
89 fireWarningEvent(message
, dataLocation
, severity
, 1);
92 protected void fireWarningEvent(String message
, String dataLocation
, Integer severity
, int stackDepth
) {
94 StackTraceElement
[] stackTrace
= new Exception().getStackTrace();
95 int lineNumber
= stackTrace
[stackDepth
].getLineNumber();
96 String methodName
= stackTrace
[stackDepth
].getMethodName();
97 String className
= stackTrace
[stackDepth
].getClassName();
98 Class
<?
> declaringClass
;
100 declaringClass
= Class
.forName(className
);
101 } catch (ClassNotFoundException e
) {
102 declaringClass
= this.getClass();
105 IoProblemEvent event
= IoProblemEvent
.NewInstance(declaringClass
, message
, dataLocation
,
106 lineNumber
, severity
, methodName
);
108 //for performance improvement one may read:
109 //http://stackoverflow.com/questions/421280/in-java-how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection
110 // Object o = new SecurityManager().getSecurityContext();