All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.echocat.jomon.maven.MavenProjectWithModulesFactory Maven / Gradle / Ivy

There is a newer version: 1.6.3
Show newest version
/*****************************************************************************************
 * *** BEGIN LICENSE BLOCK *****
 *
 * Version: MPL 2.0
 *
 * echocat Jomon, Copyright (c) 2012-2013 echocat
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * *** END LICENSE BLOCK *****
 ****************************************************************************************/

package org.echocat.jomon.maven;

import org.apache.maven.project.*;

import javax.annotation.Nonnull;
import java.io.File;
import java.util.*;
import java.util.Map.Entry;

import static java.util.Arrays.asList;

public class MavenProjectWithModulesFactory {
    
    @Nonnull
    public MavenProjectWithModules createFor(@Nonnull MavenEnvironment environment, @Nonnull File pomFile) throws Exception {
        final ProjectBuildingRequest request = createRequest(environment);
        return createProjectBy(environment, pomFile, request);
    }

    @Nonnull
    protected ProjectBuildingRequest createRequest(@Nonnull MavenEnvironment environment) {
        final DefaultProjectBuildingRequest request = new DefaultProjectBuildingRequest();
        request.setLocalRepository(environment.getRequest().getLocalRepository());
        request.setRemoteRepositories(environment.getRequest().getRemoteRepositories());
        request.setProfiles(environment.getRequest().getProfiles());
        request.setSystemProperties(environment.getRequest().getSystemProperties());
        request.setUserProperties(environment.getRequest().getUserProperties());
        request.setRepositorySession(environment.getRepositorySystemSession());
        return request;
    }

    @Nonnull
    protected MavenProjectWithModules createProjectBy(@Nonnull MavenEnvironment environment, @Nonnull File pomFile, @Nonnull ProjectBuildingRequest request) throws Exception {
        final List results = environment.getProjectBuilder().build(asList(pomFile), true, request);
        return resultsToProject(pomFile, results);
    }

    @Nonnull
    protected MavenProjectWithModules resultsToProject(@Nonnull File basePomFile, @Nonnull List results) throws Exception {
        final Map projectToProjectWithModules = new HashMap<>();
        for (final ProjectBuildingResult result : results) {
            if (!result.getProblems().isEmpty()) {
                throw new ProjectBuildingException(results);
            }
            final MavenProjectWithModules projectWithModules = getMavenProjectWithModules(result, projectToProjectWithModules);
            resolveModulesFor(projectWithModules, result, results, projectToProjectWithModules);
        }
        return selectBaseProject(basePomFile.getCanonicalFile(), projectToProjectWithModules);
    }

    private MavenProjectWithModules selectBaseProject(File by, Map from) throws Exception {
        MavenProjectWithModules result = null;
        for (final Entry projectAndProjectWithModules : from.entrySet()) {
            final MavenProject project = projectAndProjectWithModules.getKey();
            if (project.getFile() != null && by.equals(project.getFile().getCanonicalFile())) {
                result = projectAndProjectWithModules.getValue();
                break;
            }
        }
        if (result == null) {
            throw new IllegalStateException("Could not find any project for base pom '" + by + "' in " + from.values() + ".");
        }
        return result;
    }

    @Nonnull
    protected void resolveModulesFor(@Nonnull MavenProjectWithModules of, @Nonnull ProjectBuildingResult forResult, @Nonnull List fromResults, @Nonnull Map withProjectToProjectWithModules) throws Exception {
        for (final ProjectBuildingResult result : fromResults) {
            if (!result.getProblems().isEmpty()) {
                throw new ProjectBuildingException(fromResults);
            }
            for (final String moduleName : forResult.getProject().getModules()) {
                final File pomFile = result.getPomFile();
                final File expectedFile = new File(forResult.getPomFile().getParentFile(), moduleName + File.separator + pomFile.getName());
                if (expectedFile.getCanonicalFile().equals(pomFile.getCanonicalFile())) {
                    of.addModule(getMavenProjectWithModules(result, withProjectToProjectWithModules));
                    break;
                }
            }

        }
    }

    @Nonnull
    protected MavenProjectWithModules getMavenProjectWithModules(@Nonnull ProjectBuildingResult forResult, @Nonnull Map fromProjectToProjectWithModules) {
        final MavenProject project = forResult.getProject();
        MavenProjectWithModules projectWithModules = fromProjectToProjectWithModules.get(project);
        if (projectWithModules == null) {
            projectWithModules = new MavenProjectWithModules(project);
            fromProjectToProjectWithModules.put(project, projectWithModules);
        }
        return projectWithModules;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy