/*
* Carrot2 project.
*
* Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/
package org.carrot2.antlib.tasks;
import java.io.File;
import java.io.IOException;
import java.util.*;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
/**
* Lists all different licensing texts appearing in source code headers and/or footers.
*/
public class LicenseListTask extends AbstractLicenseTask
{
/**
* Process headers.
*/
private boolean processHeader;
/**
* Process footers.
*/
private boolean processFooter;
/**
* Verbose info.
*/
private boolean verbose;
private final HashMap<String, List<File>> headers = new HashMap<String, List<File>>();
private final HashMap<String, List<File>> footers = new HashMap<String, List<File>>();
/**
* If set to <code>true</code>, process footers.
*/
public void setFooter(boolean processFooter)
{
this.processFooter = processFooter;
}
/**
* If set to <code>true</code>, process headers.
*/
public void setHeader(boolean header)
{
this.processHeader = header;
}
/**
* If set to <code>true</code> a more verbose info is dumped.
*/
public void setVerbose(boolean verbose)
{
this.verbose = verbose;
}
public void execute() throws BuildException
{
super.execute();
final StringBuilder buffer = new StringBuilder();
if (processHeader)
{
for (Map.Entry<String, List<File>> entry : headers.entrySet())
{
final List<File> files = entry.getValue();
String header = entry.getKey();
if ("".equals(header.trim()))
{
header = "(empty)";
}
buffer.append("Header of " + files.size() + " file(s) is:");
buffer.append("\n-------------------------\n");
buffer.append(header);
buffer.append("\n-------------------------\n");
if (verbose)
{
Collections.sort(files);
for (int f = 0; f < files.size(); f++)
{
buffer.append('\t');
buffer.append(((File) files.get(f)).getAbsolutePath());
buffer.append('\n');
}
}
buffer.append("\n");
}
}
if (processFooter)
{
for (Map.Entry<String, List<File>> entry : footers.entrySet())
{
final List<File> files = entry.getValue();
String footer = entry.getKey();
if ("".equals(footer.trim()))
{
footer = "(empty)";
}
buffer.append("Footer of " + files.size() + " file(s) is:");
buffer.append("\n-------------------------\n");
buffer.append(footer);
buffer.append("\n-------------------------\n");
if (verbose)
{
Collections.sort(files);
for (int f = 0; f < files.size(); f++)
{
buffer.append('\t');
buffer.append(((File) files.get(f)).getAbsolutePath());
buffer.append('\n');
}
}
buffer.append("\n");
}
}
super.log(buffer.toString(), Project.MSG_INFO);
}
/**
* Process a single file.
*/
protected void checkLicense(File file) throws IOException
{
final String content = readFile(file);
final SourceFile split = new SourceFile(content, file);
// Check header.
if (processHeader)
{
final String trimmed = split.getCanonicalizedHeader();
List<File> files = headers.get(trimmed);
if (files == null)
{
files = new ArrayList<File>();
headers.put(trimmed, files);
}
files.add(file);
}
// Check footer.
if (processFooter)
{
final String trimmed = split.getCanonicalizedFooter();
List<File> files = footers.get(trimmed);
if (files == null)
{
files = new ArrayList<File>();
footers.put(trimmed, files);
}
files.add(file);
}
}
}