/*
* DefaultSingleTaskModel.java
*
* Copyright (C) 2010 Leo Osvald <leo.osvald@gmail.com>
*
* This file is part of SGLJ.
*
* SGLJ is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SGLJ is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sglj.swing.task;
import org.sglj.task.Task;
import org.sglj.task.TaskEvent;
import org.sglj.task.TaskListener;
import org.sglj.task.TaskManager;
import org.sglj.task.TaskManagerListener;
/**
* Default implementation of interface {@link SingleTaskModel}.
*
* @author Leo Osvald
* @version 1.05
*/
public class DefaultSingleTaskModel extends AbstractSingleTaskModel {
private static final long serialVersionUID = 1L;
private Task task;
private TaskListener listener;
private TaskManagerListener taskMgrListener;
private TaskManager taskManager;
@Override
public Task getTask() {
return task;
}
@Override
public void setTask(Task task) {
Task oldTask = this.task;
//remove old task
if(oldTask != null)
oldTask.removeTaskListener(listener);
//set new task
if(task != null) {
listener = new TaskListener() {
@Override
public void taskStatusChanged(TaskEvent e) {
fireTaskStatusChanged(e.getTask());
}
@Override
public void taskStateChanged(TaskEvent e) {
fireTaskStateChanged(e.getTask());
if(e.getTask().getState() == Task.TaskState.COMPLETED) {
listener = null;
}
}
@Override
public void taskUpdated(TaskEvent e) {
fireTaskUpdated(e.getTask());
}
};
task.addTaskListener(listener);
}
else {
fireTaskUpdated(task); // XXX ???
}
this.task = task;
//if task actually changed
if(oldTask != task)
fireTaskChanged(task);
}
@Override
public void syncWithManager(TaskManager taskManager) {
//disconnect old manager
if(this.taskManager != null)
this.taskManager.removeTaskManagerListener(taskMgrListener);
//now register as a listener
if(taskManager != null) {
setTask(null);
if(taskMgrListener == null) {
taskMgrListener = new TaskManagerListener() {
@Override
public void taskStatusChanged(TaskEvent e) {
fireTaskStatusChanged(e.getTask());
}
@Override
public void taskStateChanged(TaskEvent e) {
fireTaskStateChanged(e.getTask());
}
@Override
public void taskUpdated(TaskEvent e) {
fireTaskUpdated(e.getTask());
}
@Override
public void taskRemoved(TaskEvent e) {
}
@Override
public void taskAdded(TaskEvent e) {
}
};
}
this.taskManager = taskManager;
taskManager.addTaskManagerListener(taskMgrListener);
}
}
@Override
public TaskManager getManager() {
return taskManager;
}
}