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

网格计算

开发平台:

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.launch;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import java.util.logging.Logger;
  22. import org.apache.hadoop.eclipse.servers.RunOnHadoopWizard;
  23. import org.eclipse.core.resources.IFile;
  24. import org.eclipse.core.resources.IResource;
  25. import org.eclipse.core.runtime.CoreException;
  26. import org.eclipse.debug.core.ILaunchConfiguration;
  27. import org.eclipse.debug.core.ILaunchConfigurationType;
  28. import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
  29. import org.eclipse.jdt.core.IJavaProject;
  30. import org.eclipse.jdt.core.IType;
  31. import org.eclipse.jdt.core.JavaCore;
  32. import org.eclipse.jdt.internal.debug.ui.launcher.JavaApplicationLaunchShortcut;
  33. import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
  34. import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
  35. import org.eclipse.jdt.launching.JavaRuntime;
  36. import org.eclipse.jface.wizard.IWizard;
  37. import org.eclipse.jface.wizard.WizardDialog;
  38. import org.eclipse.swt.widgets.Display;
  39. import org.eclipse.swt.widgets.Shell;
  40. /**
  41.  * Add a shortcut "Run on Hadoop" to the Run menu
  42.  */
  43. public class HadoopApplicationLaunchShortcut extends
  44.     JavaApplicationLaunchShortcut {
  45.   static Logger log =
  46.       Logger.getLogger(HadoopApplicationLaunchShortcut.class.getName());
  47.   // private ActionDelegate delegate = new RunOnHadoopActionDelegate();
  48.   public HadoopApplicationLaunchShortcut() {
  49.   }
  50.   /* @inheritDoc */
  51.   @Override
  52.   protected ILaunchConfiguration findLaunchConfiguration(IType type,
  53.       ILaunchConfigurationType configType) {
  54.     // Find an existing or create a launch configuration (Standard way)
  55.     ILaunchConfiguration iConf =
  56.         super.findLaunchConfiguration(type, configType);
  57.     ILaunchConfigurationWorkingCopy iConfWC;
  58.     try {
  59.       /*
  60.        * Tune the default launch configuration: setup run-time classpath
  61.        * manually
  62.        */
  63.       iConfWC = iConf.getWorkingCopy();
  64.       iConfWC.setAttribute(
  65.           IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, false);
  66.       List<String> classPath = new ArrayList<String>();
  67.       IResource resource = type.getResource();
  68.       IJavaProject project =
  69.           (IJavaProject) resource.getProject().getNature(JavaCore.NATURE_ID);
  70.       IRuntimeClasspathEntry cpEntry =
  71.           JavaRuntime.newDefaultProjectClasspathEntry(project);
  72.       classPath.add(0, cpEntry.getMemento());
  73.       iConfWC.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH,
  74.           classPath);
  75.     } catch (CoreException e) {
  76.       e.printStackTrace();
  77.       // FIXME Error dialog
  78.       return null;
  79.     }
  80.     /*
  81.      * Update the selected configuration with a specific Hadoop location
  82.      * target
  83.      */
  84.     IResource resource = type.getResource();
  85.     if (!(resource instanceof IFile))
  86.       return null;
  87.     RunOnHadoopWizard wizard =
  88.         new RunOnHadoopWizard((IFile) resource, iConfWC);
  89.     WizardDialog dialog =
  90.         new WizardDialog(Display.getDefault().getActiveShell(), wizard);
  91.     dialog.create();
  92.     dialog.setBlockOnOpen(true);
  93.     if (dialog.open() != WizardDialog.OK)
  94.       return null;
  95.     try {
  96.       iConfWC.doSave();
  97.     } catch (CoreException e) {
  98.       e.printStackTrace();
  99.       // FIXME Error dialog
  100.       return null;
  101.     }
  102.     return iConfWC;
  103.   }
  104.   /**
  105.    * Was used to run the RunOnHadoopWizard inside and provide it a
  106.    * ProgressMonitor
  107.    */
  108.   static class Dialog extends WizardDialog {
  109.     public Dialog(Shell parentShell, IWizard newWizard) {
  110.       super(parentShell, newWizard);
  111.     }
  112.     @Override
  113.     public void create() {
  114.       super.create();
  115.       ((RunOnHadoopWizard) getWizard())
  116.           .setProgressMonitor(getProgressMonitor());
  117.     }
  118.   }
  119. }