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