/*******************************************************************************
* 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.plain.server.projecttype;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.project.server.ProjectRegistry;
import org.eclipse.che.api.project.server.RegisteredProject;
import org.eclipse.che.ide.ext.java.shared.Constants;
import org.eclipse.che.plugin.java.server.projecttype.AbstractJavaInitHandler;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.List;
import static org.eclipse.che.ide.ext.java.shared.Constants.JAVAC;
import static org.eclipse.che.plugin.java.plain.shared.PlainJavaProjectConstants.LIBRARY_FOLDER;
/**
* Init handler for simple java project.
* Initialize classpath with JRE classpath entry container and 'src' source classpath entry.
*
* @author Evgen Vidolob
* @author Valeriy Svydenko
*/
public class PlainJavaInitHandler extends AbstractJavaInitHandler {
private final ClasspathBuilder classpathBuilder;
private final Provider<ProjectRegistry> projectRegistryProvider;
@Inject
public PlainJavaInitHandler(ClasspathBuilder classpathBuilder, Provider<ProjectRegistry> projectRegistryProvider) {
this.classpathBuilder = classpathBuilder;
this.projectRegistryProvider = projectRegistryProvider;
}
private static final Logger LOG = LoggerFactory.getLogger(PlainJavaInitHandler.class);
@Override
protected void initializeClasspath(IJavaProject javaProject) throws ServerException {
IClasspathEntry[] projectClasspath;
try {
projectClasspath = javaProject.getRawClasspath();
} catch (JavaModelException e) {
LOG.warn("Can't get classpath for: " + javaProject.getProject().getFullPath().toOSString(), e);
throw new ServerException(e);
}
//default classpath
IClasspathEntry[] defaultClasspath = new IClasspathEntry[]{JavaCore.newSourceEntry(javaProject.getPath())};
if (!Arrays.equals(defaultClasspath, projectClasspath)) {
//classpath is already initialized
return;
}
RegisteredProject project = projectRegistryProvider.get().getProject(javaProject.getPath().toOSString());
List<String> sourceFolders = project.getAttributes().get(Constants.SOURCE_FOLDER);
List<String> library = project.getAttributes().get(LIBRARY_FOLDER);
classpathBuilder.generateClasspath(javaProject, sourceFolders, library);
}
@Override
public String getProjectType() {
return JAVAC;
}
}