package controller;
import gui.CheckListItem;
import gui.ConvertTab;
import gui.ErrorDialog;
import gui.GUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import javax.swing.AbstractButton;
import javax.swing.JFileChooser;
import javax.swing.JList;
import model.GenomizerModel;
import util.ExperimentData;
import util.FileData;
import util.RequestException;
public class ConvertTabController {
GUI view;
GenomizerModel model;
private boolean deletedProcessFiles = false;
private int count = 0;
/**
* Constructor..
*
* @param view
* @param model
* @param fileChooser
*/
public ConvertTabController(GUI view, GenomizerModel model,
JFileChooser fileChooser) {
this.view = view;
this.model = model;
ConvertTab ct = view.getConvertTab();
ct.convertSelectedButtonListener(ConvertSelectedFileListener());
ct.deleteSelectedButtonListener(DeleteSelectedFileListener());
ct.removeAllConvertedFileListener(RemoveAllConvertedFileListener());
fileListAddMouseListener(view.getConvertTab().getFileList());
}
/**
*
* @return
*/
public ActionListener ConvertSelectedFileListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread() {
@Override
public void run() {
// TODO Skicka in filedata arrayen
String toformat = null;
ArrayList<CheckListItem> selectedFiles = view
.getConvertTab().getFilesToConvert();
Iterator<CheckListItem> it = selectedFiles.iterator();
for (Enumeration<AbstractButton> buttons = view
.getConvertTab().radioGroupTo.getElements(); buttons
.hasMoreElements();) {
AbstractButton button = buttons.nextElement();
if (button.isSelected()) {
toformat = button.getText();
}
}
while (it.hasNext()) {
CheckListItem data = it.next();
try {
if (model.convertFile(data.fileId(),toformat.toLowerCase())) {
view.getConvertTab().addConvertedFile(
data.getfile().filename.substring(
0, data.getfile().filename
.length() - 3)
+ toformat.toLowerCase());
view.setStatusPanel(data.getfile().filename
.substring(0,
data.getfile().filename
.length() - 3)
+ toformat.toLowerCase()
+ " was created");
view.setStatusPanelColor("success");
}
} catch (RequestException e) {
new ErrorDialog("Convert", e).showDialog();
}
}
// view.setConvertFileList(selectedFiles);
};
}.start();
}
};
}
public ActionListener DeleteSelectedFileListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread() {
@Override
public void run() {
ArrayList<FileData> markedFiles = view.getConvertTab()
.getAllMarkedFiles();
ArrayList<ExperimentData> exData = view.getConvertTab()
.getFileInfo();
if (exData != null && markedFiles != null) {
for (ExperimentData data : exData) {
data.files.removeAll(markedFiles);
}
view.getConvertTab().setConvertButtonDisabled();
view.getConvertTab().setDeleteButtonDisabled();
view.getConvertTab().setAllButtonsNotSelected();
view.getConvertTab().setFileInfo(exData);
deletedProcessFiles = true;
}
};
}.start();
}
};
}
public ActionListener RemoveAllConvertedFileListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread() {
@Override
public void run() {
view.getConvertTab().emptyConvertedFilesList();
};
}.start();
}
};
}
private void fileListAddMouseListener(JList fileList) {
view.getConvertTab().setCount(0);
fileList.addMouseListener(new MouseAdapter() {
String species = "";
String fileType1 = "";
String fileType2 = "";
ArrayList<String> fileTypeList = null;
@Override
public void mouseClicked(MouseEvent event) {
JList list = (JList) event.getSource();
if (deletedProcessFiles) {
species = "";
view.getConvertTab().setCount(0);
view.getConvertTab().resetCurrentSelectedFileType();
}
if (list.getModel().getSize() > 0) {
int index = list.locationToIndex(event.getPoint());
CheckListItem item = (CheckListItem) list.getModel()
.getElementAt(index);
// System.out.println("listans storlek = " +
// list.getModel().getSize());
String fileName = item.getfile().getName().toUpperCase();
fileType1 = fileName.substring(fileName.lastIndexOf(".") + 1);
if (view.getConvertTab().getCount() == 0) {
fileType2 = "";
view.getConvertTab().resetCurrentSelectedFileType();
}
if (fileType2.equals("")
&& view.getConvertTab().getCount() == 0) {
fileName = item.getfile().getName().toUpperCase();
fileType2 = fileName.substring(fileName
.lastIndexOf(".") + 1);
}
// OBS vill använda och sätta alla checkboxes som inte
// går att konvertera ifrån till not enabled!
fileTypeList = view.getConvertTab()
.getPossibleConvertFromFileTypes();
if (fileType1.equals(fileType2)) {
view.getConvertTab().setCurrentSelectedFileType(
fileType1);
item.setSelected(!item.isSelected());
if (item.isSelected()) {
view.getConvertTab().setCount(
view.getConvertTab().getCount() + 1);
} else {
view.getConvertTab().setCount(
view.getConvertTab().getCount() - 1);
}
}
if (view.getConvertTab().getCount() == 0) {
view.getConvertTab().setAllButtonsNotSelected();
view.getConvertTab().setConvertButtonDisabled();
view.getConvertTab().setDeleteButtonDisabled();
} else {
view.getConvertTab().setAllFromButtonsEnabled();
// view.getConvertTab().setConvertButtonEnabled();
view.getConvertTab().setDeleteButtonEnabled();
}
deletedProcessFiles = false;
list.repaint(list.getCellBounds(index, index));
}
}
});
}
}