/*******************************************************************************
* Copyright (c) 2017 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.windup.model.util;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.m2e.core.internal.MavenPluginActivator;
import org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import com.google.common.collect.Lists;
@SuppressWarnings("restriction")
public class MavenUtil {
public static class ProjectInfo {
private String name;
private IProject project;
private ProjectInfo parent;
private List<ProjectInfo> projects;
private List<ProjectInfo> missingProjects;
public ProjectInfo (String name, IProject project) {
this.name = name;
this.project = project;
this.projects = Lists.newArrayList();
this.missingProjects = Lists.newArrayList();
}
public ProjectInfo(String name, IProject project, ProjectInfo parent) {
this(name, project);
this.parent = parent;
}
public String getName() {
return name;
}
public IProject getProject() {
return project;
}
public ProjectInfo getParent() {
return parent;
}
public List<ProjectInfo> getProjects() {
return projects;
}
public void addProject(IProject moduleProject) {
projects.add(new ProjectInfo(moduleProject.getName(), moduleProject, this));
}
public List<ProjectInfo> getMissingProjects() {
return missingProjects;
}
public void addMissingProject(String missingProject) {
missingProjects.add(new ProjectInfo(missingProject, null, this));
}
public boolean hasChildren() {
return !projects.isEmpty() || !missingProjects.isEmpty();
}
public boolean projectExists() {
return project != null && project.exists();
}
public ProjectInfo getTopProject() {
if (parent != null) {
return parent.getTopProject();
}
return this;
}
public boolean isParentProject() {
return parent == null;
}
}
public static ProjectInfo computeProjectInfo(IProject project) {
ProjectInfo mavenModuleResult = new ProjectInfo(project.getName(), project);
ProjectRegistryManager mavenProjectManager = MavenPluginActivator.getDefault().getMavenProjectManagerImpl();
IMavenProjectFacade mavenFacade = mavenProjectManager.create(project, new NullProgressMonitor());
if (mavenFacade != null) {
List<String> modules = mavenFacade.getMavenProjectModules();
for (String module : modules) {
IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(module);
if (resource != null && resource instanceof IProject) {
IProject moduleProject = (IProject) resource;
if (moduleProject.exists() && moduleProject.isAccessible()) {
mavenModuleResult.addProject(moduleProject);
}
else {
mavenModuleResult.addMissingProject(module);
}
}
else {
mavenModuleResult.addMissingProject(module);
}
}
}
return mavenModuleResult;
}
}