/******************************************************************************* * Copyright (c) 2014 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 * * Contributors: * Zend Technologies Ltd. - initial API and implementation *******************************************************************************/ package org.zend.php.server.internal.ui.apache; import java.text.MessageFormat; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.php.internal.server.core.Server; import org.eclipse.php.internal.server.core.manager.ServersManager; import org.eclipse.php.server.core.types.IServerType; import org.eclipse.php.server.core.types.ServerTypesManager; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.zend.php.server.internal.ui.Messages; import org.zend.php.server.ui.ServersUI; import org.zend.php.server.ui.actions.IActionContribution; import org.zend.php.server.ui.types.LocalApacheType; /** * Contribution to action which is responsible for refreshing local Apache HTTP * Server configuration settings. * * @author Wojciech Galanciak, 2014 * */ @SuppressWarnings("restriction") public class RefreshApacheAction implements IActionContribution { private Server server; @Override public String getLabel() { return Messages.RefreshApacheAction_RefreshLabel; } @Override public ImageDescriptor getIcon() { return ServersUI.getImageDescriptor(ServersUI.REFRESH_APACHE_ICON); } @Override public boolean isAvailable(Server server) { return true; } @Override public void run() { if (server != null) { IServerType serverType = ServerTypesManager.getInstance().getType( server); if (LocalApacheType.ID.equals(serverType.getId())) { Job refreshJob = new Job(Messages.RefreshApacheAction_JobName) { @Override protected IStatus run(IProgressMonitor monitor) { monitor.beginTask(Messages.RefreshApacheAction_JobDesc, IProgressMonitor.UNKNOWN); Server newServer = new Server(); newServer.setName(server.getName()); newServer.setAttribute(LocalApacheType.LOCATION, server .getAttribute(LocalApacheType.LOCATION, null)); LocalApacheType.parseAttributes(newServer); final String name = checkBaseUrlConfilct(newServer); if (name != null) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { MessageDialog .openError( PlatformUI .getWorkbench() .getActiveWorkbenchWindow() .getShell(), Messages.RefreshApacheAction_BaseUrlTitle, MessageFormat .format(Messages.RefreshApacheAction_BaseUrlError, name)); } }); } else { server.setPort(String.valueOf(newServer.getPort())); server.setDocumentRoot(newServer.getDocumentRoot()); ServersManager.save(); } monitor.done(); return Status.OK_STATUS; } }; refreshJob.setUser(true); refreshJob.schedule(); } } } @Override public void setServer(Server server) { this.server = server; } /** * Check if there is base URL conflict with existing server other then that * which settings are being refreshed. * * @param server * @return name of conflicting server or <code>null</code> if there is no * base URL conflict */ private String checkBaseUrlConfilct(Server newServer) { Server[] servers = ServersManager.getServers(); String baseUrl = newServer.getBaseURL(); String name = newServer.getName(); for (Server server : servers) { if (!name.equals(server.getName()) && baseUrl.equals(server.getBaseURL())) { return server.getName(); } } return null; } }