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