| /** |
| * 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 Map/Reduce 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<File> 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.toURI().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 " |
| + this.getClass().getCanonicalName(), 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; |
| } |
| |
| } |