001 /**
002 * Copyright 2010-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.codehaus.mojo.license;
017
018 import java.io.File;
019 import java.io.IOException;
020 import java.util.Collection;
021 import java.util.List;
022 import java.util.SortedMap;
023 import java.util.SortedSet;
024
025 import org.apache.maven.artifact.repository.ArtifactRepository;
026 import org.apache.maven.model.License;
027 import org.apache.maven.project.MavenProject;
028 import org.codehaus.mojo.license.model.LicenseMap;
029
030 /**
031 * A tool to load third party files missing files.
032 * <p/>
033 * We should put here all the logic code written in some mojo and licenseMap...
034 *
035 * @author tchemit <chemit@codelutin.com>
036 * @since 1.0
037 */
038 public interface ThirdPartyTool {
039
040 /**
041 * Plexus Role
042 */
043 String ROLE = ThirdPartyTool.class.getName();
044
045 /**
046 * @param encoding
047 * encoding used to read or write properties files
048 * @param projects
049 * all projects where to read third parties descriptors
050 * @param unsafeProjects
051 * all unsafe projects
052 * @param licenseMap
053 * license map where to store new licenses
054 * @param localRepository
055 * local repository
056 * @param remoteRepositories
057 * remote repositories
058 * @return the map of loaded missing from the remote missing third party files
059 * @throws ThirdPartyToolException
060 * if any
061 * @throws IOException
062 * if any
063 */
064 SortedProperties loadThirdPartyDescriptorsForUnsafeMapping(String encoding, Collection<MavenProject> projects,
065 SortedSet<MavenProject> unsafeProjects, LicenseMap licenseMap, ArtifactRepository localRepository,
066 List<ArtifactRepository> remoteRepositories) throws ThirdPartyToolException, IOException;
067
068 /**
069 * For the given {@code project}, attach the given {@code file} as a third-party file.
070 * <p/>
071 * The file will be attached as with a classifier {@code third-parties} and a type {@code properties}.
072 *
073 * @param project
074 * the project on which to attch the third-party file
075 * @param file
076 * the third-party file to attach.
077 */
078 void attachThirdPartyDescriptor(MavenProject project, File file);
079
080 /**
081 * Obtain the third party file from the repository.
082 * <p/>
083 * Will first search in the local repository, then into the remote repositories and will resolv it.
084 *
085 * @param project
086 * the project
087 * @param localRepository
088 * the local repository
089 * @param repositories
090 * the remote repositories
091 * @return the locale file resolved into the local repository
092 * @throws ThirdPartyToolException
093 * if any
094 */
095 File resolvThirdPartyDescriptor(MavenProject project, ArtifactRepository localRepository,
096 List<ArtifactRepository> repositories) throws ThirdPartyToolException;
097
098 /**
099 * From the given {@code licenseMap}, obtain all the projects with no license.
100 *
101 * @param licenseMap
102 * the license map to query
103 * @param doLog
104 * a flag to add debug logs
105 * @return the set of projects with no license
106 */
107 SortedSet<MavenProject> getProjectsWithNoLicense(LicenseMap licenseMap, boolean doLog);
108
109 SortedProperties loadUnsafeMapping(LicenseMap licenseMap, SortedMap<String, MavenProject> artifactCache,
110 String encoding, File missingFile) throws IOException;
111
112 /**
113 * Add a license (name and url are {@code licenseName}) to the given {@code licenseMap} for the given
114 * {@code project}.
115 *
116 * @param licenseMap
117 * the license map where to add the license
118 * @param project
119 * the project
120 * @param licenseName
121 * the name of the license
122 */
123 void addLicense(LicenseMap licenseMap, MavenProject project, String licenseName);
124
125 /**
126 * Add a given {@code license} to the given {@code licenseMap} for the given {@code project}.
127 *
128 * @param licenseMap
129 * the license map where to add the license
130 * @param project
131 * the project
132 * @param license
133 * the license to add
134 */
135 void addLicense(LicenseMap licenseMap, MavenProject project, License license);
136
137 /**
138 * Add a given {@code licenses} to the given {@code licenseMap} for the given {@code project}.
139 *
140 * @param licenseMap
141 * the license map where to add the licenses
142 * @param project
143 * the project
144 * @param licenses
145 * the licenses to add
146 */
147 void addLicense(LicenseMap licenseMap, MavenProject project, List<?> licenses);
148
149 /**
150 * For a given {@code licenseMap}, merge all {@code licenses}.
151 * <p/>
152 * The first value of the {@code licenses} is the license to keep and all other values will be merged into the first
153 * one.
154 *
155 * @param licenseMap
156 * the license map to merge
157 * @param licenses
158 * all the licenses to merge (the first license will be the unique one to kkep)
159 */
160 void mergeLicenses(LicenseMap licenseMap, String... licenses);
161 }