package com.mobilesorcery.sdk.deployment.internal.ui.ftp; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.jface.operation.IRunnableWithProgress; import com.mobilesorcery.sdk.core.MoSyncProject; import com.mobilesorcery.sdk.core.MoSyncTool; import com.mobilesorcery.sdk.deployment.IDeploymentStrategy; import com.mobilesorcery.sdk.deployment.ProjectDeploymentStrategy; import com.mobilesorcery.sdk.profiles.IDeviceFilter; public class DeploymentRunnable implements IRunnableWithProgress { private final IDeploymentStrategy strategy; private final MoSyncProject project; private final File deployFile; private final IDeviceFilter profiles; public DeploymentRunnable(MoSyncProject project, IDeploymentStrategy strategy, IDeviceFilter profiles, File deployFile) { this.project = project; this.strategy = strategy; this.profiles = profiles; this.deployFile = deployFile; } @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { if (deployFile != null) { ProjectDeploymentStrategy pds = new ProjectDeploymentStrategy(project, deployFile); pds.addStrategy(strategy); pds.assignProfiles(strategy, profiles); try { pds.saveToMetaFile(); } catch (Exception e) { throw new InvocationTargetException(e, "Could not save deploy file"); } } try { strategy.deploy(project, Arrays.asList(MoSyncTool.getDefault().getProfileManager(MoSyncTool.DEFAULT_PROFILE_TYPE).getProfiles(profiles)), monitor); } catch (OperationCanceledException e) { // Ignore. } catch (Exception e) { throw new InvocationTargetException(e, e.getMessage()); } } }