/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.executor.properties; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; 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.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import de.rcenvironment.core.component.executor.SshExecutorConstants; import de.rcenvironment.core.gui.utils.incubator.WidgetGroupFactory; import de.rcenvironment.core.gui.workflow.editor.properties.ValidatingWorkflowNodePropertySection; import de.rcenvironment.core.toolkitbridge.transitional.ConcurrencyUtils; /** * "Properties" view tab for configuring cluster configuration. * * @author Doreen Seider */ public class HostSection extends ValidatingWorkflowNodePropertySection { protected static final int TEXT_WIDTH = 220; protected static final int BUTTON_WIDTH = 80; private boolean pinging = false; @Override protected void createCompositeContent(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) { TabbedPropertySheetWidgetFactory factory = aTabbedPropertySheetPage.getWidgetFactory(); final Section hostSection = factory.createSection(parent, Section.TITLE_BAR | Section.EXPANDED); hostSection.setText(Messages.configureHost); Composite hostParent = factory.createFlatFormComposite(hostSection); GridLayout layout = new GridLayout(); layout.numColumns = 3; hostParent.setLayout(layout); final Text hostText = WidgetGroupFactory.addLabelAndTextfieldForPropertyToComposite(hostParent, Messages.hostLabel, SshExecutorConstants.CONFIG_KEY_HOST, TEXT_WIDTH, WidgetGroupFactory.NONE).text; Button pingHost = factory.createButton(hostParent, "Ping host", SWT.NONE); GridData gridData = new GridData(); gridData.widthHint = BUTTON_WIDTH; pingHost.setLayoutData(gridData); WidgetGroupFactory.addLabelAndTextfieldForPropertyToComposite(hostParent, Messages.portLabel, SshExecutorConstants.CONFIG_KEY_PORT, TEXT_WIDTH, WidgetGroupFactory.ONLY_INTEGER); final Label pingLabel = new Label(hostParent, SWT.NONE); WidgetGroupFactory.addLabelAndTextfieldForPropertyToComposite(hostParent, Messages.sandboxRootLabel, SshExecutorConstants.CONFIG_KEY_SANDBOXROOT, TEXT_WIDTH, WidgetGroupFactory.NONE); new Label(hostParent, SWT.NONE); new Label(hostParent, SWT.NONE); Button deleteSandboxButton = factory.createButton(hostParent, "Delete working directory after execution", SWT.CHECK); deleteSandboxButton.setData(CONTROL_PROPERTY_KEY, SshExecutorConstants.CONFIG_KEY_DELETESANDBOX); hostSection.setClient(hostParent); pingHost.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { if (!pinging) { final String host = hostText.getText(); if (!host.isEmpty()) { pingLabel.setText("Pinging host " + host + " ..."); } hostSection.layout(); ConcurrencyUtils.getAsyncTaskService().execute(new Runnable() { @Override public void run() { try { Process p1 = java.lang.Runtime.getRuntime().exec("ping " + host); final int result = p1.waitFor(); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (result == 0) { pingLabel.setText("Host " + host + " is reachable"); } else { pingLabel.setText("Could not reach " + host); } pinging = false; hostSection.layout(); } }); } catch (InterruptedException e) { Logger.getLogger(HostSection.class.getName()).log(Level.WARNING, "", e); } catch (IOException e) { Logger.getLogger(HostSection.class.getName()).log(Level.WARNING, "", e); } } }); } } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } }); } }