/********************************************************************** * Copyright (c) 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html  * * Contributors: * IBM - Initial API and implementation **********************************************************************/ package net.sourceforge.phpeclipse.wiki.ui.internal; import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; import net.sourceforge.phpeclipse.wiki.internal.IConfigurationWorkingCopy; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * */ public class ConfigurationDialog extends Dialog { protected IConfigurationWorkingCopy fConfiguration; protected boolean isEdit; private Button okButton; private Text fUserName; private Text fUrl; private Text fPassword; interface StringModifyListener { public void valueChanged(String s); } interface BooleanModifyListener { public void valueChanged(boolean b); } interface TypeModifyListener { public void valueChanged(String fType); } /** * @param parentShell */ public ConfigurationDialog(Shell parentShell, IConfigurationWorkingCopy configuration) { super(parentShell); this.fConfiguration = configuration; isEdit = true; } public ConfigurationDialog(Shell parentShell) { super(parentShell); fConfiguration = WikiEditorPlugin.createConfiguration(); isEdit = false; } protected void configureShell(Shell shell) { super.configureShell(shell); if (isEdit) shell.setText(WikiEditorPlugin.getResource("%editConfig")); else shell.setText(WikiEditorPlugin.getResource("%newConfig")); } protected Label createLabel(Composite comp, String txt) { Label label = new Label(comp, SWT.NONE); label.setText(txt); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING)); return label; } protected Text createText(Composite comp, String txt, final StringModifyListener listener) { final Text text = new Text(comp, SWT.BORDER); if (txt != null) text.setText(txt); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING); data.widthHint = 150; text.setLayoutData(data); if (listener != null) text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { listener.valueChanged(text.getText()); } }); return text; } protected Combo createTypeCombo(Composite comp, final String[] types, String sel, final TypeModifyListener listener) { final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY); int size = types.length; String[] items = new String[size]; int index = -1; for (int i = 0; i < size; i++) { items[i] = types[i]; if (types[i].equals(sel)) index = i; } combo.setItems(items); if (index >= 0) combo.select(index); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); data.widthHint = 150; combo.setLayoutData(data); if (listener != null) combo.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { listener.valueChanged(types[combo.getSelectionIndex()]); } public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); return combo; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); ((GridLayout)composite.getLayout()).numColumns = 2; // WorkbenchHelp.setHelp(composite, ContextIds.PREF_DIALOG); Group group = new Group(composite, SWT.NONE); GridLayout layout = new GridLayout(2, false); group.setLayout(layout); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; group.setLayoutData(data); group.setText(WikiEditorPlugin.getResource("%remoteGroup")); createLabel(group, WikiEditorPlugin.getResource("%url")); fUrl = createText(group, fConfiguration.getURL(), new StringModifyListener() { public void valueChanged(String s) { fConfiguration.setURL(s); validateFields(); } }); createLabel(composite, WikiEditorPlugin.getResource("%user")); fUserName = createText(composite, fConfiguration.getUser() + "", new StringModifyListener() { public void valueChanged(String s) { fConfiguration.setUser(s); validateFields(); } }); createLabel(group, WikiEditorPlugin.getResource("%password")); fPassword = createText(group, fConfiguration.getPassword() + "", new StringModifyListener() { public void valueChanged(String s) { fConfiguration.setPassword(s); validateFields(); } }); createLabel(group, WikiEditorPlugin.getResource("%parseType")); createTypeCombo(group, WikiEditorPlugin.getTypes(), fConfiguration.getType(), new TypeModifyListener() { public void valueChanged(String fType) { fConfiguration.setType(fType); } }); return composite; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ protected void okPressed() { fConfiguration.save(); super.okPressed(); } protected Control createButtonBar(Composite parent) { Control buttonControl = super.createButtonBar(parent); validateFields(); return buttonControl; } private void setOKButtonEnabled(boolean curIsEnabled) { if (okButton == null) okButton = getButton(IDialogConstants.OK_ID); if (okButton != null) okButton.setEnabled(curIsEnabled); } protected void validateFields() { boolean result = true; String currHostname = fUrl.getText(); // if (!isValidHostname(currHostname)) // result = false; String currHostnamePort = fPassword.getText(); // try { // Integer.parseInt(currHostnamePort); // } catch (Exception any) { // result = false; // } String currMonitorPort = fUserName.getText(); // try { // Integer.parseInt(currMonitorPort); // } catch (Exception any) { // result = false; // } // if (result && isLocalhost(currHostname)) { // if (currHostnamePort.equals(currMonitorPort)) // result = false; // } setOKButtonEnabled(result); } // protected static boolean isValidHostname(String host) { // if (host == null || host.trim().length() < 1) // return false; // if (host.indexOf("/") >= 0) // return false; // if (host.indexOf("\\") >= 0) // return false; // if (host.indexOf(" ") >= 0) // return false; // return true; // } // protected static boolean isLocalhost(String host) { // if (host == null) // return false; // try { // if ("localhost".equals(host) || "127.0.0.1".equals(host)) // return true; // InetAddress localHostaddr = InetAddress.getLocalHost(); // if (localHostaddr.getHostName().equals(host)) // return true; // } catch (Exception e) { // Trace.trace(Trace.WARNING, "Error checking for localhost", e); // } // return false; // } }