001    /*
002     * #%L
003     * License Maven Plugin
004     *
005     * $Id: ThirdPartyTool.java 14409 2011-08-10 15:30:41Z tchemit $
006     * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/ThirdPartyTool.java $
007     * %%
008     * Copyright (C) 2011 CodeLutin, Codehaus, Tony Chemit
009     * %%
010     * This program is free software: you can redistribute it and/or modify
011     * it under the terms of the GNU Lesser General Public License as
012     * published by the Free Software Foundation, either version 3 of the
013     * License, or (at your option) any later version.
014     *
015     * This program is distributed in the hope that it will be useful,
016     * but WITHOUT ANY WARRANTY; without even the implied warranty of
017     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
018     * GNU General Lesser Public License for more details.
019     *
020     * You should have received a copy of the GNU General Lesser Public
021     * License along with this program.  If not, see
022     * <http://www.gnu.org/licenses/lgpl-3.0.html>.
023     * #L%
024     */
025    package org.codehaus.mojo.license;
026    
027    import java.io.File;
028    import java.io.IOException;
029    import java.util.Collection;
030    import java.util.List;
031    import java.util.SortedMap;
032    import java.util.SortedSet;
033    
034    import org.apache.maven.artifact.repository.ArtifactRepository;
035    import org.apache.maven.model.License;
036    import org.apache.maven.project.MavenProject;
037    import org.codehaus.mojo.license.model.LicenseMap;
038    
039    /**
040     * A tool to load third party files missing files.
041     * <p/>
042     * We should put here all the logic code written in some mojo and licenseMap...
043     *
044     * @author tchemit <chemit@codelutin.com>
045     * @since 1.0
046     */
047    public interface ThirdPartyTool {
048    
049        /**
050         * Plexus Role
051         */
052        String ROLE = ThirdPartyTool.class.getName();
053    
054        /**
055         * @param encoding
056         *            encoding used to read or write properties files
057         * @param projects
058         *            all projects where to read third parties descriptors
059         * @param unsafeProjects
060         *            all unsafe projects
061         * @param licenseMap
062         *            license map where to store new licenses
063         * @param localRepository
064         *            local repository
065         * @param remoteRepositories
066         *            remote repositories
067         * @return the map of loaded missing from the remote missing third party files
068         * @throws ThirdPartyToolException
069         *             if any
070         * @throws IOException
071         *             if any
072         */
073        SortedProperties loadThirdPartyDescriptorsForUnsafeMapping(String encoding, Collection<MavenProject> projects,
074                SortedSet<MavenProject> unsafeProjects, LicenseMap licenseMap, ArtifactRepository localRepository,
075                List<ArtifactRepository> remoteRepositories) throws ThirdPartyToolException, IOException;
076    
077        /**
078         * For the given {@code project}, attach the given {@code file} as a third-party file.
079         * <p/>
080         * The file will be attached as with a classifier {@code third-parties} and a type {@code properties}.
081         *
082         * @param project
083         *            the project on which to attch the third-party file
084         * @param file
085         *            the third-party file to attach.
086         */
087        void attachThirdPartyDescriptor(MavenProject project, File file);
088    
089        /**
090         * Obtain the third party file from the repository.
091         * <p/>
092         * Will first search in the local repository, then into the remote repositories and will resolv it.
093         *
094         * @param project
095         *            the project
096         * @param localRepository
097         *            the local repository
098         * @param repositories
099         *            the remote repositories
100         * @return the locale file resolved into the local repository
101         * @throws ThirdPartyToolException
102         *             if any
103         */
104        File resolvThirdPartyDescriptor(MavenProject project, ArtifactRepository localRepository,
105                List<ArtifactRepository> repositories) throws ThirdPartyToolException;
106    
107        /**
108         * From the given {@code licenseMap}, obtain all the projects with no license.
109         *
110         * @param licenseMap
111         *            the license map to query
112         * @param doLog
113         *            a flag to add debug logs
114         * @return the set of projects with no license
115         */
116        SortedSet<MavenProject> getProjectsWithNoLicense(LicenseMap licenseMap, boolean doLog);
117    
118        SortedProperties loadUnsafeMapping(LicenseMap licenseMap, SortedMap<String, MavenProject> artifactCache,
119                String encoding, File missingFile) throws IOException;
120    
121        /**
122         * Add a license (name and url are {@code licenseName}) to the given {@code licenseMap} for the given
123         * {@code project}.
124         *
125         * @param licenseMap
126         *            the license map where to add the license
127         * @param project
128         *            the project
129         * @param licenseName
130         *            the name of the license
131         */
132        void addLicense(LicenseMap licenseMap, MavenProject project, String licenseName);
133    
134        /**
135         * Add a given {@code license} to the given {@code licenseMap} for the given {@code project}.
136         *
137         * @param licenseMap
138         *            the license map where to add the license
139         * @param project
140         *            the project
141         * @param license
142         *            the license to add
143         */
144        void addLicense(LicenseMap licenseMap, MavenProject project, License license);
145    
146        /**
147         * Add a given {@code licenses} to the given {@code licenseMap} for the given {@code project}.
148         *
149         * @param licenseMap
150         *            the license map where to add the licenses
151         * @param project
152         *            the project
153         * @param licenses
154         *            the licenses to add
155         */
156        void addLicense(LicenseMap licenseMap, MavenProject project, List<?> licenses);
157    
158        /**
159         * For a given {@code licenseMap}, merge all {@code licenses}.
160         * <p/>
161         * The first value of the {@code licenses} is the license to keep and all other values will be merged into the first
162         * one.
163         *
164         * @param licenseMap
165         *            the license map to merge
166         * @param licenses
167         *            all the licenses to merge (the first license will be the unique one to kkep)
168         */
169        void mergeLicenses(LicenseMap licenseMap, String... licenses);
170    }