/******************************************************************************* * Copyright (c) 2013 Cloud Bees, Inc. * All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cloud Bees, Inc. - initial API and implementation *******************************************************************************/ package com.cloudbees.eclipse.ui.wizard; import java.lang.reflect.InvocationTargetException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.IWizardContainer; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import com.cloudbees.eclipse.core.CloudBeesException; import com.cloudbees.eclipse.core.JenkinsService; import com.cloudbees.eclipse.core.domain.JenkinsInstance; import com.cloudbees.eclipse.core.jenkins.api.JenkinsInstanceResponse; import com.cloudbees.eclipse.core.jenkins.api.JenkinsJobsResponse; import com.cloudbees.eclipse.ui.CloudBeesUIPlugin; public class CBWizardSupport { public static JenkinsInstance[] getJenkinsInstances(final IWizardContainer container) throws Exception { JenkinsInstance[] result = null; final List<JenkinsInstance> instances = new ArrayList<JenkinsInstance>(); final Failure<CloudBeesException> failiure = new Failure<CloudBeesException>(); IRunnableWithProgress operation = new IRunnableWithProgress() { public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { monitor.beginTask("Fetching Jenkins instances", 0); CloudBeesUIPlugin plugin = CloudBeesUIPlugin.getDefault(); monitor.subTask("loading local Jenkins instances..."); List<JenkinsInstance> manualInstances = plugin.loadManualJenkinsInstances(); monitor.subTask("loading DEV@cloud Jenkins instances..."); List<JenkinsInstance> cloudInstances = plugin.loadDevAtCloudInstances(monitor); instances.addAll(manualInstances); instances.addAll(cloudInstances); } catch (CloudBeesException e) { failiure.cause = e; } } }; try { container.run(true, false, operation); result = new JenkinsInstance[instances.size()]; instances.toArray(result); } catch (Exception e) { if (failiure.cause != null) { throw failiure.cause; } throw e; } return result; } public static List<JenkinsJobsResponse.Job> getJenkinsJobs(final IWizardContainer container, final JenkinsInstance instance) throws Exception { final CloudBeesUIPlugin plugin = CloudBeesUIPlugin.getDefault(); final JenkinsService service = plugin.getJenkinsServiceForUrl(instance.url); final List<JenkinsJobsResponse.Job> jobsList = new ArrayList<JenkinsJobsResponse.Job>(); final Failure<CloudBeesException> failiure = new Failure<CloudBeesException>(); IRunnableWithProgress operation = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { String jobName = MessageFormat.format("Requesting {0} Jenkins jobs...", instance.username); monitor.beginTask(jobName, 0); monitor.subTask("Requesting Jenkins instance..."); JenkinsInstanceResponse response = service.getInstance(monitor); monitor.subTask("Requesting Jenkins job list..."); JenkinsJobsResponse jobs = service.getJobs(response.viewUrl, monitor); monitor.subTask("Processing jobs result"); jobsList.addAll(Arrays.asList(jobs.jobs)); } catch (CloudBeesException e) { failiure.cause = e; } finally { monitor.done(); } } }; try { container.run(true, false, operation); return jobsList; } catch (Exception e) { if (failiure.cause != null) { throw failiure.cause; } throw e; } } public static IStructuredSelection getCurrentSelection() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { ISelection selection = window.getSelectionService().getSelection(); if (selection instanceof IStructuredSelection) { return (IStructuredSelection) selection; } } return StructuredSelection.EMPTY; } public static void makeJenkinsJob(final String configXML, final JenkinsService jenkinsService, final String jobName, final IWizardContainer container) throws Exception { final Failure<CloudBeesException> failiure = new Failure<CloudBeesException>(); IRunnableWithProgress operation = new IRunnableWithProgress() { public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { monitor.beginTask("Creating new Jenkins job...", 0); jenkinsService.createJenkinsJob(jobName, configXML, monitor); } catch (CloudBeesException e) { failiure.cause = e; } } }; try { container.run(true, false, operation); } catch (Exception e) { if (failiure.cause != null) { throw failiure.cause; } throw e; } } }