001 /** 002 * Copyright 2010-2013 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 }