/*OsmUi is a user interface for Osmosis
Copyright (C) 2011 Verena Käfer, Peter Vollmer, Niklas Schnelle
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.osmui.ui;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableStringConverter;
import de.osmui.model.exceptions.TasksNotCompatibleException;
import de.osmui.model.exceptions.TasksNotInModelException;
import de.osmui.model.osm.TTask;
import de.osmui.model.pipelinemodel.AbstractTask;
import de.osmui.ui.events.TaskSelectedEvent;
import de.osmui.ui.events.TaskSelectedEventListener;
import de.osmui.ui.models.TaskBoxTableModel;
import de.osmui.ui.renderers.TaskBoxCellRenderer;
import de.osmui.util.TaskManager;
import de.osmui.util.exceptions.TaskNameUnknownException;
/**
* @author Niklas Schnelle, Peter Vollmer, Verena Käfer
*
* will be tested by system-tests
*/
public class TaskBox extends JTable implements TaskSelectedEventListener {
private static final long serialVersionUID = -4259689270781114248L;
private final TaskBoxTableModel model;
private TableStringConverter stringConverter;
private AbstractTask selectedTask = null;
public TaskBox(TaskBoxTableModel taskBoxTableModel) {
this.setModel(taskBoxTableModel);
this.setDefaultRenderer(TTask.class, new TaskBoxCellRenderer());
this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if (e.getClickCount() == 2){
if (getSelectedRow() == -1) {
}else{
addSelectedToModel();
}
}
}
});
model = taskBoxTableModel;
/*stringConverter = new TableStringConverter() {
@Override
public String toString(TableModel arg0, int arg1, int arg2) {
TTask task = (TTask) arg0.getValueAt(arg1, arg2);
return task.getName();
}
};
TableRowSorter<TaskBoxTableModel> sorter = new TableRowSorter<TaskBoxTableModel>(
model);
sorter.setStringConverter(stringConverter);
this.setRowSorter(sorter);*/
showCompatibleTasks(null);
}
public void showCompatibleTasks(AbstractTask task) {
if (task != null && task.isConnectable()) {
model.setTasks(TaskManager.getInstance().getCompatibleTasks(
task.getName()));
} else {
model.setTasks(TaskManager.getInstance().getCompatibleTasks(""));
}
//this.getRowSorter().toggleSortOrder(0);
}
@Override
public void TaskSelected(TaskSelectedEvent e) {
if (e.getTask() != null) {
selectedTask = (AbstractTask) e.getTask();
showCompatibleTasks(selectedTask);
} else {
showCompatibleTasks(null);
selectedTask = null;
}
}
public void addTaskToModel(AbstractTask newTask){
if (selectedTask != null && selectedTask.isConnectable()) {
try {
MainFrame.getInstance().getPipeModel()
.addTask(selectedTask, newTask);
} catch (TasksNotCompatibleException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
} catch (TasksNotInModelException e) {
// Shouldn't happen
e.printStackTrace();
}
} else {
MainFrame.getInstance().getPipeModel().addTask(newTask);
}
}
public void addSelectedToModel() {
TTask taskDesc = (TTask) model.getValueAt(
this.convertRowIndexToModel(this.getSelectedRow()), 0);
AbstractTask newTask;
try {
newTask = TaskManager.getInstance().createTask(taskDesc.getName());
} catch (TaskNameUnknownException e) {
// Do nothing
return;
}
addTaskToModel(newTask);
}
}