/******************************************************************************* * Copyright (c) 2009, 2011 Wind River Systems, Inc. and others. * 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.internal.debug.ui.launch.setup; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.IPreferencePage; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.preference.PreferenceManager; import org.eclipse.jface.preference.PreferenceNode; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; 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.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.tcf.internal.debug.ui.Activator; import org.osgi.framework.Bundle; class WizardLoginPage extends WizardPage implements Listener { private static final String PREF_PROTOCOL = "setup.login.protocol", PREF_HOST = "setup.login.host", PREF_USER = "setup.login.user"; private final SetupWizardDialog wizard; final String[] protocols = { "Telnet", "SSH" }; Combo protocol; Button prefs; Text host; Text user; Text user_password; Text root_password; WizardLoginPage(SetupWizardDialog wizard) { super("LoginPage"); this.wizard = wizard; setTitle("Remote TCF agent configuration"); setDescription("Enter remote host login data"); } public void handleEvent(Event event) { getContainer().updateButtons(); IEclipsePreferences n = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); n.put(PREF_PROTOCOL, protocol.getText()); n.put(PREF_HOST, host.getText()); n.put(PREF_USER, user.getText()); root_password.setEnabled(!user.getText().equals("root")); prefs.setEnabled(protocol.getText().equals(protocols[1])); } public void createControl(final Composite parent) { GridData gd; Composite composite = new Composite(parent, SWT.NULL); GridLayout gl = new GridLayout(); gl.numColumns = 3; composite.setLayout(gl); new Label(composite, SWT.NONE).setText("Protocol:"); protocol = new Combo(composite, SWT.BORDER | SWT.READ_ONLY); gd = new GridData(); gd.horizontalAlignment = GridData.BEGINNING; protocol.setLayoutData(gd); protocol.setItems(protocols); protocol.addListener(SWT.Selection, this); prefs = new Button(composite, SWT.PUSH); prefs.setText("Preferences"); gd = new GridData(); gd.horizontalAlignment = GridData.BEGINNING; gd.widthHint = 100; prefs.setLayoutData(gd); prefs.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent n) { openProtocolPreferences(parent.getShell(), prefs.getText()); } }); new Label(composite, SWT.NONE).setText("Host:"); host = new Text(composite, SWT.BORDER); gd = new GridData(); gd.horizontalSpan = 2; gd.horizontalAlignment = GridData.BEGINNING; gd.widthHint = 200; host.setLayoutData(gd); host.addListener(SWT.KeyUp, this); new Label(composite, SWT.NONE).setText("User:"); user = new Text(composite, SWT.BORDER); gd = new GridData(); gd.horizontalSpan = 2; gd.horizontalAlignment = GridData.BEGINNING; gd.widthHint = 200; user.setLayoutData(gd); user.addListener(SWT.KeyUp, this); new Label(composite, SWT.NONE).setText("Password:"); user_password = new Text(composite, SWT.BORDER | SWT.PASSWORD); gd = new GridData(); gd.horizontalSpan = 2; gd.horizontalAlignment = GridData.BEGINNING; gd.widthHint = 200; user_password.setLayoutData(gd); user_password.addListener(SWT.KeyUp, this); new Label(composite, SWT.NONE).setText("Root password:"); root_password = new Text(composite, SWT.BORDER | SWT.PASSWORD); gd = new GridData(); gd.horizontalSpan = 2; gd.horizontalAlignment = GridData.BEGINNING; gd.widthHint = 200; root_password.setLayoutData(gd); root_password.addListener(SWT.KeyUp, this); IEclipsePreferences d = DefaultScope.INSTANCE.getNode(Activator.PLUGIN_ID); d.put(PREF_PROTOCOL, protocols[0]); IEclipsePreferences[] n = { InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID) }; IPreferencesService s = Platform.getPreferencesService(); protocol.setText(s.get(PREF_PROTOCOL, "", n)); host.setText(s.get(PREF_HOST, "", n)); user.setText(s.get(PREF_USER, "", n)); root_password.setEnabled(!user.getText().equals("root")); prefs.setEnabled(protocol.getText().equals(protocols[1])); setControl(composite); } private void openProtocolPreferences(Shell shell, String title) { try { PreferenceManager mgr = new PreferenceManager(); IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.ui", "preferencePages"); IExtension[] extensions = point.getExtensions(); for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] e = extensions[i].getConfigurationElements(); for (int j = 0; j < e.length; j++) { String nm = e[j].getName(); if (nm.equals("page")) { //$NON-NLS-1$ String cnm = e[j].getAttribute("class"); //$NON-NLS-1$ if (cnm == null) continue; if (!cnm.startsWith("org.eclipse.jsch.")) continue; String id = e[j].getAttribute("id"); //$NON-NLS-1$ if (id == null) id = cnm; Bundle bundle = Platform.getBundle(extensions[i].getNamespaceIdentifier()); Class<?> c = bundle.loadClass(cnm); IPreferencePage page = (IPreferencePage)c.newInstance(); String pnm = e[j].getAttribute("name"); //$NON-NLS-1$ if (pnm != null) page.setTitle(pnm); mgr.addToRoot(new PreferenceNode(id, page)); } } } PreferenceDialog dialog = new PreferenceDialog(shell, mgr); dialog.create(); dialog.setMessage(title); dialog.open(); } catch (Throwable err) { String msg = err.getLocalizedMessage(); if (msg == null || msg.length() == 0) msg = err.getClass().getName(); MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); mb.setText("Error"); mb.setMessage("Cannot open preferences dialog:\n" + msg); mb.open(); } } @Override public IWizardPage getNextPage() { if (host.getText().length() > 0 && user.getText().length() > 0 && (user_password.getText().length() > 0 || protocol.getText().equals("SSH")) && (!root_password.isEnabled() || root_password.getText().length() > 0)) return wizard.getPage("LogPage"); return null; } }