You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hdt.apache.org by rs...@apache.org on 2014/06/26 10:36:39 UTC
[16/27] HDT 7 : - extraction of UI for each Version to individual
plugins. - cleaning up existing UI
http://git-wip-us.apache.org/repos/asf/incubator-hdt/blob/c308e976/org.apache.hdt.ui/src/org/apache/hdt/ui/internal/launch/HadoopLocationWizard.java
----------------------------------------------------------------------
diff --git a/org.apache.hdt.ui/src/org/apache/hdt/ui/internal/launch/HadoopLocationWizard.java b/org.apache.hdt.ui/src/org/apache/hdt/ui/internal/launch/HadoopLocationWizard.java
index bcf5944..c21ce79 100644
--- a/org.apache.hdt.ui/src/org/apache/hdt/ui/internal/launch/HadoopLocationWizard.java
+++ b/org.apache.hdt.ui/src/org/apache/hdt/ui/internal/launch/HadoopLocationWizard.java
@@ -20,16 +20,14 @@ package org.apache.hdt.ui.internal.launch;
import java.net.URI;
import java.net.URISyntaxException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
+import javax.swing.event.ChangeEvent;
+
+import org.apache.hdt.core.HadoopVersion;
import org.apache.hdt.core.internal.hdfs.HDFSManager;
import org.apache.hdt.core.launch.AbstractHadoopCluster;
+import org.apache.hdt.core.launch.AbstractHadoopCluster.ChangeListener;
+import org.apache.hdt.core.launch.AbstractHadoopCluster.HadoopConfigurationBuilder;
import org.apache.hdt.core.launch.ConfProp;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
@@ -39,25 +37,18 @@ import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
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.graphics.Image;
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.Display;
import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
/**
@@ -69,9 +60,7 @@ import org.eclipse.swt.widgets.Text;
*/
public class HadoopLocationWizard extends WizardPage {
-
- public static final String HADOOP_1 = "1.1";
- public static final String HADOOP_2 = "2.2";
+
Image circle;
/**
@@ -85,6 +74,8 @@ public class HadoopLocationWizard extends WizardPage {
* instance).
*/
private AbstractHadoopCluster original;
+ private Text locationName;
+ private Combo hadoopVersion;
/**
* New Hadoop location wizard
@@ -94,7 +85,7 @@ public class HadoopLocationWizard extends WizardPage {
this.original = null;
try {
- this.location = AbstractHadoopCluster.createCluster(ConfProp.PI_HADOOP_VERSION.defVal);
+ this.location = AbstractHadoopCluster.createCluster(HadoopVersion.Version1.getDisplayName());
} catch (CoreException e) {
e.printStackTrace();
}
@@ -110,7 +101,7 @@ public class HadoopLocationWizard extends WizardPage {
super("Create a new Hadoop location", "Edit Hadoop Location", null);
this.original = server;
try {
- this.location = AbstractHadoopCluster.createCluster(server);
+ this.location = AbstractHadoopCluster.createCluster(server.getVersion().getDisplayName());
} catch (CoreException e) {
e.printStackTrace();
}
@@ -130,7 +121,7 @@ public class HadoopLocationWizard extends WizardPage {
public void run() {
HDFSManager.addServer(location.getLocationName(),
location.getConfPropValue(ConfProp.FS_DEFAULT_URI), location
- .getConfPropValue(ConfProp.PI_USER_NAME), null,location.getVersion());
+ .getConfPropValue(ConfProp.PI_USER_NAME), null,location.getVersion().getDisplayName());
}
});
// New location
@@ -165,7 +156,7 @@ public class HadoopLocationWizard extends WizardPage {
}
HDFSManager.addServer(location.getLocationName(),
location.getConfPropValue(ConfProp.FS_DEFAULT_URI), location
- .getConfPropValue(ConfProp.PI_USER_NAME), null,location.getVersion());
+ .getConfPropValue(ConfProp.PI_USER_NAME), null,location.getVersion().getDisplayName());
}
});
}
@@ -264,21 +255,100 @@ public class HadoopLocationWizard extends WizardPage {
* Create the wizard
*/
/* @inheritDoc */
- public void createControl(Composite parent) {
+ public void createControl(final Composite parent) {
setTitle("Define Hadoop location");
setDescription("Define the location of a Hadoop infrastructure " + "for running MapReduce applications.");
- Composite panel = new Composite(parent, SWT.FILL);
+ final Composite panel = new Composite(parent, SWT.FILL);
GridLayout glayout = new GridLayout(2, false);
panel.setLayout(glayout);
+ final HadoopConfigurationBuilder uiConfigurationBuilder = location.getUIConfigurationBuilder();
+ uiConfigurationBuilder.setChangeListener(new ChangeListener() {
+
+ @Override
+ public void notifyChange(ConfProp prop, String propValue) {
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ getContainer().updateButtons();
+ }});
+ }
+ });
+ /*
+ * Location name
+ */
+ {
+ Label label = new Label(panel, SWT.NONE);
+ label.setText( "&Location name:");
+ Text text = new Text(panel, SWT.SINGLE | SWT.BORDER);
+ GridData data = new GridData(GridData.FILL_HORIZONTAL);
+ text.setLayoutData(data);
+ text.setText(location.getConfPropValue(ConfProp.PI_LOCATION_NAME));
+ text.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ final Text text = (Text) e.widget;
+ final ConfProp prop = (ConfProp) text.getData("hProp");
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ uiConfigurationBuilder.notifyChange(ConfProp.PI_LOCATION_NAME,text.getText());
+ }
+ });
+ }
+ });
+ locationName=text;
+ }
+ /*
+ * Hadoop version
+ */
+ {
+ Label label = new Label(panel, SWT.NONE);
+ label.setText("&Hadoop Version:");
+ Combo options = new Combo(panel, SWT.BORDER | SWT.READ_ONLY);
+ for(HadoopVersion ver:HadoopVersion.values()){
+ options.add(ver.getDisplayName());
+ }
+ int pos=0;
+ for(String item:options.getItems()){
+ if(item.equalsIgnoreCase(location.getVersion().getDisplayName())){
+ options.select(pos);
+ break;
+ }
+ pos++;
+ }
+ options.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ options.addListener(SWT.Selection, new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ final String selection = hadoopVersion.getText();
+ if (location == null || !selection.equals(location.getVersion())) {
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ location = AbstractHadoopCluster.createCluster(selection);
+ location.setConfPropValue(ConfProp.PI_HADOOP_VERSION, selection);
+ location.setConfPropValue(ConfProp.PI_LOCATION_NAME, locationName.getText());
+ panel.dispose();
+ createControl(parent);
+ parent.pack();
+ parent.getParent().layout(true);
+ } catch (CoreException e) {
+ MessageDialog.openError(Display.getDefault().getActiveShell(), "HDFS Error", "Unable to create HDFS site :"
+ + e.getMessage());
+ }
+ }
+ });
+ }
- TabMediator mediator = new TabMediator(panel);
+ }
+ });
+ hadoopVersion=options;
+ }
{
- GridData gdata = new GridData(GridData.FILL_BOTH);
- gdata.horizontalSpan = 2;
- mediator.folder.setLayoutData(gdata);
+ uiConfigurationBuilder.buildControl(panel);
+ this.setControl(panel);
}
- this.setControl(panel /* mediator.folder */);
+
{
final Button btn = new Button(panel, SWT.NONE);
btn.setText("&Load from file");
@@ -301,739 +371,8 @@ public class HadoopLocationWizard extends WizardPage {
}
});
}
- }
-
- private interface TabListener {
- void notifyChange(ConfProp prop, String propValue);
- void reloadData();
- }
-
- /*
- * Mediator pattern to keep tabs synchronized with each other and with the
- * location state.
- */
-
- private class TabMediator {
- TabFolder folder;
-
- private Set<TabListener> tabs = new HashSet<TabListener>();
-
- TabMediator(Composite parent) {
- folder = new TabFolder(parent, SWT.NONE);
- tabs.add(new TabMain(this));
- tabs.add(new TabAdvanced(this));
- }
-
- /**
- * Implements change notifications from any tab: update the location
- * state and other tabs
- *
- * @param source
- * origin of the notification (one of the tree tabs)
- * @param propName
- * modified property
- * @param propValue
- * new value
- */
- void notifyChange(TabListener source, final ConfProp prop, final String propValue) {
- // Ignore notification when no change
- String oldValue = location.getConfPropValue(prop);
- if ((oldValue != null) && oldValue.equals(propValue))
- return;
-
- location.setConfPropValue(prop, propValue);
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- getContainer().updateButtons();
- }
- });
-
- this.fireChange(source, prop, propValue);
-
- /*
- * Now we deal with dependencies between settings
- */
- final String jobTrackerHost = location.getConfPropValue(ConfProp.PI_JOB_TRACKER_HOST);
- final String jobTrackerPort = location.getConfPropValue(ConfProp.PI_JOB_TRACKER_PORT);
- final String nameNodeHost = location.getConfPropValue(ConfProp.PI_NAME_NODE_HOST);
- final String nameNodePort = location.getConfPropValue(ConfProp.PI_NAME_NODE_PORT);
- final boolean colocate = location.getConfPropValue(ConfProp.PI_COLOCATE_MASTERS).equalsIgnoreCase("yes");
- final String jobTrackerURI = location.getConfPropValue(ConfProp.JOB_TRACKER_URI) ;
- final String fsDefaultURI = location.getConfPropValue(ConfProp.FS_DEFAULT_URI);
- final String socksServerURI = location.getConfPropValue(ConfProp.SOCKS_SERVER);
- final boolean socksProxyEnable = location.getConfPropValue(ConfProp.PI_SOCKS_PROXY_ENABLE).equalsIgnoreCase("yes");
- final String socksProxyHost = location.getConfPropValue(ConfProp.PI_SOCKS_PROXY_HOST);
- final String socksProxyPort = location.getConfPropValue(ConfProp.PI_SOCKS_PROXY_PORT);
-
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- switch (prop) {
- case PI_JOB_TRACKER_HOST: {
- if (colocate)
- notifyChange(null, ConfProp.PI_NAME_NODE_HOST, jobTrackerHost);
- String newJobTrackerURI = String.format("%s:%s", jobTrackerHost, jobTrackerPort);
- notifyChange(null, ConfProp.JOB_TRACKER_URI, newJobTrackerURI);
- break;
- }
- case PI_JOB_TRACKER_PORT: {
- String newJobTrackerURI = String.format("%s:%s", jobTrackerHost, jobTrackerPort);
- notifyChange(null, ConfProp.JOB_TRACKER_URI, newJobTrackerURI);
- break;
- }
- case PI_NAME_NODE_HOST: {
- String newHDFSURI = String.format("hdfs://%s:%s/", nameNodeHost, nameNodePort);
- notifyChange(null, ConfProp.FS_DEFAULT_URI, newHDFSURI);
-
- // Break colocation if someone force the DFS Master
- if (!colocate && !nameNodeHost.equals(jobTrackerHost))
- notifyChange(null, ConfProp.PI_COLOCATE_MASTERS, "no");
- break;
- }
- case PI_NAME_NODE_PORT: {
- String newHDFSURI = String.format("hdfs://%s:%s/", nameNodeHost, nameNodePort);
- notifyChange(null, ConfProp.FS_DEFAULT_URI, newHDFSURI);
- break;
- }
- case PI_SOCKS_PROXY_HOST: {
- String newSocksProxyURI = String.format("%s:%s", socksProxyHost, socksProxyPort);
- notifyChange(null, ConfProp.SOCKS_SERVER, newSocksProxyURI);
- break;
- }
- case PI_SOCKS_PROXY_PORT: {
- String newSocksProxyURI = String.format("%s:%s", socksProxyHost, socksProxyPort);
- notifyChange(null, ConfProp.SOCKS_SERVER, newSocksProxyURI);
- break;
- }
- case JOB_TRACKER_URI: {
- String[] strs = jobTrackerURI.split(":", 2);
- String host = strs[0];
- String port = (strs.length == 2) ? strs[1] : "";
- notifyChange(null, ConfProp.PI_JOB_TRACKER_HOST, host);
- notifyChange(null, ConfProp.PI_JOB_TRACKER_PORT, port);
- break;
- }
- case FS_DEFAULT_URI: {
- try {
- URI uri = new URI(fsDefaultURI);
- if (uri.getScheme().equals("hdfs")) {
- String host = uri.getHost();
- String port = Integer.toString(uri.getPort());
- notifyChange(null, ConfProp.PI_NAME_NODE_HOST, host);
- notifyChange(null, ConfProp.PI_NAME_NODE_PORT, port);
- }
- } catch (URISyntaxException use) {
- // Ignore the update!
- }
- break;
- }
- case SOCKS_SERVER: {
- String[] strs = socksServerURI.split(":", 2);
- String host = strs[0];
- String port = (strs.length == 2) ? strs[1] : "";
- notifyChange(null, ConfProp.PI_SOCKS_PROXY_HOST, host);
- notifyChange(null, ConfProp.PI_SOCKS_PROXY_PORT, port);
- break;
- }
- case PI_COLOCATE_MASTERS: {
- if (colocate)
- notifyChange(null, ConfProp.PI_NAME_NODE_HOST, jobTrackerHost);
- break;
- }
- case PI_SOCKS_PROXY_ENABLE: {
- if (socksProxyEnable) {
- notifyChange(null, ConfProp.SOCKET_FACTORY_DEFAULT, "org.apache.hadoop.net.SocksSocketFactory");
- } else {
- notifyChange(null, ConfProp.SOCKET_FACTORY_DEFAULT, "org.apache.hadoop.net.StandardSocketFactory");
- }
- break;
- }
- }
- }
- });
-
- }
-
- /**
- * Change notifications on properties (by name). A property might not be
- * reflected as a ConfProp enum. If it is, the notification is forwarded
- * to the ConfProp notifyChange method. If not, it is processed here.
- *
- * @param source
- * @param propName
- * @param propValue
- */
- void notifyChange(TabListener source, String propName, String propValue) {
- ConfProp prop = location.getConfPropForName(propName);
- if (prop != null)
- notifyChange(source, prop, propValue);
- else
- location.setConfPropValue(propName, propValue);
- }
-
- /**
- * Broadcast a property change to all registered tabs. If a tab is
- * identified as the source of the change, this tab will not be
- * notified.
- *
- * @param source
- * TODO
- * @param prop
- * @param value
- */
- private void fireChange(TabListener source, ConfProp prop, String value) {
- for (TabListener tab : tabs) {
- if (tab != source)
- tab.notifyChange(prop, value);
- }
- }
-
- }
-
- /**
- * Create a SWT Text component for the given {@link ConfProp} text
- * configuration property.
- *
- * @param listener
- * @param parent
- * @param prop
- * @return
- */
- private Text createConfText(ModifyListener listener, Composite parent, ConfProp prop) {
- Text text = new Text(parent, SWT.SINGLE | SWT.BORDER);
- GridData data = new GridData(GridData.FILL_HORIZONTAL);
- text.setLayoutData(data);
- text.setData("hProp",prop);
- text.setText(location.getConfPropValue(prop));
- text.addModifyListener(listener);
-
- return text;
- }
-
- /**
- * Create a SWT Checked Button component for the given {@link ConfProp}
- * boolean configuration property.
- *
- * @param listener
- * @param parent
- * @param prop
- * @return
- */
- private Button createConfCheckButton(SelectionListener listener, Composite parent, ConfProp prop, String text) {
- Button button = new Button(parent, SWT.CHECK);
- button.setText(text);
- button.setData("hProp", prop);
- button.setSelection(location.getConfPropValue(prop).equalsIgnoreCase("yes"));
- button.addSelectionListener(listener);
- return button;
- }
-
- /**
- * Create editor entry for the given configuration property. The editor is a
- * couple (Label, Text).
- *
- * @param listener
- * the listener to trigger on property change
- * @param parent
- * the SWT parent container
- * @param prop
- * the property to create an editor for
- * @param labelText
- * a label (null will defaults to the property name)
- *
- * @return a SWT Text field
- */
- private Text createConfLabelText(ModifyListener listener, Composite parent, ConfProp prop, String labelText) {
- Label label = new Label(parent, SWT.NONE);
- if (labelText == null)
- labelText = location.getConfPropName(prop);
- label.setText(labelText);
- return createConfText(listener, parent, prop);
- }
-
- /**
- * Create an editor entry for the given configuration name
- *
- * @param listener
- * the listener to trigger on property change
- * @param parent
- * the SWT parent container
- * @param propName
- * the name of the property to create an editor for
- * @param labelText
- * a label (null will defaults to the property name)
- *
- * @return a SWT Text field
- */
- private Text createConfNameEditor(ModifyListener listener, Composite parent, String propName, String labelText) {
-
- {
- ConfProp prop = location.getConfPropForName(propName);
- if (prop != null)
- return createConfLabelText(listener, parent, prop, labelText);
- }
-
- Label label = new Label(parent, SWT.NONE);
- if (labelText == null)
- labelText = propName;
- label.setText(labelText);
-
- Text text = new Text(parent, SWT.SINGLE | SWT.BORDER);
- GridData data = new GridData(GridData.FILL_HORIZONTAL);
- text.setLayoutData(data);
- text.setData("hPropName", propName);
- text.setText(location.getConfPropValue(propName));
- text.addModifyListener(listener);
-
- return text;
- }
-
- /**
- * Main parameters of the Hadoop location: <li>host and port of the
- * Map/Reduce master (Job tracker) <li>host and port of the DFS master (Name
- * node) <li>SOCKS proxy
- */
- private class TabMain implements TabListener, ModifyListener, SelectionListener {
-
- /**
- *
- */
-
- TabMediator mediator;
-
- Text locationName;
-
- Combo hadoopVersion;
-
- Text textJTHost;
-
-
- Text textNNHost;
-
- Button colocateMasters;
-
- Text textJTPort;
-
- Text textNNPort;
-
- Text userName;
-
- Button useSocksProxy;
-
- Text socksProxyHost;
-
- Text socksProxyPort;
-
- private Group groupMR;
-
- TabMain(TabMediator mediator) {
- this.mediator = mediator;
- TabItem tab = new TabItem(mediator.folder, SWT.NONE);
- tab.setText("General");
- tab.setToolTipText("General location parameters");
- tab.setImage(circle);
- tab.setControl(createControl(mediator.folder));
- }
-
- private Control createControl(Composite parent) {
-
- Composite panel = new Composite(parent, SWT.FILL);
- panel.setLayout(new GridLayout(2, false));
-
- GridData data;
-
- /*
- * Location name
- */
- {
- Composite subpanel = new Composite(panel, SWT.FILL);
- subpanel.setLayout(new GridLayout(2, false));
- data = new GridData();
- data.horizontalSpan = 2;
- data.horizontalAlignment = SWT.FILL;
- subpanel.setLayoutData(data);
-
- locationName = createConfLabelText(this, subpanel, ConfProp.PI_LOCATION_NAME, "&Location name:");
- }
- /*
- * Hadoop version
- */
- {
- Composite subpanel = new Composite(panel, SWT.FILL);
- subpanel.setLayout(new GridLayout(2, false));
- data = new GridData();
- data.horizontalSpan = 2;
- data.horizontalAlignment = SWT.FILL;
- subpanel.setLayoutData(data);
-
- Label label = new Label(subpanel, SWT.NONE);
- label.setText("&Hadoop Version:");
- Combo options = new Combo (subpanel, SWT.BORDER | SWT.READ_ONLY);
- options.add (HADOOP_1);
- options.add (HADOOP_2);
- options.select(0);
- options.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- options.addListener (SWT.Selection, new Listener () {
- @Override
- public void handleEvent(Event event) {
- final String selection = hadoopVersion.getText();
- if (location == null || !selection.equals(location.getVersion())) {
- Display.getDefault().syncExec(new Runnable() {
-
- @Override
- public void run() {
- try {
- location = AbstractHadoopCluster.createCluster(selection);
- location.setConfPropValue(ConfProp.PI_HADOOP_VERSION, selection);
- location.setConfPropValue(ConfProp.PI_LOCATION_NAME, "");
- for (TabListener tab : mediator.tabs) {
- tab.reloadData();
- }
- } catch (CoreException e) {
- MessageDialog.openError(Display.getDefault().getActiveShell(), "HDFS Error", "Unable to create HDFS site :"
- + e.getMessage());
- }
- }
- });
- }
-
- }
- });
- hadoopVersion = options;
- }
-
- /*
- * Map/Reduce group
- */
- {
- groupMR = new Group(panel, SWT.SHADOW_NONE);
- groupMR.setText("Map/Reduce Master");
- groupMR.setToolTipText("Address of the Map/Reduce master node " + "(the Job Tracker).");
- GridLayout layout = new GridLayout(2, false);
- groupMR.setLayout(layout);
- data = new GridData();
- data.verticalAlignment = SWT.FILL;
- data.horizontalAlignment = SWT.CENTER;
- data.widthHint = 250;
- groupMR.setLayoutData(data);
-
- // Job Tracker host
- Label label = new Label(groupMR, SWT.NONE);
- label.setText("Host:");
- data = new GridData(GridData.BEGINNING, GridData.CENTER, false, true);
- label.setLayoutData(data);
-
- textJTHost = createConfText(this, groupMR, ConfProp.PI_JOB_TRACKER_HOST);
- data = new GridData(GridData.FILL, GridData.CENTER, true, true);
- textJTHost.setLayoutData(data);
-
- // Job Tracker port
- label = new Label(groupMR, SWT.NONE);
- label.setText("Port:");
- data = new GridData(GridData.BEGINNING, GridData.CENTER, false, true);
- label.setLayoutData(data);
-
- textJTPort = createConfText(this, groupMR, ConfProp.PI_JOB_TRACKER_PORT);
- data = new GridData(GridData.FILL, GridData.CENTER, true, true);
- textJTPort.setLayoutData(data);
- }
-
- /*
- * DFS group
- */
- {
- Group groupDFS = new Group(panel, SWT.SHADOW_NONE);
- groupDFS.setText("DFS Master");
- groupDFS.setToolTipText("Address of the Distributed FileSystem " + "master node (the Name Node).");
- GridLayout layout = new GridLayout(2, false);
- groupDFS.setLayout(layout);
- data = new GridData();
- data.horizontalAlignment = SWT.CENTER;
- data.widthHint = 250;
- groupDFS.setLayoutData(data);
-
- colocateMasters = createConfCheckButton(this, groupDFS, ConfProp.PI_COLOCATE_MASTERS, "Use M/R Master host");
- data = new GridData();
- data.horizontalSpan = 2;
- colocateMasters.setLayoutData(data);
-
- // Job Tracker host
- Label label = new Label(groupDFS, SWT.NONE);
- data = new GridData();
- label.setText("Host:");
- label.setLayoutData(data);
-
- textNNHost = createConfText(this, groupDFS, ConfProp.PI_NAME_NODE_HOST);
-
- // Job Tracker port
- label = new Label(groupDFS, SWT.NONE);
- data = new GridData();
- label.setText("Port:");
- label.setLayoutData(data);
-
- textNNPort = createConfText(this, groupDFS, ConfProp.PI_NAME_NODE_PORT);
- }
-
- {
- Composite subpanel = new Composite(panel, SWT.FILL);
- subpanel.setLayout(new GridLayout(2, false));
- data = new GridData();
- data.horizontalSpan = 2;
- data.horizontalAlignment = SWT.FILL;
- subpanel.setLayoutData(data);
-
- userName = createConfLabelText(this, subpanel, ConfProp.PI_USER_NAME, "&User name:");
- }
-
- // SOCKS proxy group
- {
- Group groupSOCKS = new Group(panel, SWT.SHADOW_NONE);
- groupSOCKS.setText("SOCKS proxy");
- groupSOCKS.setToolTipText("Address of the SOCKS proxy to use " + "to connect to the infrastructure.");
- GridLayout layout = new GridLayout(2, false);
- groupSOCKS.setLayout(layout);
- data = new GridData();
- data.horizontalAlignment = SWT.CENTER;
- data.horizontalSpan = 2;
- data.widthHint = 250;
- groupSOCKS.setLayoutData(data);
-
- useSocksProxy = createConfCheckButton(this, groupSOCKS, ConfProp.PI_SOCKS_PROXY_ENABLE, "Enable SOCKS proxy");
- data = new GridData();
- data.horizontalSpan = 2;
- useSocksProxy.setLayoutData(data);
-
- // SOCKS proxy host
- Label label = new Label(groupSOCKS, SWT.NONE);
- data = new GridData();
- label.setText("Host:");
- label.setLayoutData(data);
-
- socksProxyHost = createConfText(this, groupSOCKS, ConfProp.PI_SOCKS_PROXY_HOST);
-
- // SOCKS proxy port
- label = new Label(groupSOCKS, SWT.NONE);
- data = new GridData();
- label.setText("Port:");
- label.setLayoutData(data);
-
- socksProxyPort = createConfText(this, groupSOCKS, ConfProp.PI_SOCKS_PROXY_PORT);
- }
-
- // Update the state of all widgets according to the current values!
- reloadConfProp(ConfProp.PI_COLOCATE_MASTERS);
- reloadConfProp(ConfProp.PI_SOCKS_PROXY_ENABLE);
- reloadConfProp(ConfProp.PI_HADOOP_VERSION);
-
- return panel;
- }
-
- /**
- * Reload the given configuration property value
- *
- * @param prop
- */
- private void reloadConfProp(ConfProp prop) {
- this.notifyChange(prop, location.getConfPropValue(prop));
- }
-
- @Override
- public void reloadData() {
- if (HADOOP_2.equals(hadoopVersion.getText())) {
- groupMR.setText("Resource Manager Master");
- groupMR.setToolTipText("Address of the Resouce manager node ");
- } else {
- groupMR.setText("Map/Reduce Master");
- groupMR.setToolTipText("Address of the Map/Reduce master node " + "(the Job Tracker).");
- }
- groupMR.layout(true);
- notifyChange(ConfProp.PI_JOB_TRACKER_HOST,location.getConfPropValue(ConfProp.PI_JOB_TRACKER_HOST));
- notifyChange(ConfProp.PI_JOB_TRACKER_PORT,location.getConfPropValue(ConfProp.PI_JOB_TRACKER_PORT));
- notifyChange(ConfProp.PI_USER_NAME,location.getConfPropValue(ConfProp.PI_USER_NAME));
- notifyChange(ConfProp.PI_NAME_NODE_HOST,location.getConfPropValue(ConfProp.PI_NAME_NODE_HOST));
- notifyChange(ConfProp.PI_USER_NAME,location.getConfPropValue(ConfProp.PI_USER_NAME));
- notifyChange(ConfProp.PI_COLOCATE_MASTERS,location.getConfPropValue(ConfProp.PI_COLOCATE_MASTERS));
- notifyChange(ConfProp.PI_SOCKS_PROXY_ENABLE,location.getConfPropValue(ConfProp.PI_SOCKS_PROXY_ENABLE));
- notifyChange(ConfProp.PI_SOCKS_PROXY_HOST,location.getConfPropValue(ConfProp.PI_SOCKS_PROXY_HOST));
- notifyChange(ConfProp.PI_SOCKS_PROXY_PORT,location.getConfPropValue(ConfProp.PI_SOCKS_PROXY_PORT));
- notifyChange(ConfProp.PI_LOCATION_NAME,location.getConfPropValue(ConfProp.PI_LOCATION_NAME));
- }
-
- public void notifyChange(ConfProp prop, String propValue) {
- switch (prop) {
- case PI_JOB_TRACKER_HOST: {
- textJTHost.setText(propValue);
- break;
- }
- case PI_JOB_TRACKER_PORT: {
- textJTPort.setText(propValue);
- break;
- }
- case PI_LOCATION_NAME: {
- locationName.setText(propValue);
- break;
- }
- case PI_USER_NAME: {
- userName.setText(propValue);
- break;
- }
- case PI_COLOCATE_MASTERS: {
- if (colocateMasters != null) {
- boolean colocate = propValue.equalsIgnoreCase("yes");
- colocateMasters.setSelection(colocate);
- if (textNNHost != null) {
- textNNHost.setEnabled(!colocate);
- }
- }
- break;
- }
- case PI_NAME_NODE_HOST: {
- textNNHost.setText(propValue);
- break;
- }
- case PI_NAME_NODE_PORT: {
- textNNPort.setText(propValue);
- break;
- }
- case PI_SOCKS_PROXY_ENABLE: {
- if (useSocksProxy != null) {
- boolean useProxy = propValue.equalsIgnoreCase("yes");
- useSocksProxy.setSelection(useProxy);
- if (socksProxyHost != null)
- socksProxyHost.setEnabled(useProxy);
- if (socksProxyPort != null)
- socksProxyPort.setEnabled(useProxy);
- }
- break;
- }
- case PI_SOCKS_PROXY_HOST: {
- socksProxyHost.setText(propValue);
- break;
- }
- case PI_SOCKS_PROXY_PORT: {
- socksProxyPort.setText(propValue);
- break;
- }
- }
- }
-
-
- /* @inheritDoc */
- public void modifyText(ModifyEvent e) {
- final Text text = (Text) e.widget;
- final ConfProp prop = (ConfProp) text.getData("hProp");
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- mediator.notifyChange(TabMain.this, prop, text.getText());
- }
- });
- }
-
- /* @inheritDoc */
- public void widgetDefaultSelected(SelectionEvent e) {
- this.widgetSelected(e);
- }
-
- /* @inheritDoc */
- public void widgetSelected(SelectionEvent e) {
- final Button button = (Button) e.widget;
- final ConfProp prop = (ConfProp) button.getData("hProp");
-
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- // We want to receive the update also!
- mediator.notifyChange(null, prop, button.getSelection() ? "yes" : "no");
- }
- });
- }
-
- }
-
- private class TabAdvanced implements TabListener, ModifyListener {
- TabMediator mediator;
- private Composite panel;
- private Map<String, Text> textMap = new TreeMap<String, Text>();
-
- TabAdvanced(TabMediator mediator) {
- this.mediator = mediator;
- TabItem tab = new TabItem(mediator.folder, SWT.NONE);
- tab.setText("Advanced parameters");
- tab.setToolTipText("Access to advanced Hadoop parameters");
- tab.setImage(circle);
- tab.setControl(createControl(mediator.folder));
-
- }
-
- private Control createControl(Composite parent) {
- ScrolledComposite sc = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
- panel=buildPanel(sc);
- sc.setContent(panel);
- sc.setExpandHorizontal(true);
- sc.setExpandVertical(true);
- sc.setMinSize(640, 480);
- sc.setMinSize(panel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
- return sc;
- }
-
- @Override
- public void reloadData() {
- ScrolledComposite parent = (ScrolledComposite)panel.getParent();
- panel.dispose();
- Composite panel = buildPanel(parent);
- parent.setContent(panel);
- parent.setMinSize(panel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
- parent.pack();
- parent.layout(true);
- this.panel=panel;
- }
-
- private Composite buildPanel(Composite parent) {
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.numColumns = 2;
- layout.makeColumnsEqualWidth = false;
- panel.setLayout(layout);
- panel.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 1, 1));
-
- // Sort by property name
- SortedMap<String, String> map = new TreeMap<String, String>();
- Iterator<Entry<String, String>> it = location.getConfiguration();
- while (it.hasNext()) {
- Entry<String, String> entry = it.next();
- map.put(entry.getKey(), entry.getValue());
- }
-
- for (Entry<String, String> entry : map.entrySet()) {
- Text text = createConfNameEditor(this, panel, entry.getKey(), null);
- textMap.put(entry.getKey(), text);
- }
- return panel;
- }
-
-
- public void notifyChange(ConfProp prop, final String propValue) {
- Text text = textMap.get(location.getConfPropName(prop));
- text.setText(propValue);
- }
-
- public void modifyText(ModifyEvent e) {
- final Text text = (Text) e.widget;
- Object hProp = text.getData("hProp");
- final ConfProp prop = (hProp != null) ? (ConfProp) hProp : null;
- Object hPropName = text.getData("hPropName");
- final String propName = (hPropName != null) ? (String) hPropName : null;
-
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- if (prop != null)
- mediator.notifyChange(TabAdvanced.this, prop, text.getText());
- else
- mediator.notifyChange(TabAdvanced.this, propName, text.getText());
- }
- });
- }
-
-
+ this.setControl(panel);
}
}