/******************************************************************************* * Copyright (c) 2015 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 java.net.URL; import java.text.MessageFormat; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.php.internal.server.core.Server; import org.eclipse.php.internal.ui.wizards.IControlHandler; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.zend.php.server.ui.ServersUI; import org.zend.php.server.ui.fragments.AbstractCompositeFragment; import org.zend.php.server.ui.types.ZendServerType; import org.zend.php.zendserver.deployment.ui.Activator; /** * @author Bartlomiej Laczkowski, 2015 * * Wizard page to set the server install directory. */ @SuppressWarnings("restriction") public class RemoteZendServerCompositeFragment extends AbstractCompositeFragment { protected Text nameText; protected Text urlText; protected String name; protected String url; /** * ServerCompositeFragment * * @param parent * the parent composite * @param wizard * the wizard handle */ public RemoteZendServerCompositeFragment(Composite parent, IControlHandler handler, boolean isForEditing) { super(parent, handler, isForEditing, Messages.RemoteZendServerCompositeFragment_Name, Messages.RemoteZendServerCompositeFragment_Title, Messages.RemoteZendServerCompositeFragment_Description); setImageDescriptor(ServersUI .getImageDescriptor(ServersUI.ZEND_SERVER_WIZ)); handler.setImageDescriptor(getImageDescriptor()); } /* (non-Javadoc) * @see org.eclipse.php.internal.ui.wizards.CompositeFragment#performOk() */ public boolean performOk() { saveValues(); return true; } /* (non-Javadoc) * @see org.eclipse.php.internal.ui.wizards.CompositeFragment#validate() */ public void validate() { if (name == null || name.trim().equals("")) { //$NON-NLS-1$ setIncompleteMessage(Messages.RemoteZendServerCompositeFragment_Missing_server_name); return; } if(isDuplicateName(name)) { setMessage(Messages.RemoteZendServerCompositeFragment_Duplicated_server_name, IMessageProvider.ERROR); return; } if (url == null || url.trim().equals("")) { //$NON-NLS-1$ setMessage(Messages.RemoteZendServerCompositeFragment_Missing_server_URL, IMessageProvider.ERROR); return; } URL serverUrl = null; try { serverUrl = new URL(url); } catch (MalformedURLException e) { setMessage(Messages.RemoteZendServerCompositeFragment_Please_enter_valid_URL, IMessageProvider.ERROR); return; } if(serverUrl.getHost().isEmpty()) { setMessage(Messages.RemoteZendServerCompositeFragment_Please_enter_valid_URL, IMessageProvider.ERROR); return; } if(serverUrl.getPath().length() != 0){ setMessage(Messages.RemoteZendServerCompositeFragment_Please_enter_valid_URL, IMessageProvider.ERROR); return; } if(checkServerUrl(url)) { setMessage(Messages.RemoteZendServerCompositeFragment_Duplicated_server_URL, IMessageProvider.ERROR); return; } setMessage(getDescription(), IMessageProvider.NONE); } /** * Provide a wizard page to change the Server's installation directory. */ protected void createContents(Composite parent) { Composite nameGroup = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; nameGroup.setLayout(layout); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; nameGroup.setLayoutData(gridData); Label label = new Label(nameGroup, SWT.NONE); label.setText(Messages.RemoteZendServerCompositeFragment_Server_name); GridData data = new GridData(); label.setLayoutData(data); nameText = new Text(nameGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); nameText.setLayoutData(data); nameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { name = nameText.getText(); validate(); } }); nameText.forceFocus(); createURLGroup(parent); } /** * @param parent */ protected void createURLGroup(Composite parent) { // Main composite Composite urlGroupComposite = new Composite(parent, SWT.NONE); GridLayout sLayout = new GridLayout(); urlGroupComposite.setLayout(sLayout); GridData sGridData = new GridData(SWT.FILL, SWT.FILL, true, true); sGridData.horizontalSpan = 3; urlGroupComposite.setLayoutData(sGridData); Group group = new Group(urlGroupComposite, SWT.NONE); group.setFont(urlGroupComposite.getFont()); GridLayout layout = new GridLayout(2, false); group.setLayout(layout); GridData data = new GridData(GridData.FILL_HORIZONTAL); group.setLayoutData(data); group.setText(Messages.RemoteZendServerCompositeFragment_Server_properties); Label urlLabel = new Label(group, SWT.None); urlLabel.setText(Messages.RemoteZendServerCompositeFragment_Base_URL); urlText = new Text(group, SWT.BORDER); GridData layoutData = new GridData(GridData.FILL_HORIZONTAL); urlText.setLayoutData(layoutData); urlText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { url = urlText.getText(); validate(); } }); } /* (non-Javadoc) * @see org.zend.php.server.ui.fragments.AbstractCompositeFragment#init() */ protected void init() { Server server = getServer(); if (server != null) { nameText.setText(server.getName()); urlText.setText(server.getBaseURL()); } else { urlText.setText(ZendServerType.DEFAULT_BASE_URL); } validate(); } protected void saveValues() { Server server = getServer(); server.setName(name); try { server.setBaseURL(url); URL serverURL = new URL(url); server.setHost(serverURL.getHost()); server.setPort(String.valueOf(serverURL.getPort())); } catch (MalformedURLException e) { // should not occur at this time // if it does it means that validation does not work well String message = MessageFormat.format(Messages.RemoteZendServerCompositeFragment_Invalid_server_URL, url); Activator.logError(message); return; } } private boolean checkServerUrl(String url) { Server tempServer = new Server(); try { tempServer.setBaseURL(url); } catch (MalformedURLException e) { // should not occur String message = MessageFormat.format(Messages.RemoteZendServerCompositeFragment_Invalid_server_URL, url); Activator.logError(message); } return (getConflictingServer(tempServer) != null); } }