package io.sloeber.ui.actions; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import io.sloeber.core.api.BoardsManager; import io.sloeber.core.api.Sketch; import io.sloeber.ui.Activator; import io.sloeber.ui.Messages; import io.sloeber.ui.helpers.MyPreferences; import io.sloeber.ui.listeners.ProjectExplorerListener; class UploadJobHandler extends Job { IProject myBuildProject = null; public UploadJobHandler(IProject buildProject) { super(Messages.ArduinoUploadProjectHandler_Upload_for_project + buildProject.getName()); this.myBuildProject = buildProject; } @Override protected IStatus run(IProgressMonitor monitor) { if (MyPreferences.getBuildBeforeUploadOption()) { boolean success = Sketch.verify(this.myBuildProject, monitor); if (!success) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { Shell theShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MessageBox dialog = new MessageBox(theShell, SWT.ICON_QUESTION | SWT.OK); dialog.setText(Messages.ArduinoUploadProjectHandler_Build_failed); dialog.setMessage(Messages.ArduinoUploadProjectHandler_Build_failed_so_no_upload); dialog.open(); } }); } } Sketch.upload(UploadJobHandler.this.myBuildProject); return Status.OK_STATUS; } } /** * This is a handler to connect the plugin.xml to the code for uploading code to * arduino teensy .. * * @author jan * */ public class UploadProjectHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { if (!BoardsManager.isReady()) { Activator.log(new Status(IStatus.ERROR, Activator.getId(), Messages.pleaseWaitForInstallerJob, null)); return null; } IProject SelectedProjects[] = ProjectExplorerListener.getSelectedProjects(); switch (SelectedProjects.length) { case 0: Activator.log(new Status(IStatus.ERROR, Activator.getId(), Messages.Handler_No_project_found)); break; case 1: IProject project = SelectedProjects[0]; uploadProject(project); break; default: Activator.log(new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoUploadProjectHandler_Multiple_projects_found + Integer.toString(SelectedProjects.length) + Messages.ArduinoUploadProjectHandler_The_Names_Are + SelectedProjects.toString())); } return null; } public static void uploadProject(IProject project) { PlatformUI.getWorkbench().saveAllEditors(false); Job mBuildJob = new UploadJobHandler(project); mBuildJob.setPriority(Job.INTERACTIVE); mBuildJob.schedule(); } }