Package org.apache.hadoop.eclipse

Source Code of org.apache.hadoop.eclipse.NewMapReduceProjectWizard$HadoopFirstPage

/**
* 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.HadoopHomeDirPreferencePage;
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.FileLocator;
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.resource.ImageDescriptor;
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");

      try {
        setImageDescriptor(ImageDescriptor.createFromURL((FileLocator
            .toFileURL(FileLocator.find(Activator.getDefault().getBundle(),
                new Path("resources/projwiz.png"), null)))));
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }

    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 HadoopHomeDirPreferencePage()));
        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;
  }
}
TOP

Related Classes of org.apache.hadoop.eclipse.NewMapReduceProjectWizard$HadoopFirstPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.