001 /* 002 * #%L 003 * License Maven Plugin 004 * 005 * $Id: MojoHelper.java 14410 2011-08-10 20:54:51Z tchemit $ 006 * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/MojoHelper.java $ 007 * %% 008 * Copyright (C) 2010 - 2011 Codehaus 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 org.apache.maven.artifact.Artifact; 028 import org.apache.maven.model.Resource; 029 import org.apache.maven.project.MavenProject; 030 031 import java.io.File; 032 import java.net.MalformedURLException; 033 import java.net.URL; 034 import java.text.MessageFormat; 035 import java.util.Comparator; 036 import java.util.List; 037 038 /** 039 * Mojo helper methods. 040 * 041 * @author tchemit <chemit@codelutin.com> 042 * @since 1.0 043 */ 044 public class MojoHelper 045 { 046 047 /** 048 * Add the directory as a resource of the given project. 049 * 050 * @param dir the directory to add 051 * @param project the project to update 052 * @param includes the includes of the resource 053 * @return {@code true} if the resources was added (not already existing) 054 */ 055 public static boolean addResourceDir( File dir, MavenProject project, String... includes ) 056 { 057 List<?> resources = project.getResources(); 058 return addResourceDir( dir, project, resources, includes ); 059 } 060 061 /** 062 * Add the directory as a resource in the given resource list. 063 * 064 * @param dir the directory to add 065 * @param project the project involved 066 * @param resources the list of existing resources 067 * @param includes includes of the new resources 068 * @return {@code true} if the resource was added (not already existing) 069 */ 070 public static boolean addResourceDir( File dir, MavenProject project, List<?> resources, String... includes ) 071 { 072 String newresourceDir = dir.getAbsolutePath(); 073 boolean shouldAdd = true; 074 for ( Object o : resources ) 075 { 076 Resource r = (Resource) o; 077 if ( !r.getDirectory().equals( newresourceDir ) ) 078 { 079 continue; 080 } 081 082 for ( String i : includes ) 083 { 084 if ( !r.getIncludes().contains( i ) ) 085 { 086 r.addInclude( i ); 087 } 088 } 089 shouldAdd = false; 090 break; 091 } 092 if ( shouldAdd ) 093 { 094 Resource r = new Resource(); 095 r.setDirectory( newresourceDir ); 096 for ( String i : includes ) 097 { 098 if ( !r.getIncludes().contains( i ) ) 099 { 100 r.addInclude( i ); 101 } 102 } 103 project.addResource( r ); 104 } 105 return shouldAdd; 106 } 107 108 public static Comparator<MavenProject> newMavenProjectComparator() 109 { 110 return new Comparator<MavenProject>() 111 { 112 public int compare( MavenProject o1, MavenProject o2 ) 113 { 114 115 String id1 = getArtifactId( o1.getArtifact() ); 116 String id2 = getArtifactId( o2.getArtifact() ); 117 return id1.compareTo( id2 ); 118 } 119 }; 120 121 } 122 123 static final protected double[] timeFactors = { 1000000, 1000, 60, 60, 24 }; 124 125 static final protected String[] timeUnites = { "ns", "ms", "s", "m", "h", "d" }; 126 127 static public String convertTime( long value ) 128 { 129 return convert( value, timeFactors, timeUnites ); 130 } 131 132 static public String convert( long value, double[] factors, String[] unites ) 133 { 134 long sign = value == 0 ? 1 : value / Math.abs( value ); 135 int i = 0; 136 double tmp = Math.abs( value ); 137 while ( i < factors.length && i < unites.length && tmp > factors[i] ) 138 { 139 tmp = tmp / factors[i++]; 140 } 141 142 tmp *= sign; 143 String result; 144 result = MessageFormat.format( "{0,number,0.###}{1}", tmp, unites[i] ); 145 return result; 146 } 147 148 /** 149 * suffix a given {@code baseUrl} with the given {@code suffix} 150 * 151 * @param baseUrl base url to use 152 * @param suffix suffix to add 153 * @return the new url 154 * @throws IllegalArgumentException if malformed url. 155 */ 156 public static URL getUrl( URL baseUrl, String suffix ) 157 throws IllegalArgumentException 158 { 159 String url = baseUrl.toString() + "/" + suffix; 160 try 161 { 162 return new URL( url ); 163 } 164 catch ( MalformedURLException ex ) 165 { 166 throw new IllegalArgumentException( "could not obtain url " + url, ex ); 167 } 168 } 169 170 public static String getArtifactId( Artifact artifact ) 171 { 172 StringBuilder sb = new StringBuilder(); 173 sb.append( artifact.getGroupId() ); 174 sb.append( "--" ); 175 sb.append( artifact.getArtifactId() ); 176 sb.append( "--" ); 177 sb.append( artifact.getVersion() ); 178 return sb.toString(); 179 } 180 181 public static String getArtifactName( MavenProject project ) 182 { 183 StringBuilder sb = new StringBuilder(); 184 if ( project.getName().startsWith( "Unnamed -" ) ) 185 { 186 187 // as in Maven 3, let's use the artifact id 188 sb.append( project.getArtifactId() ); 189 } 190 else 191 { 192 sb.append( project.getName() ); 193 } 194 sb.append( " (" ); 195 sb.append( project.getGroupId() ); 196 sb.append( ":" ); 197 sb.append( project.getArtifactId() ); 198 sb.append( ":" ); 199 sb.append( project.getVersion() ); 200 sb.append( " - " ); 201 String url = project.getUrl(); 202 sb.append( url == null ? "no url defined" : url ); 203 sb.append( ")" ); 204 205 return sb.toString(); 206 } 207 }