package hudson.plugins.javanet;
import hudson.util.DaemonThreadFactory;
import org.jvnet.its.Generator;
import org.kohsuke.jnt.JavaNet;
import org.kohsuke.jnt.ProcessingException;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.text.MessageFormat;
/**
* {@link Runnable} for generating the java.net issue-tracker stats reports.
*
* @author Kohsuke Kawaguchi
*/
class ReportGenerator implements Runnable {
private final String projectName;
private final File reportDir;
ReportGenerator(String projectName, File reportDir) {
this.projectName = projectName;
this.reportDir = reportDir;
}
/**
* Submits this job for execution later.
*/
public Future<?> schedule() {
return EXECUTOR.submit(this);
}
public void run() {
Generator gen = new Generator();
long start = System.currentTimeMillis();
LOGGER.info("Starting to generate java.net issue tracker stats for "+projectName);
String oldName = Thread.currentThread().getName();
Thread.currentThread().setName("java.net issue tracker stat generation for "+projectName);
reportDir.mkdirs();
try {
gen.generate(JavaNet.connect().getProject(projectName), reportDir);
} catch (ProcessingException e) {
LOGGER.log(Level.SEVERE, "Failed to generate java.net stat report for "+projectName,e);
} catch (IOException e) {
LOGGER.log(Level.SEVERE, "Failed to generate java.net stat report for "+projectName,e);
} finally {
Thread.currentThread().setName(oldName);
}
LOGGER.info(MessageFormat.format("Completed generating java.net issue tracker stats for {0} in {1} ms", projectName, System.currentTimeMillis() - start));
}
/**
* Used to generate reports.
*/
static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(1, new DaemonThreadFactory());
private static final Logger LOGGER = Logger.getLogger(ReportGenerator.class.getName());
}