package org.isatools.isacreator.gs;
import org.genomespace.datamanager.core.GSFileMetadata;
import org.isatools.isacreator.gs.gui.GSFileChooser;
import org.isatools.isacreator.gs.gui.GSSavingWindow;
import org.isatools.isacreator.gui.ISAcreator;
import org.isatools.isacreator.gui.io.exportisa.OutputISAFilesFromGUI;
import org.isatools.isacreator.gui.menu.ISAcreatorMenu;
import org.isatools.isacreator.managers.ApplicationManager;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
/**
* Created by the ISATeam.
* User: agbeltran
* Date: 20/11/2012
* Time: 00:09
*
* @author <a href="mailto:alejandra.gonzalez.beltran@gmail.com">Alejandra Gonzalez-Beltran</a>
*/
public class GSSaveAction extends AbstractAction {
public static final int SAVE_ONLY = 0;
public static final int SAVE_AS = 1;
private int type;
private Timer closeWindowTimer;
private ISAcreator frame = null;
private ISAcreatorMenu menu = null;
private GSDataManager gsDataManager = null;
private OutputISAFilesFromGUI isatabExporter = null;
/**
* SaveAction constructor.
*
* @param type - type of screen resize to be performed, either full screen or default screen...
* @param text - Text to be displayed in component
* @param icon - Icon to be displayed in component
* @param desc - description of the components purpose
* @param mnemonic - shortcut key to be used!
*/
public GSSaveAction(int type, String text, ImageIcon icon, String desc,
Integer mnemonic, ISAcreator f, ISAcreatorMenu m) {
super(text, icon);
this.type = type;
putValue(SHORT_DESCRIPTION, desc);
putValue(MNEMONIC_KEY, mnemonic);
closeWindowTimer = new Timer(500, new CloseEvent());
menu = m;
frame = f;
GSIdentityManager gsIdentityManager = GSIdentityManager.getInstance();
gsDataManager = gsIdentityManager.getGsDataManager();
isatabExporter = new OutputISAFilesFromGUI(ApplicationManager.getCurrentApplicationInstance());
}
public void actionPerformed(ActionEvent actionEvent) {
final GSSavingWindow savingProgressIndicator = new GSSavingWindow();
try {
isatabExporter.saveISAFiles(false, ApplicationManager.getCurrentApplicationInstance().getDataEntryEnvironment().getInvestigation());
if (type == SAVE_ONLY && ApplicationManager.getCurrentRemoteISAtabFolder() != null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
savingProgressIndicator.createGUI();
}
});
Thread saveThread = new Thread(new Runnable() {
public void run() {
//save all the local files into GS
String localISATABFolder = ApplicationManager.getCurrentLocalISAtabFolder();
File folder = new File(localISATABFolder);
File[] files = folder.listFiles();
String folderPath = ApplicationManager.getCurrentRemoteISAtabFolder();
GSFileMetadata folderMetadata = gsDataManager.getFileMetadata(folderPath);
for (File file : files) {
updateProgressIndicator(savingProgressIndicator, file);
gsDataManager.saveFile(file, folderMetadata);
}
hideSaveProgressWindow(savingProgressIndicator);
}
});
saveThread.start();
} else {
final GSFileChooser gsFileChooser = new GSFileChooser(menu, GSFileChooser.GSFileChooserMode.SAVE);
gsFileChooser.addPropertyChangeListener("selectedFileMetadata", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
savingProgressIndicator.createGUI();
}
});
Thread saveThread = new Thread(new Runnable() {
public void run() {
GSFileMetadata fileMetadata = gsFileChooser.getSelectedFileMetadata();
if (fileMetadata == null)
return;
System.out.println("fileMetadata===>" + fileMetadata);
//save all the local files into GS
String localISATABFolder = ApplicationManager.getCurrentLocalISAtabFolder();
File folder = new File(localISATABFolder);
File[] files = folder.listFiles();
for (File file : files) {
updateProgressIndicator(savingProgressIndicator, file);
gsDataManager.saveFile(file, fileMetadata);
}
ApplicationManager.setCurrentRemoteISATABFolder(fileMetadata.getPath());
hideSaveProgressWindow(savingProgressIndicator);
}
});
saveThread.start();
}
});
gsFileChooser.showOpenDialog();
}
} finally {
hideSaveProgressWindow(savingProgressIndicator);
}
}
private void hideSaveProgressWindow(GSSavingWindow savingProgressIndicator) {
savingProgressIndicator.setVisible(false);
}
private void updateProgressIndicator(final GSSavingWindow savingProgressIndicator, final File file) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
savingProgressIndicator.fireUpdateToStatus("Uploading " + file.getName());
}
});
}
class CloseEvent implements ActionListener {
public void actionPerformed(ActionEvent event) {
doEvent();
if (closeWindowTimer != null) {
closeWindowTimer.stop();
}
}
private void doEvent() {
/*
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (outputISATABFromGUI.isShouldShowIncorrectOrderGUI()) {
Map<String, List<String>> report = new HashMap<String, List<String>>();
// highlight columns in each affected spreadsheet
for (Spreadsheet s : outputISATABFromGUI.getErrorSheets()) {
// highlight the columns in the spreadsheet
report.putAll(s.getTableConsistencyChecker().getErrorReport());
Map<Integer, Color> colorcoding = new HashMap<Integer, Color>();
for (IncorrectColumnPositioning icor : s.getTableConsistencyChecker().getRecords()) {
colorcoding.putAll(icor.getColumnColors());
}
s.highlightSpecificColumns(colorcoding);
}
// show IncorrectColumnOrderGUI
incorrectGUI = new IncorrectColumnOrderGUI(report);
incorrectGUI.setLocation((getX() + getWidth()) / 2 - (incorrectGUI.getWidth() / 2), (getY() + getHeight()) / 2 - (incorrectGUI.getHeight() / 2));
incorrectGUI.createGUI();
} else {
// IF EVERYTHING IS OK, RESET ROW COLORS!
for (Spreadsheet s : outputISATABFromGUI.getAllSheets()) {
s.setRowsToDefaultColor();
}
// proceed to subsequent tasks...
switch (type) {
case SAVE_MAIN:
saveProfilesAndGoToMain();
break;
case SAVE_EXIT:
saveProfilesAndExit();
break;
default:
//
}
}
}
});
*/
} //doEvent
} //CloseEvent
}