1 /**
2 * Copyright 2010-2012 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.codehaus.mojo.license;
17
18 import java.io.File;
19 import java.io.IOException;
20 import java.util.Collection;
21 import java.util.List;
22 import java.util.SortedMap;
23 import java.util.SortedSet;
24
25 import org.apache.maven.artifact.repository.ArtifactRepository;
26 import org.apache.maven.model.License;
27 import org.apache.maven.project.MavenProject;
28 import org.codehaus.mojo.license.model.LicenseMap;
29
30 /**
31 * A tool to load third party files missing files.
32 * <p/>
33 * We should put here all the logic code written in some mojo and licenseMap...
34 *
35 * @author tchemit <chemit@codelutin.com>
36 * @since 1.0
37 */
38 public interface ThirdPartyTool {
39
40 /**
41 * Plexus Role
42 */
43 String ROLE = ThirdPartyTool.class.getName();
44
45 /**
46 * @param encoding
47 * encoding used to read or write properties files
48 * @param projects
49 * all projects where to read third parties descriptors
50 * @param unsafeProjects
51 * all unsafe projects
52 * @param licenseMap
53 * license map where to store new licenses
54 * @param localRepository
55 * local repository
56 * @param remoteRepositories
57 * remote repositories
58 * @return the map of loaded missing from the remote missing third party files
59 * @throws ThirdPartyToolException
60 * if any
61 * @throws IOException
62 * if any
63 */
64 SortedProperties loadThirdPartyDescriptorsForUnsafeMapping(String encoding, Collection<MavenProject> projects,
65 SortedSet<MavenProject> unsafeProjects, LicenseMap licenseMap, ArtifactRepository localRepository,
66 List<ArtifactRepository> remoteRepositories) throws ThirdPartyToolException, IOException;
67
68 /**
69 * For the given {@code project}, attach the given {@code file} as a third-party file.
70 * <p/>
71 * The file will be attached as with a classifier {@code third-parties} and a type {@code properties}.
72 *
73 * @param project
74 * the project on which to attch the third-party file
75 * @param file
76 * the third-party file to attach.
77 */
78 void attachThirdPartyDescriptor(MavenProject project, File file);
79
80 /**
81 * Obtain the third party file from the repository.
82 * <p/>
83 * Will first search in the local repository, then into the remote repositories and will resolv it.
84 *
85 * @param project
86 * the project
87 * @param localRepository
88 * the local repository
89 * @param repositories
90 * the remote repositories
91 * @return the locale file resolved into the local repository
92 * @throws ThirdPartyToolException
93 * if any
94 */
95 File resolvThirdPartyDescriptor(MavenProject project, ArtifactRepository localRepository,
96 List<ArtifactRepository> repositories) throws ThirdPartyToolException;
97
98 /**
99 * 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 }