Package org.apache.hadoop.eclipse

Source Code of org.apache.hadoop.eclipse.MapReduceNature

/**
* 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.FileFilter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;

/**
* Class to configure and deconfigure an Eclipse project with the MapReduce
* project nature.
*/

public class MapReduceNature implements IProjectNature {

  public static final String ID = "org.apache.hadoop.eclipse.Nature";

  private IProject project;

  static Logger log = Logger.getLogger(MapReduceNature.class.getName());

  /**
   * Configures an Eclipse project as a MapReduce project by adding the
   * Hadoop libraries to a project's classpath.
   */
  public void configure() throws CoreException {
    String path =
        project.getPersistentProperty(new QualifiedName(Activator.PLUGIN_ID,
            "hadoop.runtime.path"));

    File dir = new File(path);
    final ArrayList<File> coreJars = new ArrayList<File>();
    dir.listFiles(new FileFilter() {
      public boolean accept(File pathname) {
        String fileName = pathname.getName();

        // get the hadoop core jar without touching test or examples
        // older version of hadoop don't use the word "core" -- eyhung
        if ((fileName.indexOf("hadoop") != -1) && (fileName.endsWith("jar"))
            && (fileName.indexOf("test") == -1)
            && (fileName.indexOf("examples") == -1)) {
          coreJars.add(pathname);
        }

        return false; // we don't care what this returns
      }
    });
    File dir2 = new File(path + File.separatorChar + "lib");
    if (dir2.exists() && dir2.isDirectory()) {
      dir2.listFiles(new FileFilter() {
        public boolean accept(File pathname) {
          if ((!pathname.isDirectory())
              && (pathname.getName().endsWith("jar"))) {
            coreJars.add(pathname);
          }

          return false; // we don't care what this returns
        }
      });
    }

    // Add Hadoop libraries onto classpath
    IJavaProject javaProject = JavaCore.create(getProject());
    // Bundle bundle = Activator.getDefault().getBundle();
    try {
      IClasspathEntry[] currentCp = javaProject.getRawClasspath();
      IClasspathEntry[] newCp =
          new IClasspathEntry[currentCp.length + coreJars.size()];
      System.arraycopy(currentCp, 0, newCp, 0, currentCp.length);

      final Iterator i = coreJars.iterator();
      int count = 0;
      while (i.hasNext()) {
        // for (int i = 0; i < s_coreJarNames.length; i++) {

        final File f = (File) i.next();
        // URL url = FileLocator.toFileURL(FileLocator.find(bundle, new
        // Path("lib/" + s_coreJarNames[i]), null));
        URL url = f.toURL();
        log.finer("hadoop library url.getPath() = " + url.getPath());

        newCp[newCp.length - 1 - count] =
            JavaCore.newLibraryEntry(new Path(url.getPath()), null, null);
        count++;
      }

      javaProject.setRawClasspath(newCp, new NullProgressMonitor());
    } catch (Exception e) {
      log.log(Level.SEVERE, "IOException generated in HadoukenNature.class",
          e);
    }
  }

  /**
   * Deconfigure a project from MapReduce status. Currently unimplemented.
   */
  public void deconfigure() throws CoreException {
    // TODO Auto-generated method stub

  }

  /**
   * Returns the project to which this project nature applies.
   */
  public IProject getProject() {
    return this.project;
  }

  /**
   * Sets the project to which this nature applies. Used when instantiating
   * this project nature runtime.
   */
  public void setProject(IProject project) {
    this.project = project;
  }
}
TOP

Related Classes of org.apache.hadoop.eclipse.MapReduceNature

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.