/******************************************************************************* * Copyright (c) 2013, 2016 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are 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: * Red Hat Inc. - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.thym.ui.wizard.export; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.List; import org.apache.commons.io.FileUtils; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.thym.core.HybridCore; import org.eclipse.thym.core.platform.AbstractNativeBinaryBuildDelegate; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.dialogs.IOverwriteQuery; public class NativeBinaryExportOperation extends WorkspaceModifyOperation { private List<AbstractNativeBinaryBuildDelegate> delegates; private IOverwriteQuery overwriteQuery; private File destinationDir; public NativeBinaryExportOperation( List<AbstractNativeBinaryBuildDelegate> delegates, File destination, IOverwriteQuery query) { this.delegates = delegates; this.overwriteQuery = query; this.destinationDir = destination; } @Override protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { SubMonitor sm = SubMonitor.convert(monitor); sm.setWorkRemaining(delegates.size()*10); for (AbstractNativeBinaryBuildDelegate delegate : delegates) { if(monitor.isCanceled()){ break; } delegate.setRelease(true); delegate.buildNow(sm.newChild(10)); try { File buildArtifact = delegate.getBuildArtifact(); File destinationFile = new File(destinationDir, buildArtifact.getName()); if(destinationFile.exists()){ String callback = overwriteQuery.queryOverwrite(destinationFile.toString()); if(IOverwriteQuery.NO.equals(callback)){ continue; } if(IOverwriteQuery.CANCEL.equals(callback)){ break; } } File artifact = delegate.getBuildArtifact(); if(artifact.isDirectory()){ FileUtils.copyDirectoryToDirectory(artifact, destinationDir); }else{ FileUtils.copyFileToDirectory(artifact, destinationDir); } sm.done(); } catch (IOException e) { HybridCore.log(IStatus.ERROR, "Error on NativeBinaryExportOperation", e); } } monitor.done(); } }