package org.lejos.ev3.ldt.actions;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.InvocationTargetException;
import java.rmi.Naming;
import java.util.ArrayList;
import lejos.remote.ev3.RMIMenu;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionDelegate;
import org.eclipse.ui.progress.IProgressService;
import org.lejos.ev3.ldt.util.BrickInfo;
import org.lejos.ev3.ldt.util.Discover;
import org.lejos.ev3.ldt.util.LeJOSEV3Util;
import org.lejos.ev3.ldt.util.ToolStarter;
/**
* Creates a runnable jar file and uploads it to the brick
*
* @see IWorkbenchWindowActionDelegate
* @author Matthias Paul Scholz and Lawrie Griffiths
*
*/
public class UploadAction extends ActionDelegate {
private ISelection _selection;
@Override
public void run(IAction action) {
final ArrayList<File> tmp = new ArrayList<File>();
LeJOSEV3Util.getFilesFromSelection(_selection, tmp);
if (!tmp.isEmpty())
{
// open progress monitor
IWorkbench wb = PlatformUI.getWorkbench();
IProgressService ps = wb.getProgressService();
try {
ps.busyCursorWhile(new IRunnableWithProgress() {
public void run(IProgressMonitor pm) {
uploadFile(pm, tmp);
} // end run
});
} catch (Throwable t) {
// log
LeJOSEV3Util.log(t);
}
}
}
private void uploadFile(IProgressMonitor progressMonitor, ArrayList<File> fileList) {
try {
progressMonitor.beginTask("Uploading files...", IProgressMonitor.UNKNOWN);
try
{
ToolStarter starter = LeJOSEV3Util.getCachedToolStarter();
ArrayList<String> args = new ArrayList<String>();
LeJOSEV3Util.getUploadOpts(args);
BrickInfo[] bricks = Discover.discover();
if (bricks.length == 0) {
LeJOSEV3Util.error("No EV3 Found");
} else {
RMIMenu menu = (RMIMenu)Naming.lookup("//" + bricks[0].getIPAddress() + "/RemoteMenu");
for (File f : fileList) {
args.add(f.getAbsolutePath());
FileInputStream in = new FileInputStream(f);
byte[] data = new byte[(int)f.length()];
in.read(data);
in.close();
menu.uploadFile("/home/lejos/programs/" + f.getName(), data);
}
LeJOSEV3Util.message("Files have been uploaded successfully");
}
}
finally
{
progressMonitor.done();
}
} catch (Throwable t) {
if (t instanceof InvocationTargetException)
t = ((InvocationTargetException)t).getTargetException();
// log
LeJOSEV3Util.error("upload of " + fileList + " failed", t);
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action
* .IAction, org.eclipse.jface.viewers.ISelection)
*/
@Override
public void selectionChanged(IAction action, ISelection selection) {
_selection = selection;
ArrayList<File> tmp = new ArrayList<File>();
LeJOSEV3Util.getFilesFromSelection(selection, tmp);
action.setEnabled(!tmp.isEmpty());
}
}