/*******************************************************************************
* 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.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.internal.core.UserLibraryManager;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.php.internal.core.PHPLanguageToolkit;
import org.zend.php.zendserver.deployment.core.debugger.LibraryDeployData;
import org.zend.php.zendserver.deployment.core.debugger.LibraryDeploymentAttributes;
import org.zend.php.zendserver.deployment.core.descriptor.DescriptorContainerManager;
import org.zend.php.zendserver.deployment.core.descriptor.IDeploymentDescriptor;
import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorContainer;
import org.zend.php.zendserver.deployment.core.utils.DeploymentUtils;
import org.zend.php.zendserver.deployment.debug.ui.Activator;
import org.zend.php.zendserver.deployment.debug.ui.Messages;
import org.zend.sdklib.target.IZendTarget;
/**
* @author Wojciech Galanciak, 2013
*
*/
@SuppressWarnings("restriction")
public class LibraryDeploymentWizard extends AbstractLibraryWizard {
private LibraryConfigurationPage configPage;
public LibraryDeploymentWizard(IProject project, String targetId) {
super();
init(project, targetId);
}
public LibraryDeploymentWizard(LibraryDeployData data) {
super();
init(data);
}
/*
* (non-Javadoc)
*
* @see
* org.zend.php.zendserver.deployment.debug.ui.wizards.DeploymentWizard#
* addPages()
*/
public void addPages() {
this.configPage = new LibraryConfigurationPage(getData());
addPage(configPage);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
public boolean performFinish() {
setData(configPage.getData());
String[] names = DLTKCore.getUserLibraryNames(PHPLanguageToolkit.getDefault());
for (String name : names) {
if (name.equals(getData().getName())) {
try {
getContainer().run(true, false, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
monitor.beginTask(Messages.BuildpathContainerWizard_InitJob, IProgressMonitor.UNKNOWN);
try {
DLTKCore.getBuildpathContainer(
new Path(DLTKCore.USER_LIBRARY_CONTAINER_ID).append(UserLibraryManager
.makeLibraryName(getData().getName(), PHPLanguageToolkit.getDefault())),
createPlaceholderProject());
} catch (ModelException e) {
Activator.log(e);
}
}
});
} catch (InvocationTargetException e) {
Activator.log(e);
} catch (InterruptedException e) {
Activator.log(e);
}
}
}
saveSettings(getData());
return true;
}
protected void init(IProject project, String targetId) {
setData(createDefaultData(project, targetId));
setWindowTitle(Messages.LibraryDeploymentWizard_Title);
setDefaultPageImageDescriptor(Activator.getImageDescriptor(Activator.IMAGE_WIZBAN_DEPLOY_LIBRARY));
}
private void init(LibraryDeployData data) {
setData(data);
setWindowTitle(Messages.LibraryDeploymentWizard_Title);
setDefaultPageImageDescriptor(Activator.getImageDescriptor(Activator.IMAGE_WIZBAN_DEPLOY_LIBRARY));
}
private LibraryDeployData createDefaultData(IProject project, String targetId) {
IResource res = project.findMember(DescriptorContainerManager.DESCRIPTOR_PATH);
IDescriptorContainer model = DescriptorContainerManager.getService().openDescriptorContainer((IFile) res);
IDeploymentDescriptor descriptor = model.getDescriptorModel();
LibraryDeployData data = new LibraryDeployData();
data.setName(descriptor.getName());
data.setVersion(descriptor.getReleaseVersion());
data.setRoot(project.getLocation().toFile());
data.setProject(project);
if (targetId == null) {
setTarget(data, project);
} else {
data.setTargetId(targetId);
}
return data;
}
private void setTarget(LibraryDeployData data, IProject project) {
IZendTarget target = DeploymentUtils.getTargetFromPreferences(project.getName());
if (target != null) {
data.setTargetId(target.getId());
}
}
protected void saveSettings(LibraryDeployData data) {
IDialogSettings settings = getDialogSettings();
if (settings != null) {
settings.put(LibraryDeploymentAttributes.TARGET_ID.getName(), data.getTargetId());
if (data.isEnableAddLibrary()) {
settings.put(LibraryDeploymentAttributes.ADD_LIBRARY.getName(), data.isAddPHPLibrary());
}
}
}
private static IScriptProject createPlaceholderProject() {
String name = "####internal"; //$NON-NLS-1$
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
while (true) {
IProject project = root.getProject(name);
if (!project.exists()) {
return DLTKCore.create(project);
}
name += '1';
}
}
}