package ru.yandex.qatools.allure;
import com.google.common.io.Files;
import com.google.common.reflect.ClassPath;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.yandex.qatools.allure.data.AllureReportGenerator;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static ru.yandex.qatools.allure.data.DummyReportGenerator.getFiles;
/**
* @author Dmitry Baev charlie@yandex-team.ru
* Date: 29.07.15
*/
public class AllureMain {
private static final Logger LOGGER = LoggerFactory.getLogger(AllureMain.class);
public static final Pattern REPORT_RESOURCE_PATTERN =
Pattern.compile("^allure\\.report\\.face/(.+)$");
/**
* There is no need to instance this class.
*/
AllureMain() {
}
public static void main(String[] args) throws IOException {
if (args.length < 2) { // NOSONAR
LOGGER.error("There must be at least two arguments");
return;
}
int lastIndex = args.length - 1;
File[] inputDirectories = getFiles(Arrays.copyOf(args, lastIndex));
File outputDirectory = new File(args[lastIndex]);
AllureReportGenerator reportGenerator = new AllureReportGenerator(inputDirectories);
reportGenerator.generate(outputDirectory);
unpackFace(outputDirectory);
}
/**
* Unpack report face to given directory.
*
* @param outputDirectory the output directory to unpack face.
* @throws IOException if any occurs.
*/
private static void unpackFace(File outputDirectory) throws IOException {
ClassLoader loader = AllureMain.class.getClassLoader();
for (ClassPath.ResourceInfo info : ClassPath.from(loader).getResources()) {
Matcher matcher = REPORT_RESOURCE_PATTERN.matcher(info.getResourceName());
if (matcher.find()) {
String resourcePath = matcher.group(1);
File dest = new File(outputDirectory, resourcePath);
Files.createParentDirs(dest);
try (FileOutputStream output = new FileOutputStream(dest);
InputStream input = info.url().openStream()) {
IOUtils.copy(input, output);
LOGGER.debug("{} successfully copied.", resourcePath);
}
}
}
}
}