/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.java.server.projecttype; import com.google.inject.Inject; import org.eclipse.che.api.core.ConflictException; import org.eclipse.che.api.core.ForbiddenException; import org.eclipse.che.api.core.NotFoundException; import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.project.server.FolderEntry; import org.eclipse.che.api.project.server.ProjectRegistry; import org.eclipse.che.api.project.server.handlers.ProjectInitHandler; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; /** * General handler for initializing Java project. * Basically all you need, for different Java project,is configuring classpath. * For that you need to implement {@link #initializeClasspath(IJavaProject)} * Sample of classpath configuration: * <br /> * <pre> * IClasspathEntry jreContainer = JavaCore.newContainerEntry(new Path(JREContainerInitializer.JRE_CONTAINER)); * javaProject.setRawClasspath(new IClasspathEntry[]{jreContainer}, null); * </pre> * * This configuration just add classpath container for JRE(rt.jar). * For more details see {@link PlainJavaInitHandler} * * @author Evgen Vidolob */ public abstract class AbstractJavaInitHandler implements ProjectInitHandler { private ResourcesPlugin plugin; @Inject void init(ResourcesPlugin plugin) { this.plugin = plugin; } @Override public final void onProjectInitialized(ProjectRegistry registry, FolderEntry projectFolder) throws ServerException, ForbiddenException, ConflictException, NotFoundException { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectFolder.getPath().toString()); IJavaProject javaProject = JavaCore.create(project); initializeClasspath(javaProject); } /** * Implementation of this method assumed to configure Java project classpath. * For configuration create array of {@link org.eclipse.jdt.core.IClasspathEntry} and * call {@link IJavaProject#setRawClasspath(IClasspathEntry[], IProgressMonitor)} method. * Note: classpath must contain dependencies and path to sources * * @param javaProject the Java project to classpath initializing * @throws ServerException when any error happened */ protected abstract void initializeClasspath(IJavaProject javaProject) throws ServerException; }