📄 defaulterrorsink.java
字号:
package com.esri.solutions.jitk.web.error;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
* Acts as a container to store errors. This implementation serves
* as an producer as well, so this object can be for both producing
* and receiving errors.
*
* <p>
* This object will maintain a set of Error Observers. Duplicate
* {@link IErrorObserver} objects will not be allowed.
* </p>
*
* <p>
* This object will not propagate received errors to observers that were added
* after errors have been received. The observers will be notified of
* all new errors received by this object.
* </p>
*/
public class DefaultErrorSink implements IErrorProducer, IErrorSink {
/**
* Set of Error Observers.
*/
private final Set<IErrorObserver> m_observers;
/**
* List of errors
*/
private final List<IError> m_sink;
/**
* Constructs a new <code>DefaultErrorSink</code> object. Internal initialization
* of observers and the error buffer is performed.
*/
public DefaultErrorSink () {
m_observers = new LinkedHashSet<IErrorObserver>();
m_observers.add(this);
m_sink = new ArrayList<IError>();
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.error.IErrorProducer#getObservers()
*/
public List<IErrorObserver> getObservers() {
return new ArrayList<IErrorObserver>(m_observers);
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.error.IErrorProducer#push(com.esri.solutions.jitk.web.error.IError)
*/
public void push(IError error) {
if (error != null) {
for (IErrorObserver observer : m_observers) {
observer.receive(error);
}
}
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.error.IErrorSink#clear()
*/
public void clear() {
synchronized(this) {
m_sink.clear();
}
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.error.IErrorSink#count()
*/
public int count() {
return m_sink.size();
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.error.IErrorSink#export(com.esri.solutions.jitk.web.error.IErrorSinkExporter)
*/
public void export(IErrorSinkExporter exporter) {
if (exporter == null) {
throw new NullPointerException ();
}
exporter.begin();
exporter.setErrors(new ArrayList<IError>(m_sink));
exporter.export();
exporter.end();
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.error.IErrorObserver#receive(com.esri.solutions.jitk.web.error.IError)
*/
public void receive(IError error) {
if (error != null) {
synchronized (this) {
m_sink.add(error);
}
}
}
/**
* Sets the list of {@link IErroObserver} objects that will receive
* errors as they are produced. This list will replace whatever
* observers are currently stored internally. Any errors received before
* an observer is added will not be propagated to the new observer.
*
* @param observers List of {@link IErrorObserver} objects, cannot be
* <code>null</code>.
*
* @throws NullPointerException Thrown if the <code>observers</code>
* argument is <code>null</code>.
*/
public void setObservers (List<IErrorObserver> observers) {
m_observers.clear();
m_observers.add(this);
m_observers.addAll(observers);
}
/**
* Adds an {@link IErrorObserver} object that will receive errors
* as they are produced. Any errors received before an observer is added
* will not be propagated to the new observer.
*
* @param observer New observer to receive errors that are produced,
* cannot be <code>null</code>.
*
* @throws NullPointerException Thrown if the <code>observer</code>
* argument is <code>null</code>.
*/
public void addObserver (IErrorObserver observer) {
if (observer == null) {
throw new NullPointerException ();
}
if (observer != null) {
m_observers.add(observer);
}
}
/**
* Removes an Error Observer. The Error Observer will no longer
* receive any errors produced.
*
* @param observer Observer to be removed, cannot be <code>null</code>.
*/
public void removeObserver (IErrorObserver observer) {
if (observer == null) {
throw new NullPointerException ();
}
m_observers.remove(observer);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -