Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/wizards/pages/NewTargetWizardPage.java')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/wizards/pages/NewTargetWizardPage.java424
1 files changed, 424 insertions, 0 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/wizards/pages/NewTargetWizardPage.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/wizards/pages/NewTargetWizardPage.java
new file mode 100644
index 000000000..4725f41ce
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/wizards/pages/NewTargetWizardPage.java
@@ -0,0 +1,424 @@
+/*******************************************************************************
+ * Copyright (c) 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.te.tcf.ui.wizards.pages;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogPage;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tcf.protocol.IPeer;
+import org.eclipse.tcf.te.tcf.ui.internal.help.IContextHelpIds;
+import org.eclipse.tcf.te.tcf.ui.nls.Messages;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.CustomTransportPanel;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.PeerAttributesTablePart;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.PeerIdControl;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.PeerNameControl;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.PipeTransportPanel;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.TcpTransportPanel;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.TransportTypeControl;
+import org.eclipse.tcf.te.tcf.ui.wizards.controls.TransportTypePanelControl;
+import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
+import org.eclipse.tcf.te.runtime.properties.PropertiesContainer;
+import org.eclipse.tcf.te.tcf.core.interfaces.ITransportTypes;
+import org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel;
+import org.eclipse.tcf.te.ui.forms.FormLayoutFactory;
+import org.eclipse.tcf.te.ui.swt.SWTControlUtil;
+import org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataWizardPage;
+import org.eclipse.tcf.te.ui.wizards.pages.AbstractValidatableWizardPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * Wizard page implementation querying all information needed
+ * to create the different TCF peer types.
+ */
+public class NewTargetWizardPage extends AbstractValidatableWizardPage {
+ private PeerIdControl peerIdControl;
+ private PeerNameControl peerNameControl;
+ TransportTypeControl transportTypeControl;
+ TransportTypePanelControl transportTypePanelControl;
+ private PeerAttributesTablePart tablePart;
+
+ private FormToolkit toolkit = null;
+
+ /**
+ * Local transport type control implementation.
+ */
+ private class MyTransportTypeControl extends TransportTypeControl {
+
+ /**
+ * Constructor.
+ *
+ * @param parentPage The parent dialog page this control is embedded in.
+ * Might be <code>null</code> if the control is not associated with a page.
+ */
+ public MyTransportTypeControl(IDialogPage parentPage) {
+ super(parentPage);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.controls.BaseEditBrowseTextControl#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (transportTypePanelControl != null) {
+ transportTypePanelControl.showConfigurationPanel(getSelectedTransportType());
+ validatePage();
+ }
+ }
+ }
+
+ /**
+ * Local transport type panel control implementation.
+ */
+ private class MyTransportTypePanelControl extends TransportTypePanelControl {
+
+ /**
+ * Constructor.
+ *
+ * @param parentPage The parent dialog page this control is embedded in.
+ * Might be <code>null</code> if the control is not associated with a page.
+ */
+ public MyTransportTypePanelControl(IDialogPage parentPage) {
+ super(parentPage);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.controls.BaseControl#isValid()
+ */
+ @Override
+ public boolean isValid() {
+ boolean valid = super.isValid();
+ if (!valid) return false;
+
+ // Get the currently selected transport type
+ if (transportTypeControl != null) {
+ String transportType = transportTypeControl.getSelectedTransportType();
+ if (transportType != null) {
+ // get the panel for the transport type and validate the panel
+ IWizardConfigurationPanel panel = getConfigurationPanel(transportType);
+
+ if (panel != null) {
+ valid = panel.isValid();
+ setMessage(panel.getMessage(), panel.getMessageType());
+ }
+ }
+ }
+
+ return valid;
+ }
+ }
+
+ /**
+ * Constructor.
+ */
+ public NewTargetWizardPage() {
+ this(NewTargetWizardPage.class.getName());
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param pageName The page name. Must not be <code>null</code>.
+ */
+ public NewTargetWizardPage(String pageName) {
+ super(pageName);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+ */
+ @Override
+ public void dispose() {
+ if (peerIdControl != null) { peerIdControl.dispose(); peerIdControl = null; }
+ if (peerNameControl != null) { peerNameControl.dispose(); peerNameControl = null; }
+ if (transportTypeControl != null) { transportTypeControl.dispose(); transportTypeControl = null; }
+ if (transportTypePanelControl != null) { transportTypePanelControl.dispose(); transportTypePanelControl = null; }
+ if (tablePart != null) { tablePart.dispose(); tablePart = null; }
+
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ // Setup title and description
+ setTitle(Messages.NewTargetWizardPage_title);
+ setDescription(Messages.NewTargetWizardPage_description);
+
+ // Create the forms toolkit
+ toolkit = new FormToolkit(parent.getDisplay());
+
+ // Create the main panel
+ Composite mainPanel = toolkit.createComposite(parent);
+ mainPanel.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
+ mainPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ mainPanel.setBackground(parent.getBackground());
+
+ setControl(mainPanel);
+
+ // Setup the help
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(mainPanel, IContextHelpIds.NEW_TARGET_WIZARD_PAGE);
+
+ // Do not validate the page while creating the controls
+ boolean changed = setValidationInProgress(true);
+ // Create the main panel sub controls
+ createMainPanelControls(mainPanel, toolkit);
+ // Reset the validation in progress state
+ if (changed) setValidationInProgress(false);
+
+ // Adjust the font
+ Dialog.applyDialogFont(mainPanel);
+
+ // Validate the page for the first time
+ validatePage();
+ }
+
+ /**
+ * Creates the main panel sub controls.
+ *
+ * @param parent The parent main panel composite. Must not be <code>null</code>.
+ * @param toolkit The form toolkit. Must not be <code>null</code>.
+ */
+ protected void createMainPanelControls(Composite parent, FormToolkit toolkit) {
+ Assert.isNotNull(parent);
+
+ // Create the client composite
+ Composite client = toolkit.createComposite(parent);
+ client.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2));
+ client.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ client.setBackground(parent.getBackground());
+
+ // Add the controls
+ peerIdControl = new PeerIdControl(this);
+ peerIdControl.setFormToolkit(toolkit);
+ peerIdControl.setParentControlIsInnerPanel(true);
+ peerIdControl.setupPanel(client);
+ peerIdControl.getEditFieldControl().setEnabled(false);
+ peerIdControl.setEditFieldControlText(UUID.randomUUID().toString());
+
+ peerNameControl = new PeerNameControl(this);
+ peerNameControl.setFormToolkit(toolkit);
+ peerNameControl.setParentControlIsInnerPanel(true);
+ peerNameControl.setupPanel(client);
+ peerNameControl.getEditFieldControl().setFocus();
+
+ createEmptySpace(client, 5, 2, toolkit);
+
+ // Create and configure the transport type section
+ Section transportTypeSection = toolkit.createSection(client, ExpandableComposite.TITLE_BAR);
+ transportTypeSection.setText(Messages.NewTargetWizardPage_section_transportType);
+ transportTypeSection.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2));
+ GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ layoutData.horizontalSpan = 2;
+ transportTypeSection.setLayoutData(layoutData);
+ transportTypeSection.setBackground(client.getBackground());
+
+ Composite transportTypeClient = toolkit.createComposite(transportTypeSection);
+ transportTypeClient.setLayout(new GridLayout());
+ transportTypeClient.setBackground(transportTypeSection.getBackground());
+ transportTypeSection.setClient(transportTypeClient);
+
+ // Create the transport type control
+ transportTypeControl = new MyTransportTypeControl(this);
+ transportTypeControl.setFormToolkit(toolkit);
+ transportTypeControl.setupPanel(transportTypeClient);
+
+ // The transport type specific controls are placed into a stack
+ transportTypePanelControl = new MyTransportTypePanelControl(this);
+
+ // Create and add the panels
+ TcpTransportPanel tcpTransportPanel = new TcpTransportPanel(transportTypePanelControl);
+ transportTypePanelControl.addConfigurationPanel(ITransportTypes.TRANSPORT_TYPE_TCP, tcpTransportPanel);
+ transportTypePanelControl.addConfigurationPanel(ITransportTypes.TRANSPORT_TYPE_SSL, tcpTransportPanel);
+ transportTypePanelControl.addConfigurationPanel(ITransportTypes.TRANSPORT_TYPE_PIPE, new PipeTransportPanel(transportTypePanelControl));
+ transportTypePanelControl.addConfigurationPanel(ITransportTypes.TRANSPORT_TYPE_CUSTOM, new CustomTransportPanel(transportTypePanelControl));
+
+ // Setup the panel control
+ transportTypePanelControl.setupPanel(transportTypeClient, TransportTypeControl.TRANSPORT_TYPES, toolkit);
+ layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ layoutData.horizontalSpan = 2;
+ transportTypePanelControl.getPanel().setLayoutData(layoutData);
+ toolkit.adapt(transportTypePanelControl.getPanel());
+
+ transportTypePanelControl.showConfigurationPanel(transportTypeControl.getSelectedTransportType());
+
+ // Create the advanced peer properties table
+ createPeerAttributesTableControl(client, toolkit);
+
+ // restore the widget values from the history
+ restoreWidgetValues();
+ }
+
+ /**
+ * Creates the peer attributes table controls.
+ *
+ * @param parent The parent composite. Must not be <code>null</code>.
+ * @param toolkit The form toolkit. Must not be <code>null</code>.
+ */
+ protected void createPeerAttributesTableControl(Composite parent, FormToolkit toolkit) {
+ Assert.isNotNull(parent);
+
+ createEmptySpace(parent, 5, 2, toolkit);
+
+ // Create and configure the advanced attributes section
+ Section attributesSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
+ attributesSection.setText(Messages.NewTargetWizardPage_section_attributes);
+ attributesSection.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2));
+ GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ layoutData.horizontalSpan = 2;
+ attributesSection.setLayoutData(layoutData);
+ attributesSection.setBackground(parent.getBackground());
+
+ Composite client = toolkit.createComposite(attributesSection);
+ client.setLayout(new GridLayout(2, false));
+ client.setBackground(attributesSection.getBackground());
+ attributesSection.setClient(client);
+
+ tablePart = new PeerAttributesTablePart();
+ tablePart.setMinSize(SWTControlUtil.convertWidthInCharsToPixels(client, 20), SWTControlUtil.convertHeightInCharsToPixels(client, 6));
+ tablePart.setBannedNames(new String[] { IPeer.ATTR_ID, IPeer.ATTR_AGENT_ID, IPeer.ATTR_SERVICE_MANGER_ID, IPeer.ATTR_NAME, IPeer.ATTR_TRANSPORT_NAME, IPeer.ATTR_IP_HOST, IPeer.ATTR_IP_PORT, "PipeName" }); //$NON-NLS-1$
+ tablePart.createControl(client, SWT.SINGLE | SWT.FULL_SELECTION, 2, toolkit);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.controls.wizards.pages.AbstractValidatableWizardPage#validatePage()
+ */
+ @Override
+ public void validatePage() {
+ super.validatePage();
+ if (!isPageComplete()) return;
+
+ if (isValidationInProgress()) return;
+ setValidationInProgress(true);
+
+ boolean valid = true;
+
+ if (peerIdControl != null) {
+ valid &= peerIdControl.isValid();
+ setMessage(peerIdControl.getMessage(), peerIdControl.getMessageType());
+ }
+
+ if (peerNameControl != null) {
+ valid &= peerNameControl.isValid();
+ if (peerNameControl.getMessageType() > getMessageType()) {
+ setMessage(peerNameControl.getMessage(), peerNameControl.getMessageType());
+ }
+ }
+
+ if (transportTypeControl != null) {
+ valid &= transportTypeControl.isValid();
+ if (transportTypeControl.getMessageType() > getMessageType()) {
+ setMessage(transportTypeControl.getMessage(), transportTypeControl.getMessageType());
+ }
+ }
+
+ if (transportTypePanelControl != null) {
+ valid &= transportTypePanelControl.isValid();
+ if (transportTypePanelControl.getMessageType() > getMessageType()) {
+ setMessage(transportTypePanelControl.getMessage(), transportTypePanelControl.getMessageType());
+ }
+ }
+
+ setPageComplete(valid);
+ setValidationInProgress(false);
+ }
+
+ /**
+ * Updates the given attributes map with the current control content.
+ *
+ * @param peerAttributes The peer attributes map to update. Must not be <code>null</code>.
+ */
+ protected void updatePeerAttributes(Map<String, String> peerAttributes) {
+ Assert.isNotNull(peerAttributes);
+
+ peerAttributes.put(IPeer.ATTR_ID, peerIdControl.getEditFieldControlText());
+
+ String value = peerNameControl.getEditFieldControlText();
+ if (value != null && !"".equals(value)) peerAttributes.put(IPeer.ATTR_NAME, value); //$NON-NLS-1$
+
+ value = transportTypeControl.getSelectedTransportType();
+ if (value != null && !"".equals(value) && !ITransportTypes.TRANSPORT_TYPE_CUSTOM.equals(value)) { //$NON-NLS-1$
+ peerAttributes.put(IPeer.ATTR_TRANSPORT_NAME, value);
+ }
+
+ IWizardConfigurationPanel panel = transportTypePanelControl.getConfigurationPanel(value);
+ if (panel instanceof ISharedDataWizardPage) {
+ IPropertiesContainer data = new PropertiesContainer();
+ ((ISharedDataWizardPage)panel).extractData(data);
+
+ // Copy all string properties to the peer attributes map
+ for (String key : data.getProperties().keySet()) {
+ value = data.getStringProperty(key);
+ if (value != null && !"".equals(value)) peerAttributes.put(key, value); //$NON-NLS-1$
+ }
+ }
+
+ Map<String, String> additionalAttributes = tablePart.getAttributes();
+ if (additionalAttributes != null && !additionalAttributes.isEmpty()) {
+ peerAttributes.putAll(additionalAttributes);
+ }
+ }
+
+ /**
+ * Returns the peer attributes.
+ *
+ * @return The peer attributes or <code>null</code> if canceled.
+ */
+ public final Map<String, String> getPeerAttributes() {
+ // Create a new peer attributes map
+ Map<String, String> peerAttributes = new HashMap<String, String>();
+ // Update with the current control content
+ updatePeerAttributes(peerAttributes);
+
+ return peerAttributes;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.wizards.pages.AbstractWizardPage#saveWidgetValues()
+ */
+ @Override
+ public void saveWidgetValues() {
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ if (peerIdControl != null) peerIdControl.saveWidgetValues(settings, null);
+ if (peerNameControl != null) peerNameControl.saveWidgetValues(settings, null);
+ if (transportTypeControl != null) transportTypeControl.saveWidgetValues(settings, null);
+ if (transportTypePanelControl != null) transportTypePanelControl.saveWidgetValues(settings, null);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.wizards.pages.AbstractWizardPage#restoreWidgetValues()
+ */
+ @Override
+ public void restoreWidgetValues() {
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ if (peerIdControl != null) peerIdControl.restoreWidgetValues(settings, null);
+ if (peerNameControl != null) peerNameControl.restoreWidgetValues(settings, null);
+ if (transportTypeControl != null) transportTypeControl.restoreWidgetValues(settings, null);
+ if (transportTypePanelControl != null) transportTypePanelControl.restoreWidgetValues(settings, null);
+ }
+ }
+}

Back to the top