org.wisdom.maven.utils.MavenUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wisdom-maven-plugin Show documentation
Show all versions of wisdom-maven-plugin Show documentation
The Maven Wisdom Plugin allows building applications for Wisdom.
/*
* #%L
* Wisdom-Framework
* %%
* Copyright (C) 2013 - 2014 Wisdom Framework
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package org.wisdom.maven.utils;
import aQute.bnd.osgi.Analyzer;
import org.apache.maven.model.License;
import org.apache.maven.model.Model;
import org.apache.maven.model.Resource;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.PropertyUtils;
import java.io.File;
import java.lang.reflect.Method;
import java.util.*;
/**
* A set of utilities method to handle Maven metadata.
*/
public class MavenUtils {
public static final String MAVEN_SYMBOLICNAME = "maven-symbolicname";
/**
* Gets the default set of properties for the given project.
*
* @param currentProject the project
* @return the set of properties, containing default bundle packaging instructions.
*/
public static Properties getDefaultProperties(MavenProject currentProject) {
Properties properties = new Properties();
String bsn = DefaultMaven2OsgiConverter.getBundleSymbolicName(currentProject.getArtifact());
// Setup defaults
properties.put(MAVEN_SYMBOLICNAME, bsn);
properties.put("bundle.file.name", DefaultMaven2OsgiConverter.getBundleFileName(currentProject.getArtifact()));
properties.put(Analyzer.BUNDLE_SYMBOLICNAME, bsn);
properties.put(Analyzer.IMPORT_PACKAGE, "*");
properties.put(Analyzer.BUNDLE_VERSION, DefaultMaven2OsgiConverter.getVersion(currentProject.getVersion()));
header(properties, Analyzer.BUNDLE_DESCRIPTION, currentProject.getDescription());
StringBuilder licenseText = printLicenses(currentProject.getLicenses());
if (licenseText != null) {
header(properties, Analyzer.BUNDLE_LICENSE, licenseText);
}
header(properties, Analyzer.BUNDLE_NAME, currentProject.getName());
if (currentProject.getOrganization() != null) {
if (currentProject.getOrganization().getName() != null) {
String organizationName = currentProject.getOrganization().getName();
header(properties, Analyzer.BUNDLE_VENDOR, organizationName);
properties.put("project.organization.name", organizationName);
properties.put("pom.organization.name", organizationName);
}
if (currentProject.getOrganization().getUrl() != null) {
String organizationUrl = currentProject.getOrganization().getUrl();
header(properties, Analyzer.BUNDLE_DOCURL, organizationUrl);
properties.put("project.organization.url", organizationUrl);
properties.put("pom.organization.url", organizationUrl);
}
}
properties.putAll(currentProject.getModel().getProperties());
for (String s : currentProject.getFilters()) {
File filterFile = new File(s);
if (filterFile.isFile()) {
properties.putAll(PropertyUtils.loadProperties(filterFile));
}
}
properties.putAll(getProperties(currentProject.getModel(), "project.build."));
properties.putAll(getProperties(currentProject.getModel(), "pom."));
properties.putAll(getProperties(currentProject.getModel(), "project."));
properties.put("project.baseDir", currentProject.getBasedir().getAbsolutePath());
properties.put("project.build.directory", currentProject.getBuild().getDirectory());
properties.put("project.build.outputdirectory", currentProject.getBuild().getOutputDirectory());
properties.put("project.source.roots", getArray(currentProject.getCompileSourceRoots()));
properties.put("project.testSource.roots", getArray(currentProject.getTestCompileSourceRoots()));
properties.put("project.resources", toString(currentProject.getResources()));
properties.put("project.testResources", toString(currentProject.getTestResources()));
return properties;
}
/**
* Compute a String form the given list of paths. The list uses comma as separator.
*
* @param paths the list of path
* @return the computed String
*/
protected static String getArray(List paths) {
StringBuilder builder = new StringBuilder();
for (String s : paths) {
if (builder.length() == 0) {
builder.append(s);
} else {
builder.append(",").append(s);
}
}
return builder.toString();
}
/**
* Compute a String form the given list of resources. The list is structured as follows:
* list:=resource[,resource]*
* resource:=directory;target;filtering;
*
* @param resources the list of resources
* @return the computed String form
*/
protected static String toString(List resources) {
StringBuilder builder = new StringBuilder();
for (Resource resource : resources) {
if (builder.length() == 0) {
builder.append(resource.getDirectory())
.append(";")
.append(resource.getTargetPath() != null ? resource.getTargetPath() : "")
.append(";")
.append(resource.getFiltering() != null ? resource.getFiltering() : "true")
.append(";");
} else {
builder.append(",")
.append(resource.getDirectory())
.append(";")
.append(resource.getTargetPath() != null ? resource.getTargetPath() : "")
.append(";")
.append(resource.getFiltering() != null ? resource.getFiltering() : "true")
.append(";");
}
}
return builder.toString();
}
private static Map getProperties(Model projectModel, String prefix) {
Map properties = new LinkedHashMap<>();
Method[] methods = Model.class.getDeclaredMethods();
for (Method method : methods) {
String name = method.getName();
if (name.startsWith("get")) {
try {
Object v = method.invoke(projectModel);
if (v != null) {
name = prefix + Character.toLowerCase(name.charAt(3)) + name.substring(4);
if (v.getClass().isArray()) {
properties.put(name, Arrays.asList((Object[]) v).toString());
} else {
properties.put(name, v.toString());
}
}
} catch (Exception e) { //NOSONAR
// too bad
}
}
}
return properties;
}
private static StringBuilder printLicenses(List licenses) {
if (licenses == null || licenses.isEmpty()) {
return null;
}
StringBuilder sb = new StringBuilder();
String del = "";
for (Object license : licenses) {
License l = (License) license;
String url = l.getUrl();
if (url == null) {
continue;
}
sb.append(del);
sb.append(url);
del = ", ";
}
if (sb.length() == 0) {
return null;
}
return sb;
}
private static void header(Properties properties, String key, Object value) {
if (value == null) {
return;
}
if (value instanceof Collection && ((Collection) value).isEmpty()) {
return;
}
properties.put(key, value.toString().replaceAll("[\r\n]", ""));
}
}