/******************************************************************************* * Copyright (c) 2013 Zend Technologies Ltd. * 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 *******************************************************************************/ package org.zend.php.zendserver.deployment.debug.core.jobs; import java.io.File; import java.io.IOException; import java.text.MessageFormat; import java.util.List; import org.apache.commons.io.FileUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.zend.php.zendserver.deployment.core.debugger.LibraryDeployData; import org.zend.php.zendserver.deployment.core.descriptor.DescriptorContainerManager; import org.zend.php.zendserver.deployment.core.sdk.EclipseMappingModelLoader; import org.zend.php.zendserver.deployment.core.sdk.EclipseVariableResolver; import org.zend.php.zendserver.deployment.core.sdk.SdkStatus; import org.zend.php.zendserver.deployment.core.sdk.StatusChangeListener2; import org.zend.php.zendserver.deployment.core.utils.LibraryUtils; import org.zend.php.zendserver.deployment.debug.core.Activator; import org.zend.php.zendserver.deployment.debug.core.Messages; import org.zend.sdklib.application.ZendLibrary; import org.zend.webapi.core.connection.data.LibraryInfo; import org.zend.webapi.core.connection.data.LibraryList; import org.zend.webapi.core.connection.data.LibraryVersion; import org.zend.webapi.core.connection.data.LibraryVersions; import org.zend.webapi.core.connection.response.ResponseCode; import org.zend.webapi.internal.core.connection.exception.WebApiCommunicationError; /** * Job responsible for deploying PHP Library to selected Zend Target. * * @author Wojciech Galanciak, 2013 * */ public class DeployLibraryJob extends AbstractLibraryJob { public DeployLibraryJob(LibraryDeployData data) { super(Messages.DeployLibraryJob_Name, data); } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime. * IProgressMonitor) */ public IStatus run(IProgressMonitor monitor) { try { String taskName = MessageFormat.format(Messages.DeployLibraryJob_TaskName, getData().getName(), getData().getVersion()); monitor.beginTask(taskName, IProgressMonitor.UNKNOWN); StatusChangeListener2 listener = new StatusChangeListener2(monitor); ZendLibrary lib = new ZendLibrary(new EclipseMappingModelLoader()); lib.addStatusChangeListener(listener); lib.setVariableResolver(new EclipseVariableResolver()); monitor.subTask(Messages.DeployLibraryJob_CheckingLibraryVersionSubTask_Name); if (isLibraryVersionAvailable(lib, data)) { this.responseCode = ResponseCode.LIBRARY_CONFLICT; return Status.OK_STATUS; } if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } monitor.subTask(Messages.DeployLibraryJob_PreparingDeploymenySubTask_Name); if ((data.isZpkPackage() && data.getRoot().getName().endsWith(".zpk")) //$NON-NLS-1$ || new File(data.getRoot(), DescriptorContainerManager.DESCRIPTOR_PATH).exists()) { lib.deploy(data.getRoot().getAbsolutePath(), data.getTargetId(), data.isZpkPackage()); } else { try { File root = LibraryUtils.getTemporaryDescriptor(data.getName(), data.getVersion()); lib.deploy(data.getRoot().getAbsolutePath(), root.getAbsolutePath(), data.getTargetId(), data.isZpkPackage()); FileUtils.deleteDirectory(root); } catch (IOException e) { Activator.log(e); return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.DeployLibraryJob_TemporaryDeploymentDescriptor_Error, e); } } Throwable exception = listener.getStatus().getThrowable(); if (exception instanceof WebApiCommunicationError) { return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.DeployLibraryJob_ConnectionRefused_Error, exception); } return new SdkStatus(listener.getStatus()); } finally { monitor.done(); } } private boolean isLibraryVersionAvailable(ZendLibrary zendLibrary, LibraryDeployData deployData) { LibraryList list = zendLibrary.getStatus(deployData.getTargetId()); if (list == null) return false; List<LibraryInfo> libs = list.getLibrariesInfo(); for (LibraryInfo libraryInfo : libs) { String name = libraryInfo.getLibraryName(); if (!name.equals(deployData.getName())) continue; LibraryVersions libraryVersions = libraryInfo.getLibraryVersions(); if (libraryVersions == null) continue; List<LibraryVersion> libVersions = libraryVersions.getVersions(); for (LibraryVersion libraryVersion : libVersions) { String version = libraryVersion.getVersion(); if (version.equals(deployData.getVersion())) return true; } } return false; } }