package org.codehaus.mojo.repositorytools;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
import jxl.Workbook;
import jxl.format.CellFormat;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import org.apache.maven.archiva.discoverer.ArtifactDiscoverer;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.codehaus.mojo.repositorytools.components.CLITools;
/**
* Examines all artifacts in a local repository, and exports basic info to a CSV
* file.
*
* @goal export-csv
* @requiresProject false
* @author tom
*
*/
public class ExportCSVMojo extends AbstractMojo
{
/**
* @component
* @required
* @readonly
*/
private ArtifactDiscoverer discoverer;
/**
* @component
* @required
* @readonly
*/
private MavenProjectBuilder builder;
/**
* The output filename.
*
* @parameter default-value="repository.txt"
*/
private File output;
/**
* The local repository to deploy. Defaults to a 'local' subdirectory of the
* working directory.
*
* @parameter expression="${local}" default-value="local"
*/
private File local;
private CLITools cliTools;
public void execute() throws MojoExecutionException, MojoFailureException
{
try
{
ArtifactRepository localRepository = cliTools.createLocalRepository(local);
List artifacts = discoverer.discoverArtifacts(
localRepository, Collections.EMPTY_LIST,
new ArtifactFilter()
{
public boolean include(Artifact artifact)
{
getLog().info(artifact.toString());
return true;
}
});
WritableWorkbook workbook = Workbook.createWorkbook(new File(
"repository.xls"));
WritableSheet sheet = workbook.createSheet("Artifacts", 0);
WritableCellFormat format = new WritableCellFormat();
WritableCellFormat wrapFormat = new WritableCellFormat();
wrapFormat.setWrap(true);
int row = 0;
addRow(sheet, row, new String[]
{ "Group", "Artifact", "Version", "Packaging", "Description" },
new CellFormat[]
{ format, format, format, format, format });
Pattern pattern = Pattern.compile("\\s{2,}");
PrintWriter writer = new PrintWriter(new FileWriter(output));
for (Iterator iterator = artifacts.iterator(); iterator.hasNext();) {
Artifact artifact = (Artifact) iterator.next();
if (artifact.getType().equals("pom"))
{
row++;
MavenProject project = builder.buildFromRepository(
artifact, Collections.EMPTY_LIST, localRepository);
String description = project.getDescription();
description = description == null ? null : pattern.matcher(
description).replaceAll(" ");
String[] data = new String[]
{ project.getGroupId(), project.getArtifactId(),
project.getVersion(), project.getPackaging(),
description };
// TODO fixme
// writer.printf("%s\t%s\t%s\t%s\t%s\n", (Object[]) data);
addRow(sheet, row, data, new CellFormat[]
{ format, format, format, format, wrapFormat });
}
}
writer.close();
workbook.write();
workbook.close();
}
catch (Exception e)
{
throw new MojoExecutionException("", e);
}
}
private void addRow(WritableSheet sheet, int row, String[] data,
CellFormat[] format) throws WriteException
{
for (int col = 0; col < data.length; col++)
{
Label cell = new Label(col, row, data[col]);
cell.setCellFormat(format[col]);
sheet.addCell(cell);
}
}
}