/*******************************************************************************
* 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.ui.wizards;
import java.text.MessageFormat;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.zend.php.zendserver.deployment.core.debugger.LibraryDeployData;
import org.zend.php.zendserver.deployment.core.targets.TargetsManagerService;
import org.zend.php.zendserver.deployment.core.utils.DeploymentUtils;
import org.zend.php.zendserver.deployment.debug.core.jobs.AbstractLibraryJob;
import org.zend.php.zendserver.deployment.debug.core.jobs.AddLibraryJob;
import org.zend.php.zendserver.deployment.debug.core.jobs.DeployLibraryJob;
import org.zend.php.zendserver.deployment.debug.ui.Messages;
import org.zend.sdklib.target.IZendTarget;
import org.zend.webapi.core.connection.response.ResponseCode;
/**
* @author Wojciech Galanciak, 2013
*
*/
public class LibraryDeploymentUtils {
private AbstractLibraryJob job;
public void openLibraryDeploymentWizard(IProject project, String targetId) {
doOpenLibraryDeploymentWizard(project, targetId);
runDeployment();
}
public void openLibraryDeploymentWizard(LibraryDeployData data) {
doOpenLibraryDeploymentWizard(data);
runDeployment();
}
public void openLibraryDeploymentWizard(IZendTarget target) {
doOpenLibraryDeploymentWizard(target);
runDeployment();
}
private void runDeployment() {
if (job == null)
return;
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
super.done(event);
verifyJobResult(event);
}
});
job.schedule();
}
private void verifyJobResult(IJobChangeEvent event) {
if (event.getResult() == Status.CANCEL_STATUS)
return;
AbstractLibraryJob job = (AbstractLibraryJob) event.getJob();
LibraryDeployData data = job.getData();
if (data.isAddPHPLibrary()) {
Job addJob = new AddLibraryJob(data);
addJob.schedule();
}
ResponseCode code = job.getResponseCode();
if (code != null) {
switch (code) {
case LIBRARY_CONFLICT:
handleConflict(data);
return;
default:
break;
}
}
if (data.getProject() != null) {
DeploymentUtils.updatePreferences(data.getProject(), data.getTargetId(), null);
}
}
private void doOpenLibraryDeploymentWizard(IZendTarget target) {
AbstractLibraryWizard wizard = new DeployTargetWizard(target);
doOpenLibraryDeploymentWizard(wizard);
}
private void doOpenLibraryDeploymentWizard(IProject project, String targetId) {
AbstractLibraryWizard wizard = new LibraryDeploymentWizard(project, targetId);
doOpenLibraryDeploymentWizard(wizard);
}
private void doOpenLibraryDeploymentWizard(LibraryDeployData data) {
AbstractLibraryWizard wizard = new LibraryDeploymentWizard(data);
doOpenLibraryDeploymentWizard(wizard);
}
private void doOpenLibraryDeploymentWizard(final AbstractLibraryWizard wizard) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
job = null;
Shell shell = PlatformUI.getWorkbench().getDisplay().getActiveShell();
WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.create();
if (dialog.open() != Window.OK)
return;
LibraryDeployData data = wizard.getData();
job = new DeployLibraryJob(data);
}
});
}
private void handleConflict(final LibraryDeployData data) {
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
public void run() {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
IZendTarget target = TargetsManagerService.INSTANCE.getTargetManager()
.getTargetById(data.getTargetId());
String message = MessageFormat.format(Messages.LibraryDeploymentUtils_ConflictMessage, data.getName(),
data.getVersion());
if (target != null)
message = MessageFormat.format(Messages.LibraryDeploymentUtils_ConflictMessage2, data.getName(),
data.getVersion(), target.getServerName());
MessageDialog.openError(shell, Messages.LibraryDeploymentWizard_Title, message);
}
});
}
}