package org.jggug.hudson.plugins.gcrawler; import static org.jggug.hudson.plugins.gcrawler.util.PropertyFileUtils.getStringPropertyValue; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.g2one.hudson.grails.GrailsBuilder; import com.g2one.hudson.grails.GrailsInstallation; public class CrawlContext { private Map<String, String> grailsMap; private Map<String, GrailsProjectInfo> projectMap; private CrawlLogger logger; private boolean isClosed = true; private File logFile; public Map<String, String> getGrailsMap() { return grailsMap; } public CrawlLogger getLogger() { return logger; } public void setGrailsMap(Map<String, String> grailsMap) { this.grailsMap = grailsMap; } public void setLogger(CrawlLogger logger) { this.logger = logger; } public void close() { isClosed = true; logger.close(); } public boolean isClosed() { return isClosed; } public File getLogFile() { return logFile; } public static CrawlContext newInstance() { CrawlContext ctx = new CrawlContext(); File logFile; try { logFile = File.createTempFile("gcrawler", ".log"); } catch (IOException e) { throw new RuntimeException(e); } logFile.deleteOnExit(); ctx.logFile = logFile; ctx.logger = new CrawlLogger(logFile); ctx.grailsMap = mapGrails(); ctx.projectMap = mapProject(); ctx.isClosed = false; return ctx; } private static Map<String, GrailsProjectInfo> mapProject() { Map<String, GrailsProjectInfo> result = new HashMap<String, GrailsProjectInfo>(); for (GrailsProjectInfo info : GCrawlerPlugin.getConfig().getGrailsProjectInfoList()) { result.put(info.getName(), info); } return result; } private static Map<String, String> mapGrails() { Map<String, String> result = new HashMap<String, String>(); for (GrailsInstallation inst : GrailsBuilder.DESCRIPTOR.getInstallations()) { if (inst.getExists()) { String version = getStringPropertyValue( new File(inst.getGrailsHome(), "build.properties"), "grails.version"); result.put(version, inst.getName()); } } return result; } public Map<String, GrailsProjectInfo> getProjectMap() { return projectMap; } public void setProjectMap(Map<String, GrailsProjectInfo> projectMap) { this.projectMap = projectMap; } }