package com.esri.geoevent.solutions.transport.irc.jerklib.tasks; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.esri.geoevent.solutions.transport.irc.jerklib.Session; import com.esri.geoevent.solutions.transport.irc.jerklib.events.IRCEvent.Type; import com.esri.geoevent.solutions.transport.irc.jerklib.listeners.TaskCompletionListener; /** * An impl of the Task interface. This impl also * provides methods for notifications to listeners. * * * @see Session#onEvent(Task) * @see Session#onEvent(com.esri.ges.transport.Irc.jerklib.tasks.Task, com.esri.geoevent.solutions.transport.irc.jerklib.events.IRCEvent.Type...) * @see Type * * @author mohadib * */ public abstract class TaskImpl implements Task { private final List<TaskCompletionListener> listeners = new ArrayList<TaskCompletionListener>(); private boolean canceled; private String name; public TaskImpl(String name) { this.name = name; } /* (non-Javadoc) * @see com.esri.ges.transport.Irc.jerklib.tasks.Task#getName() */ public String getName() { return name; } /* (non-Javadoc) * @see com.esri.ges.transport.Irc.jerklib.tasks.Task#cancel() */ public void cancel() { canceled = true; } /* (non-Javadoc) * @see com.esri.ges.transport.Irc.jerklib.tasks.Task#isCanceled() */ public boolean isCanceled() { return canceled; } /** * Add a listener to be notified by this Task * * @see TaskImpl#taskComplete(Object) * @param listener */ public void addTaskListener(TaskCompletionListener listener) { listeners.add(listener); } /** * remove a listener * * @param listener * @return true if a listener was removed , else false */ public boolean removeTaskListener(TaskCompletionListener listener) { return listeners.remove(listener); } /** * get a list of TaskCompletionListeners * * @return list of listeners */ public List<TaskCompletionListener> getTaskListeners() { return Collections.unmodifiableList(listeners); } /** *Can be called to notifiy listeners * @param result */ protected void taskComplete(Object result) { for (TaskCompletionListener listener : listeners) { listener.taskComplete(result); } } }