blob: 4b96313f54af0cbcb128cef9ad0584a34eff0673 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You 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.
*/
package org.apache.sling.maven.projectsupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Properties;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.Bundle;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.BundleList;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.StartLevel;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.io.xpp3.BundleListXpp3Reader;
import org.codehaus.plexus.interpolation.InterpolationException;
import org.codehaus.plexus.interpolation.Interpolator;
import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
/**
* Miscellaneous helper methods for working with bundle lists.
*/
public class BundleListUtils {
private BundleListUtils() {}
/**
* Initialize the artifact definitions using defaults inside the plugin JAR.
*
* @throws IOException if the default properties can't be read
* @throws XmlPullParserException
* @throws MojoExecutionException
*/
public static final void initArtifactDefinitions(ClassLoader classLoader, ArtifactDefinitionsCallback callback) throws IOException {
Properties dependencies = new Properties();
dependencies.load(classLoader.getResourceAsStream(
"org/apache/sling/maven/projectsupport/dependencies.properties"));
callback.initArtifactDefinitions(dependencies);
}
public static boolean isCurrentArtifact(MavenProject project, ArtifactDefinition def) {
return (def.getGroupId().equals(project.getGroupId()) && def.getArtifactId().equals(project.getArtifactId()));
}
public static BundleList readBundleList(File file) throws IOException, XmlPullParserException {
BundleListXpp3Reader reader = new BundleListXpp3Reader();
FileInputStream fis = new FileInputStream(file);
try {
return reader.read(fis);
} finally {
fis.close();
}
}
public static int nodeValue(Xpp3Dom config, String name, int defaultValue) {
Xpp3Dom node = config.getChild(name);
if (node != null) {
return Integer.parseInt(node.getValue());
} else {
return defaultValue;
}
}
public static boolean nodeValue(Xpp3Dom config, String name, boolean defaultValue) {
Xpp3Dom node = config.getChild(name);
if (node != null) {
return Boolean.parseBoolean(node.getValue());
} else {
return defaultValue;
}
}
public static String nodeValue(Xpp3Dom config, String name, String defaultValue) {
Xpp3Dom node = config.getChild(name);
if (node != null) {
return node.getValue();
} else {
return defaultValue;
}
}
public static void interpolateProperties(BundleList bundleList, MavenProject project, MavenSession mavenSession) throws MojoExecutionException {
Interpolator interpolator = createInterpolator(project, mavenSession);
for (final StartLevel sl : bundleList.getStartLevels()) {
for (final Bundle bndl : sl.getBundles()) {
try {
bndl.setArtifactId(interpolator.interpolate(bndl.getArtifactId()));
bndl.setGroupId(interpolator.interpolate(bndl.getGroupId()));
bndl.setVersion(interpolator.interpolate(bndl.getVersion()));
bndl.setClassifier(interpolator.interpolate(bndl.getClassifier()));
bndl.setType(interpolator.interpolate(bndl.getType()));
} catch (InterpolationException e) {
throw new MojoExecutionException("Unable to interpolate properties for bundle " + bndl.toString(), e);
}
}
}
}
public static Interpolator createInterpolator(MavenProject project, MavenSession mavenSession) {
StringSearchInterpolator interpolator = new StringSearchInterpolator();
final Properties props = new Properties();
props.putAll(project.getProperties());
props.putAll(mavenSession.getSystemProperties());
props.putAll(mavenSession.getUserProperties());
interpolator.addValueSource(new PropertiesBasedValueSource(props));
// add ${project.foo}
interpolator.addValueSource(new PrefixedObjectValueSource(Arrays.asList("project", "pom"), project, true));
// add ${session.foo}
interpolator.addValueSource(new PrefixedObjectValueSource("session", mavenSession));
// add ${settings.foo}
final Settings settings = mavenSession.getSettings();
if (settings != null) {
interpolator.addValueSource(new PrefixedObjectValueSource("settings", settings));
}
return interpolator;
}
/**
* Callback interface for use with initArtifactDefinitions.
*/
public static interface ArtifactDefinitionsCallback {
void initArtifactDefinitions(Properties dependencies);
}
}