NewDriverWizardPage.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:9k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.eclipse;
  19. import java.io.IOException;
  20. import java.util.ArrayList;
  21. import org.eclipse.core.runtime.CoreException;
  22. import org.eclipse.core.runtime.FileLocator;
  23. import org.eclipse.core.runtime.IProgressMonitor;
  24. import org.eclipse.core.runtime.IStatus;
  25. import org.eclipse.core.runtime.Path;
  26. import org.eclipse.jdt.core.IType;
  27. import org.eclipse.jdt.core.JavaModelException;
  28. import org.eclipse.jdt.core.search.SearchEngine;
  29. import org.eclipse.jdt.ui.IJavaElementSearchConstants;
  30. import org.eclipse.jdt.ui.JavaUI;
  31. import org.eclipse.jdt.ui.wizards.NewTypeWizardPage;
  32. import org.eclipse.jface.dialogs.ProgressMonitorDialog;
  33. import org.eclipse.jface.resource.ImageDescriptor;
  34. import org.eclipse.jface.viewers.IStructuredSelection;
  35. import org.eclipse.jface.window.Window;
  36. import org.eclipse.swt.SWT;
  37. import org.eclipse.swt.layout.GridData;
  38. import org.eclipse.swt.layout.GridLayout;
  39. import org.eclipse.swt.widgets.Button;
  40. import org.eclipse.swt.widgets.Composite;
  41. import org.eclipse.swt.widgets.Event;
  42. import org.eclipse.swt.widgets.Label;
  43. import org.eclipse.swt.widgets.Listener;
  44. import org.eclipse.swt.widgets.Text;
  45. import org.eclipse.ui.dialogs.SelectionDialog;
  46. /**
  47.  * Pre-fills the new MapReduce driver class with a template.
  48.  * 
  49.  */
  50. public class NewDriverWizardPage extends NewTypeWizardPage {
  51.   private Button isCreateMapMethod;
  52.   private Text reducerText;
  53.   private Text mapperText;
  54.   private final boolean showContainerSelector;
  55.   public NewDriverWizardPage() {
  56.     this(true);
  57.   }
  58.   public NewDriverWizardPage(boolean showContainerSelector) {
  59.     super(true, "MapReduce Driver");
  60.     this.showContainerSelector = showContainerSelector;
  61.     setTitle("MapReduce Driver");
  62.     setDescription("Create a new MapReduce driver.");
  63.     setImageDescriptor(ImageLibrary.get("wizard.driver.new"));
  64.   }
  65.   public void setSelection(IStructuredSelection selection) {
  66.     initContainerPage(getInitialJavaElement(selection));
  67.     initTypePage(getInitialJavaElement(selection));
  68.   }
  69.   @Override
  70.   /**
  71.    * Creates the new type using the entered field values.
  72.    */
  73.   public void createType(IProgressMonitor monitor) throws CoreException,
  74.       InterruptedException {
  75.     super.createType(monitor);
  76.   }
  77.   @Override
  78.   protected void createTypeMembers(final IType newType, ImportsManager imports,
  79.       final IProgressMonitor monitor) throws CoreException {
  80.     super.createTypeMembers(newType, imports, monitor);
  81.     imports.addImport("org.apache.hadoop.fs.Path");
  82.     imports.addImport("org.apache.hadoop.io.Text");
  83.     imports.addImport("org.apache.hadoop.io.IntWritable");
  84.     imports.addImport("org.apache.hadoop.mapred.JobClient");
  85.     imports.addImport("org.apache.hadoop.mapred.JobConf");
  86.     imports.addImport("org.apache.hadoop.mapred.Reducer");
  87.     imports.addImport("org.apache.hadoop.mapred.Mapper");
  88.     /**
  89.      * TODO(jz) - move most code out of the runnable
  90.      */
  91.     getContainer().getShell().getDisplay().syncExec(new Runnable() {
  92.       public void run() {
  93.         String method = "public static void main(String[] args) {n JobClient client = new JobClient();";
  94.         method += "JobConf conf = new JobConf("
  95.             + newType.getFullyQualifiedName() + ".class);nn";
  96.         method += "// TODO: specify output typesnconf.setOutputKeyClass(Text.class);nconf.setOutputValueClass(IntWritable.class);nn";
  97.         method += "// TODO: specify input and output DIRECTORIES (not files)nconf.setInputPath(new Path("src"));nconf.setOutputPath(new Path("out"));nn";
  98.         if (mapperText.getText().length() > 0) {
  99.           method += "conf.setMapperClass(" + mapperText.getText()
  100.               + ".class);nn";
  101.         } else {
  102.           method += "// TODO: specify a mappernconf.setMapperClass(org.apache.hadoop.mapred.lib.IdentityMapper.class);nn";
  103.         }
  104.         if (reducerText.getText().length() > 0) {
  105.           method += "conf.setReducerClass(" + reducerText.getText()
  106.               + ".class);nn";
  107.         } else {
  108.           method += "// TODO: specify a reducernconf.setReducerClass(org.apache.hadoop.mapred.lib.IdentityReducer.class);nn";
  109.         }
  110.         method += "client.setConf(conf);n";
  111.         method += "try {ntJobClient.runJob(conf);n} catch (Exception e) {n"
  112.             + "te.printStackTrace();n}n";
  113.         method += "}n";
  114.         try {
  115.           newType.createMethod(method, null, false, monitor);
  116.         } catch (JavaModelException e) {
  117.           // TODO Auto-generated catch block
  118.           e.printStackTrace();
  119.         }
  120.       }
  121.     });
  122.   }
  123.   public void createControl(Composite parent) {
  124.     // super.createControl(parent);
  125.     initializeDialogUnits(parent);
  126.     Composite composite = new Composite(parent, SWT.NONE);
  127.     GridLayout layout = new GridLayout();
  128.     layout.numColumns = 4;
  129.     composite.setLayout(layout);
  130.     createContainerControls(composite, 4);
  131.     createPackageControls(composite, 4);
  132.     createSeparator(composite, 4);
  133.     createTypeNameControls(composite, 4);
  134.     createSuperClassControls(composite, 4);
  135.     createSuperInterfacesControls(composite, 4);
  136.     createSeparator(composite, 4);
  137.     createMapperControls(composite);
  138.     createReducerControls(composite);
  139.     if (!showContainerSelector) {
  140.       setPackageFragmentRoot(null, false);
  141.       setSuperClass("java.lang.Object", false);
  142.       setSuperInterfaces(new ArrayList(), false);
  143.     }
  144.     setControl(composite);
  145.     setFocus();
  146.     handleFieldChanged(CONTAINER);
  147.     // setSuperClass("org.apache.hadoop.mapred.MapReduceBase", true);
  148.     // setSuperInterfaces(Arrays.asList(new String[]{
  149.     // "org.apache.hadoop.mapred.Mapper" }), true);
  150.   }
  151.   @Override
  152.   protected void handleFieldChanged(String fieldName) {
  153.     super.handleFieldChanged(fieldName);
  154.     validate();
  155.   }
  156.   private void validate() {
  157.     if (showContainerSelector) {
  158.       updateStatus(new IStatus[] { fContainerStatus, fPackageStatus,
  159.           fTypeNameStatus, fSuperClassStatus, fSuperInterfacesStatus });
  160.     } else {
  161.       updateStatus(new IStatus[] { fTypeNameStatus, });
  162.     }
  163.   }
  164.   private void createMapperControls(Composite composite) {
  165.     this.mapperText = createBrowseClassControl(composite, "Ma&pper:",
  166.         "&Browse...", "org.apache.hadoop.mapred.Mapper", "Mapper Selection");
  167.   }
  168.   private void createReducerControls(Composite composite) {
  169.     this.reducerText = createBrowseClassControl(composite, "&Reducer:",
  170.         "Browse&...", "org.apache.hadoop.mapred.Reducer", "Reducer Selection");
  171.   }
  172.   private Text createBrowseClassControl(final Composite composite,
  173.       final String string, String browseButtonLabel,
  174.       final String baseClassName, final String dialogTitle) {
  175.     Label label = new Label(composite, SWT.NONE);
  176.     GridData data = new GridData(GridData.FILL_HORIZONTAL);
  177.     label.setText(string);
  178.     label.setLayoutData(data);
  179.     final Text text = new Text(composite, SWT.SINGLE | SWT.BORDER);
  180.     GridData data2 = new GridData(GridData.FILL_HORIZONTAL);
  181.     data2.horizontalSpan = 2;
  182.     text.setLayoutData(data2);
  183.     Button browse = new Button(composite, SWT.NONE);
  184.     browse.setText(browseButtonLabel);
  185.     GridData data3 = new GridData(GridData.FILL_HORIZONTAL);
  186.     browse.setLayoutData(data3);
  187.     browse.addListener(SWT.Selection, new Listener() {
  188.       public void handleEvent(Event event) {
  189.         IType baseType;
  190.         try {
  191.           baseType = getPackageFragmentRoot().getJavaProject().findType(
  192.               baseClassName);
  193.           // edit this to limit the scope
  194.           SelectionDialog dialog = JavaUI.createTypeDialog(
  195.               composite.getShell(), new ProgressMonitorDialog(composite
  196.                   .getShell()), SearchEngine.createHierarchyScope(baseType),
  197.               IJavaElementSearchConstants.CONSIDER_CLASSES, false);
  198.           dialog.setMessage("&Choose a type:");
  199.           dialog.setBlockOnOpen(true);
  200.           dialog.setTitle(dialogTitle);
  201.           dialog.open();
  202.           if ((dialog.getReturnCode() == Window.OK)
  203.               && (dialog.getResult().length > 0)) {
  204.             IType type = (IType) dialog.getResult()[0];
  205.             text.setText(type.getFullyQualifiedName());
  206.           }
  207.         } catch (JavaModelException e) {
  208.           // TODO Auto-generated catch block
  209.           e.printStackTrace();
  210.         }
  211.       }
  212.     });
  213.     if (!showContainerSelector) {
  214.       label.setEnabled(false);
  215.       text.setEnabled(false);
  216.       browse.setEnabled(false);
  217.     }
  218.     return text;
  219.   }
  220. }