package org.testng.eclipse.buildpath; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.ClasspathContainerInitializer; import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; public class TestNGContainerInitializer extends ClasspathContainerInitializer { public static final String TESTNG_CONTAINER_ID = "org.testng.TESTNG_CONTAINER"; //$NON-NLS-1$ public final static IPath TESTNG_PATH = new Path(TESTNG_CONTAINER_ID); private static class TestNGContainer implements IClasspathContainer { private final IClasspathEntry[] fEntries; private final IPath fPath; public TestNGContainer(IPath path, IClasspathEntry[] entries) { fPath = path; fEntries = entries; } public IClasspathEntry[] getClasspathEntries() { return fEntries; } public String getDescription() { return "TestNG"; //$NON-NLS-1$ } public int getKind() { return IClasspathContainer.K_APPLICATION; } public IPath getPath() { return fPath; } } // @Override public void initialize(IPath containerPath, IJavaProject project) throws CoreException { if (isValidTestNGContainerPath(containerPath)) { IClasspathEntry[] entries = BuildPathSupport.getTestNGLibraryEntries(); TestNGContainer testNGContainer = new TestNGContainer(containerPath, entries); JavaCore.setClasspathContainer(containerPath, new IJavaProject[] { project }, new IClasspathContainer[] { testNGContainer }, null); } } private static boolean isValidTestNGContainerPath(IPath path) { return (path != null) && (path.segmentCount() == 1) && TESTNG_CONTAINER_ID.equals(path.segment(0)); } // @Override public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) { return true; } // @Override public void requestClasspathContainerUpdate(IPath containerPath, IJavaProject project, IClasspathContainer containerSuggestion) throws CoreException { JavaCore.setClasspathContainer(containerPath, new IJavaProject[] { project }, new IClasspathContainer[] { containerSuggestion }, null); } // @Override public Object getComparisonID(IPath containerPath, IJavaProject project) { return containerPath; } }