/*******************************************************************************
* Copyright (c) 2014 Zend Technologies.
* All rights reserved. This program and the accompanying materials
* are the copyright of Zend Technologies and is protected under
* copyright laws of the United States.
* You must not copy, adapt or redistribute this document for
* any use.
*
*******************************************************************************/
package org.zend.php.zendserver.deployment.ui.zendserver;
import java.net.MalformedURLException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.php.internal.debug.core.debugger.DebuggerSettingsManager;
import org.eclipse.php.internal.debug.core.debugger.IDebuggerSettings;
import org.eclipse.php.internal.debug.core.debugger.IDebuggerSettingsWorkingCopy;
import org.eclipse.php.internal.debug.core.zend.debugger.ZendDebuggerConfiguration;
import org.eclipse.php.internal.debug.core.zend.debugger.ZendDebuggerSettingsConstants;
import org.eclipse.php.internal.server.core.Server;
import org.eclipse.php.internal.server.core.manager.ServersManager;
import org.eclipse.php.internal.ui.wizards.CompositeFragment;
import org.eclipse.php.internal.ui.wizards.WizardControlWrapper;
import org.eclipse.php.internal.ui.wizards.WizardModel;
import org.eclipse.php.server.core.types.IServerType;
import org.eclipse.swt.widgets.Composite;
import org.zend.php.server.ui.fragments.AbstractWizardFragment;
import org.zend.php.server.ui.types.LocalZendServerType;
import org.zend.php.zendserver.deployment.core.targets.TargetsManagerService;
import org.zend.php.zendserver.deployment.core.targets.ZendServerManager;
import org.zend.php.zendserver.deployment.debug.core.DebugUtils;
import org.zend.php.zendserver.deployment.ui.Activator;
import org.zend.php.zendserver.deployment.ui.LocalTargetDetector;
import org.zend.sdklib.internal.target.ZendTarget;
import org.zend.sdklib.manager.DetectionException;
import org.zend.sdklib.target.IZendTarget;
import org.zend.webapi.core.WebApiClient;
import org.zend.webapi.core.WebApiException;
import org.zend.webapi.core.connection.auth.BasicCredentials;
import org.zend.webapi.core.connection.auth.WebApiCredentials;
import org.zend.webapi.core.connection.data.VhostDetails;
import org.zend.webapi.core.connection.data.VhostInfo;
import org.zend.webapi.core.connection.data.VhostsList;
/**
* @author Wojciech Galanciak, 2014
*
*/
@SuppressWarnings("restriction")
public class LocalZendServerWizardFragment extends AbstractWizardFragment {
@Override
protected CompositeFragment createComposite(Composite parent,
WizardControlWrapper wrapper) {
return new LocalZendServerCompositeFragment(parent, wrapper, false);
}
@Override
public boolean performFinish(IProgressMonitor monitor) throws CoreException {
boolean result = super.performFinish(monitor);
if (result) {
monitor.beginTask(Messages.LocalZendServerCompositeFragment_DetectTitle, IProgressMonitor.UNKNOWN);
monitor.subTask(Messages.LocalZendServerWizardFragment_FetchingConfiguration);
Server server = null;
try {
server = ZendServerManager.getInstance().getLocalZendServer();
} catch (DetectionException e) {
Activator.logError(Messages.LocalZendServerCompositeFragment_CannotDetectError, e);
setMessage(Messages.LocalZendServerCompositeFragment_CannotDetectError, IMessageProvider.ERROR);
return composite.isComplete();
}
server.setName(this.server.getName());
server.setAttribute(IServerType.TYPE, LocalZendServerType.ID);
IZendTarget zendTarget = TargetsManagerService.INSTANCE.getTargetManager().getExistingLocalhost();
if (zendTarget == null) {
LocalTargetDetector detector = new LocalTargetDetector();
detector.detect();
zendTarget = detector.getFinalTarget();
}
if (zendTarget == null) {
Activator.logError(Messages.LocalZendServerWizardFragment_NoLocalTargetFound_Error);
setMessage(Messages.LocalZendServerWizardFragment_NoLocalTargetFound_Error, IMessageProvider.ERROR);
return composite.isComplete();
}
if (server.getBaseURL() == "" || server.getDocumentRoot() == "") { //$NON-NLS-1$ //$NON-NLS-2$
try {
VhostInfo defaultVHostInfo = null;
WebApiCredentials credentials = new BasicCredentials(zendTarget.getKey(),
zendTarget.getSecretKey());
WebApiClient apiClient = new WebApiClient(credentials, zendTarget.getHost().toString());
apiClient.setServerType(zendTarget.getServerType());
VhostsList vhostsList = apiClient.vhostGetStatus();
for (VhostInfo vhostInfo : vhostsList.getVhosts()) {
if (!vhostInfo.isDefaultVhost())
continue;
defaultVHostInfo = vhostInfo;
}
if (server.getBaseURL() == "" && defaultVHostInfo != null) { //$NON-NLS-1$
// server base URL has not been read from
// the configuration
String baseUrl = "http://localhost:" + Integer.toString(defaultVHostInfo.getPort()); //$NON-NLS-1$
server.setBaseURL(baseUrl);
}
if (server.getDocumentRoot() == "" && defaultVHostInfo != null) { //$NON-NLS-1$
// server document root folder has not been read from
// the configuration
VhostDetails vhostDetails = apiClient.vhostGetDetails(defaultVHostInfo.getId());
String documentRoot = vhostDetails.getExtendedInfo().getDocRoot();
server.setDocumentRoot(documentRoot);
}
} catch (MalformedURLException | WebApiException ex) {
Activator.logError(Messages.LocalZendServerWizardFragment_UpdatingServerProperties_Error, ex);
setMessage(Messages.LocalZendServerWizardFragment_UpdatingServerProperties_Error,
IMessageProvider.ERROR);
return composite.isComplete();
}
}
monitor.subTask(Messages.LocalZendServerWizardFragment_DetectingDebuggerSettings);
// Detect debugger type if Web API is enabled
String debuggerId = DebugUtils.getDebuggerId(zendTarget);
server.setDebuggerId(debuggerId);
// Set up best match IP (localhost only) if it is Zend Debugger
if (ZendDebuggerConfiguration.ID.equals(debuggerId)) {
DebuggerSettingsManager debuggerSettingsManager = DebuggerSettingsManager.INSTANCE;
IDebuggerSettings debuggerSettings = debuggerSettingsManager.findSettings(server.getUniqueId(),
server.getDebuggerId());
IDebuggerSettingsWorkingCopy debuggerSettingsWorkingCopy = debuggerSettingsManager
.fetchWorkingCopy(debuggerSettings);
debuggerSettingsWorkingCopy.setAttribute(ZendDebuggerSettingsConstants.PROP_CLIENT_IP, "127.0.0.1"); //$NON-NLS-1$
debuggerSettingsManager.save(debuggerSettingsWorkingCopy);
debuggerSettingsManager.dropWorkingCopy(debuggerSettingsWorkingCopy);
}
ZendServerManager.setupPathMapping(server);
String targetServerName = zendTarget.getServerName();
if(ServersManager.getServer(targetServerName) == null) {
((ZendTarget) zendTarget).setServerName(server.getName());
TargetsManagerService.INSTANCE.getTargetManager().updateTarget(zendTarget, true);
}
getWizardModel().putObject(WizardModel.SERVER, server);
return composite.isComplete();
}
return result;
}
}