blob: fe9d538837c0d33150090f4c27fc2901d865543a [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.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.io.xpp3.BundleListXpp3Writer;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.zip.ZipArchiver;
import org.codehaus.plexus.util.FileUtils;
/**
* Attaches the bundle list as a project artifact.
*
* @goal attach-bundle-list
* @phase package
* @requiresDependencyResolution test
* @description attach the bundle list as a project artifact
*/
public class AttachBundleListMojo extends AbstractUsingBundleListMojo {
/**
* @parameter default-value="${project.build.directory}/bundleList.xml"
*/
private File outputFile;
/**
* @parameter default-value="${project.build.directory}/bundleListconfig"
*/
private File configOutputDir;
/**
* The zip archiver.
*
* @component role="org.codehaus.plexus.archiver.Archiver" roleHint="zip"
*/
private ZipArchiver zipArchiver;
private final BundleListXpp3Writer writer = new BundleListXpp3Writer();
@Override
protected void executeWithArtifacts() throws MojoExecutionException, MojoFailureException {
FileWriter fw = null;
try {
this.outputFile.getParentFile().mkdirs();
fw = new FileWriter(outputFile);
writer.write(fw, getInitializedBundleList());
projectHelper.attachArtifact(project, AttachPartialBundleListMojo.TYPE, AttachPartialBundleListMojo.CLASSIFIER, outputFile);
} catch (IOException e) {
throw new MojoExecutionException("Unable to output effective bundle list", e);
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
}
}
}
this.getLog().info("Attaching bundle list configuration");
try {
this.attachConfigurations();
} catch (final IOException ioe) {
throw new MojoExecutionException("Unable to attach configuration.", ioe);
} catch (final ArchiverException ioe) {
throw new MojoExecutionException("Unable to attach configuration.", ioe);
}
}
private boolean checkFile(final File f) {
return f != null && f.exists();
}
private void attachConfigurations() throws MojoExecutionException, IOException, ArchiverException {
if ( this.ignoreBundleListConfig ) {
this.getLog().debug("ignoreBundleListConfig is set to true, therefore not attaching configurations.");
return;
}
// check if we have configurations
boolean hasConfigs = this.checkFile(this.getConfigDirectory());
hasConfigs |= this.getSlingBootstrap(true) != null;
hasConfigs |= this.getSlingBootstrap(false) != null;
hasConfigs |= this.getSlingProperties(true) != null;
hasConfigs |= this.getSlingProperties(false) != null;
if ( !hasConfigs ) {
this.getLog().debug("No configurations to attach.");
return;
}
// copy configuration, as this project might use different names we have to copy everything!
this.configOutputDir.mkdirs();
if ( this.getSlingBootstrap(false) != null ) {
final File slingDir = new File(this.configOutputDir, "sling");
slingDir.mkdirs();
FileUtils.fileWrite(new File(slingDir, AttachPartialBundleListMojo.SLING_WEBAPP_BOOTSTRAP).getAbsolutePath(),
"UTF-8", this.getSlingBootstrap(false));
}
if ( this.getSlingProperties(false) != null ) {
final File slingDir = new File(this.configOutputDir, "sling");
slingDir.mkdirs();
final FileOutputStream fos = new FileOutputStream(new File(slingDir, AttachPartialBundleListMojo.SLING_WEBAPP_PROPS));
try {
this.getSlingProperties(false).store(fos, null);
} finally {
try { fos.close(); } catch (final IOException ioe) {}
}
}
if ( this.getSlingBootstrap(true) != null ) {
final File slingDir = new File(this.configOutputDir, "sling");
slingDir.mkdirs();
FileUtils.fileWrite(new File(slingDir, AttachPartialBundleListMojo.SLING_STANDALONE_BOOTSTRAP).getAbsolutePath(),
"UTF-8", this.getSlingBootstrap(true));
}
if ( this.getSlingProperties(true) != null ) {
final File slingDir = new File(this.configOutputDir, "sling");
slingDir.mkdirs();
final FileOutputStream fos = new FileOutputStream(new File(slingDir, AttachPartialBundleListMojo.SLING_STANDALONE_PROPS));
try {
this.getSlingProperties(true).store(fos, null);
} finally {
try { fos.close(); } catch (final IOException ioe) {}
}
}
if ( this.checkFile(this.getConfigDirectory()) ) {
final File configDir = new File(this.configOutputDir, "config");
configDir.mkdirs();
copyDirectory(this.getConfigDirectory(), configDir,
null, FileUtils.getDefaultExcludes());
}
final File destFile = new File(this.configOutputDir.getParent(), this.configOutputDir.getName() + ".zip");
zipArchiver.setDestFile(destFile);
zipArchiver.addDirectory(this.configOutputDir);
zipArchiver.createArchive();
projectHelper.attachArtifact(project, AttachPartialBundleListMojo.CONFIG_TYPE,
AttachPartialBundleListMojo.CONFIG_CLASSIFIER, destFile);
}
}