/*
* #%L
* gitools-ui-app
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* 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 (at your option) 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/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.app.welcome;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.gitools.api.analysis.IProgressMonitor;
import org.gitools.api.persistence.FileFormat;
import org.gitools.heatmap.format.HeatmapFormat;
import org.gitools.ui.app.actions.file.OpenFromFilesystemBrowseAction;
import org.gitools.ui.app.actions.file.OpenFromGenomeSpaceAction;
import org.gitools.ui.app.actions.help.ShortcutsAction;
import org.gitools.ui.app.commands.CommandLoadFile;
import org.gitools.ui.core.Application;
import org.gitools.ui.core.components.editor.HtmlEditor;
import org.gitools.ui.core.components.wizard.SaveFileWizard;
import org.gitools.ui.core.utils.FileChoose;
import org.gitools.ui.core.utils.FileChooserUtils;
import org.gitools.ui.platform.dialog.ExceptionGlassPane;
import org.gitools.ui.platform.progress.JobRunnable;
import org.gitools.ui.platform.progress.JobThread;
import org.gitools.ui.platform.settings.Settings;
import org.gitools.ui.platform.wizard.WizardDialog;
import org.gitools.utils.HttpUtils;
import org.gitools.utils.progressmonitor.ProgressMonitorInputStream;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
public class WelcomeEditor extends HtmlEditor {
private static final long serialVersionUID = 6851947500231401412L;
public WelcomeEditor() {
super("Welcome", getWelcomeURL());
}
@Override
protected void exception(Exception e) {
ExceptionGlassPane.show(Application.get(), e);
}
@Override
protected void performAction(String name, Map<String, String> params) {
switch (name) {
case "open": {
switch (params.get("ref")) {
case "filesystem":
new OpenFromFilesystemBrowseAction().actionPerformed(new ActionEvent(this, 0, name));
break;
case "genomespace":
new OpenFromGenomeSpaceAction().actionPerformed(new ActionEvent(this, 0, name));
break;
case "shortcuts":
new ShortcutsAction().actionPerformed(new ActionEvent(this, 0, name));
break;
}
break;
}
case "reload":
navigate(getWelcomeURL());
break;
}
}
@Override
protected void performSave(final String href) {
final URL url;
try {
url = new URL(href);
} catch (MalformedURLException e) {
throw new UnsupportedOperationException("Invalid URL '" + href + "'");
}
String fileName = FilenameUtils.getName(url.getFile());
final File file;
if (fileName.endsWith(".heatmap.zip")) {
fileName = fileName.replace(".heatmap.zip", "");
SaveFileWizard wiz = SaveFileWizard.createSimple(
"Save",
fileName,
Settings.get().getLastPath(),
new FileFormat("Heatmap, single file (*.heatmap.zip)", HeatmapFormat.EXTENSION + ".zip", false, false)
);
WizardDialog dlg = new WizardDialog(Application.get(), wiz);
dlg.setVisible(true);
if (dlg.isCancelled()) {
return;
}
file = wiz.getPathAsFile();
} else {
FileChoose choose = FileChooserUtils.selectFile("Save file", Settings.get().getLastPath(), FileChooserUtils.MODE_SAVE);
if (choose == null) {
return;
}
file = choose.getFile();
}
if (file != null) {
JobThread.execute(Application.get(), new JobRunnable() {
@Override
public void run(IProgressMonitor monitor) {
try {
monitor.begin("Downloading file...", HttpUtils.getContentLength(url));
IOUtils.copy(new ProgressMonitorInputStream(monitor, url.openStream()), new FileOutputStream(file));
} catch (IOException e) {
throw new UnsupportedOperationException("Error saving the file");
}
}
});
// Track event
String baseName = FilenameUtils.getBaseName(href);
Application.get().trackEvent("datasets", "save", baseName);
}
}
@Override
protected void performLoad(String href) {
CommandLoadFile loadFile = new CommandLoadFile(href);
// Execute
JobThread.execute(Application.get(), loadFile);
// Track event
String baseName = FilenameUtils.getBaseName(href);
Application.get().trackEvent("datasets", "load", baseName);
}
@Override
public void doVisible() {
}
private static URL getWelcomeURL() {
try {
Proxy proxy = Settings.get().getProxy();
URL url = new URL(Settings.get().getWelcomeUrl() + "?appversion=" + Application.getGitoolsVersion().toString() + "&uuid=" + Settings.get().getUuid());
URLConnection connection = url.openConnection(proxy);
connection.setConnectTimeout(2000);
if (connection.getContentLength() != -1) {
return url;
}
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return WelcomeEditor.class.getResource("/html/welcome.html");
}
}