NewMapReduceProjectWizard.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:14k
源码类别:
网格计算
开发平台:
Java
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.hadoop.eclipse;
- import java.io.File;
- import java.io.FilenameFilter;
- import java.lang.reflect.InvocationTargetException;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import org.apache.hadoop.eclipse.preferences.MapReducePreferencePage;
- import org.apache.hadoop.eclipse.preferences.PreferenceConstants;
- import org.eclipse.core.resources.IProject;
- import org.eclipse.core.resources.IProjectDescription;
- import org.eclipse.core.resources.ResourcesPlugin;
- import org.eclipse.core.runtime.CoreException;
- import org.eclipse.core.runtime.IConfigurationElement;
- import org.eclipse.core.runtime.IExecutableExtension;
- import org.eclipse.core.runtime.IProgressMonitor;
- import org.eclipse.core.runtime.NullProgressMonitor;
- import org.eclipse.core.runtime.Path;
- import org.eclipse.core.runtime.QualifiedName;
- import org.eclipse.core.runtime.SubProgressMonitor;
- import org.eclipse.jdt.ui.wizards.NewJavaProjectWizardPage;
- import org.eclipse.jface.dialogs.IDialogConstants;
- import org.eclipse.jface.operation.IRunnableWithProgress;
- import org.eclipse.jface.preference.PreferenceDialog;
- import org.eclipse.jface.preference.PreferenceManager;
- import org.eclipse.jface.preference.PreferenceNode;
- import org.eclipse.jface.viewers.IStructuredSelection;
- import org.eclipse.jface.wizard.IWizardPage;
- import org.eclipse.jface.wizard.Wizard;
- 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.DirectoryDialog;
- import org.eclipse.swt.widgets.Group;
- import org.eclipse.swt.widgets.Link;
- import org.eclipse.swt.widgets.Text;
- import org.eclipse.ui.IWorkbench;
- import org.eclipse.ui.IWorkbenchWizard;
- import org.eclipse.ui.PlatformUI;
- import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
- import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
- /**
- * Wizard for creating a new MapReduce Project
- *
- */
- public class NewMapReduceProjectWizard extends Wizard implements
- IWorkbenchWizard, IExecutableExtension {
- static Logger log =
- Logger.getLogger(NewMapReduceProjectWizard.class.getName());
- private HadoopFirstPage firstPage;
- private NewJavaProjectWizardPage javaPage;
- public NewDriverWizardPage newDriverPage;
- private IConfigurationElement config;
- public NewMapReduceProjectWizard() {
- setWindowTitle("New MapReduce Project Wizard");
- }
- public void init(IWorkbench workbench, IStructuredSelection selection) {
- }
- @Override
- public boolean canFinish() {
- return firstPage.isPageComplete() && javaPage.isPageComplete()
- // && ((!firstPage.generateDriver.getSelection())
- // || newDriverPage.isPageComplete()
- ;
- }
- @Override
- public IWizardPage getNextPage(IWizardPage page) {
- // if (page == firstPage
- // && firstPage.generateDriver.getSelection()
- // )
- // {
- // return newDriverPage; // if "generate mapper" checked, second page is
- // new driver page
- // }
- // else
- // {
- IWizardPage answer = super.getNextPage(page);
- if (answer == newDriverPage) {
- return null; // dont flip to new driver page unless "generate
- // driver" is checked
- } else if (answer == javaPage) {
- return answer;
- } else {
- return answer;
- }
- // }
- }
- @Override
- public IWizardPage getPreviousPage(IWizardPage page) {
- if (page == newDriverPage) {
- return firstPage; // newDriverPage, if it appears, is the second
- // page
- } else {
- return super.getPreviousPage(page);
- }
- }
- static class HadoopFirstPage extends WizardNewProjectCreationPage
- implements SelectionListener {
- public HadoopFirstPage() {
- super("New Hadoop Project");
- setImageDescriptor(ImageLibrary.get("wizard.mapreduce.project.new"));
- }
- private Link openPreferences;
- private Button workspaceHadoop;
- private Button projectHadoop;
- private Text location;
- private Button browse;
- private String path;
- public String currentPath;
- // private Button generateDriver;
- @Override
- public void createControl(Composite parent) {
- super.createControl(parent);
- setTitle("MapReduce Project");
- setDescription("Create a MapReduce project.");
- Group group = new Group((Composite) getControl(), SWT.NONE);
- group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- group.setText("Hadoop MapReduce Library Installation Path");
- GridLayout layout = new GridLayout(3, true);
- layout.marginLeft =
- convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
- layout.marginRight =
- convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
- layout.marginTop =
- convertHorizontalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
- layout.marginBottom =
- convertHorizontalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
- group.setLayout(layout);
- workspaceHadoop = new Button(group, SWT.RADIO);
- GridData d =
- new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false);
- d.horizontalSpan = 2;
- workspaceHadoop.setLayoutData(d);
- // workspaceHadoop.setText("Use default workbench Hadoop library
- // location");
- workspaceHadoop.setSelection(true);
- updateHadoopDirLabelFromPreferences();
- openPreferences = new Link(group, SWT.NONE);
- openPreferences
- .setText("<a>Configure Hadoop install directory...</a>");
- openPreferences.setLayoutData(new GridData(GridData.END,
- GridData.CENTER, false, false));
- openPreferences.addSelectionListener(this);
- projectHadoop = new Button(group, SWT.RADIO);
- projectHadoop.setLayoutData(new GridData(GridData.BEGINNING,
- GridData.CENTER, false, false));
- projectHadoop.setText("Specify Hadoop library location");
- location = new Text(group, SWT.SINGLE | SWT.BORDER);
- location.setText("");
- d = new GridData(GridData.END, GridData.CENTER, true, false);
- d.horizontalSpan = 1;
- d.widthHint = 250;
- d.grabExcessHorizontalSpace = true;
- location.setLayoutData(d);
- location.setEnabled(false);
- browse = new Button(group, SWT.NONE);
- browse.setText("Browse...");
- browse.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
- false, false));
- browse.setEnabled(false);
- browse.addSelectionListener(this);
- projectHadoop.addSelectionListener(this);
- workspaceHadoop.addSelectionListener(this);
- // generateDriver = new Button((Composite) getControl(), SWT.CHECK);
- // generateDriver.setText("Generate a MapReduce driver");
- // generateDriver.addListener(SWT.Selection, new Listener()
- // {
- // public void handleEvent(Event event) {
- // getContainer().updateButtons(); }
- // });
- }
- @Override
- public boolean isPageComplete() {
- boolean validHadoop = validateHadoopLocation();
- if (!validHadoop && isCurrentPage()) {
- setErrorMessage("Invalid Hadoop Runtime specified; please click 'Configure Hadoop install directory' or fill in library location input field");
- } else {
- setErrorMessage(null);
- }
- return super.isPageComplete() && validHadoop;
- }
- private boolean validateHadoopLocation() {
- FilenameFilter gotHadoopJar = new FilenameFilter() {
- public boolean accept(File dir, String name) {
- return (name.startsWith("hadoop") && name.endsWith(".jar")
- && (name.indexOf("test") == -1) && (name.indexOf("examples") == -1));
- }
- };
- if (workspaceHadoop.getSelection()) {
- this.currentPath = path;
- return new Path(path).toFile().exists()
- && (new Path(path).toFile().list(gotHadoopJar).length > 0);
- } else {
- this.currentPath = location.getText();
- File file = new Path(location.getText()).toFile();
- return file.exists()
- && (new Path(location.getText()).toFile().list(gotHadoopJar).length > 0);
- }
- }
- private void updateHadoopDirLabelFromPreferences() {
- path =
- Activator.getDefault().getPreferenceStore().getString(
- PreferenceConstants.P_PATH);
- if ((path != null) && (path.length() > 0)) {
- workspaceHadoop.setText("Use default Hadoop");
- } else {
- workspaceHadoop.setText("Use default Hadoop (currently not set)");
- }
- }
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- if (e.getSource() == openPreferences) {
- PreferenceManager manager = new PreferenceManager();
- manager.addToRoot(new PreferenceNode(
- "Hadoop Installation Directory", new MapReducePreferencePage()));
- PreferenceDialog dialog =
- new PreferenceDialog(this.getShell(), manager);
- dialog.create();
- dialog.setMessage("Select Hadoop Installation Directory");
- dialog.setBlockOnOpen(true);
- dialog.open();
- updateHadoopDirLabelFromPreferences();
- } else if (e.getSource() == browse) {
- DirectoryDialog dialog = new DirectoryDialog(this.getShell());
- dialog
- .setMessage("Select a hadoop installation, containing hadoop-X-core.jar");
- dialog.setText("Select Hadoop Installation Directory");
- String directory = dialog.open();
- if (directory != null) {
- location.setText(directory);
- if (!validateHadoopLocation()) {
- setErrorMessage("No Hadoop jar found in specified directory");
- } else {
- setErrorMessage(null);
- }
- }
- } else if (projectHadoop.getSelection()) {
- location.setEnabled(true);
- browse.setEnabled(true);
- } else {
- location.setEnabled(false);
- browse.setEnabled(false);
- }
- getContainer().updateButtons();
- }
- }
- @Override
- public void addPages() {
- /*
- * firstPage = new HadoopFirstPage(); addPage(firstPage ); addPage( new
- * JavaProjectWizardSecondPage(firstPage) );
- */
- firstPage = new HadoopFirstPage();
- javaPage =
- new NewJavaProjectWizardPage(ResourcesPlugin.getWorkspace()
- .getRoot(), firstPage);
- // newDriverPage = new NewDriverWizardPage(false);
- // newDriverPage.setPageComplete(false); // ensure finish button
- // initially disabled
- addPage(firstPage);
- addPage(javaPage);
- // addPage(newDriverPage);
- }
- @Override
- public boolean performFinish() {
- try {
- PlatformUI.getWorkbench().getProgressService().runInUI(
- this.getContainer(), new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) {
- try {
- monitor.beginTask("Create Hadoop Project", 300);
- javaPage.getRunnable().run(
- new SubProgressMonitor(monitor, 100));
- // if( firstPage.generateDriver.getSelection())
- // {
- // newDriverPage.setPackageFragmentRoot(javaPage.getNewJavaProject().getAllPackageFragmentRoots()[0],
- // false);
- // newDriverPage.getRunnable().run(new
- // SubProgressMonitor(monitor,100));
- // }
- IProject project =
- javaPage.getNewJavaProject().getResource().getProject();
- IProjectDescription description = project.getDescription();
- String[] existingNatures = description.getNatureIds();
- String[] natures = new String[existingNatures.length + 1];
- for (int i = 0; i < existingNatures.length; i++) {
- natures[i + 1] = existingNatures[i];
- }
- natures[0] = MapReduceNature.ID;
- description.setNatureIds(natures);
- project.setPersistentProperty(new QualifiedName(
- Activator.PLUGIN_ID, "hadoop.runtime.path"),
- firstPage.currentPath);
- project.setDescription(description,
- new NullProgressMonitor());
- String[] natureIds = project.getDescription().getNatureIds();
- for (int i = 0; i < natureIds.length; i++) {
- log.fine("Nature id # " + i + " > " + natureIds[i]);
- }
- monitor.worked(100);
- monitor.done();
- BasicNewProjectResourceWizard.updatePerspective(config);
- } catch (CoreException e) {
- // TODO Auto-generated catch block
- log.log(Level.SEVERE, "CoreException thrown.", e);
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }, null);
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return true;
- }
- public void setInitializationData(IConfigurationElement config,
- String propertyName, Object data) throws CoreException {
- this.config = config;
- }
- }