From: <jbo...@li...> - 2005-11-03 09:28:37
|
Author: aron.gombas Date: 2005-11-03 04:28:19 -0500 (Thu, 03 Nov 2005) New Revision: 1487 Added: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcConstants.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraConstants.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfConstants.java Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java Log: Constants refactored to separate classes Added: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcConstants.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcConstants.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcConstants.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -0,0 +1,26 @@ +/* + * Kosmos. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package hu.midori.kosmos.server.cc; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +/** + * <i>CruiseControl</i>-related constants. + * + * @author <a href="mailto:aro...@mi...">Aron Gombas</a> + * @version $Id$ + */ +public class CcConstants { + /** Dateformat used with the builds. */ + public final static DateFormat CC_BUILD_DATEFORMAT = new SimpleDateFormat("yyyyMMddhhmmss"); + + /** Color code for the test categories. */ + public final static int SUCCESS_COLOR = 0x00FF00; + public final static int FAILURE_COLOR = 0xFF0000; + public final static int ERROR_COLOR = 0xDD0000; +} Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -20,8 +20,6 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FilenameFilter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -45,13 +43,6 @@ public class CcServiceImpl extends AbstractKosmosService implements CcService { private final static Log log = LogFactory.getLog(CcServiceImpl.class); - /** Dateformat used with the builds. */ - private final static DateFormat CC_BUILD_DATEFORMAT = new SimpleDateFormat("yyyyMMddhhmmss"); - /** Color code for the test categories. */ - private final static int SUCCESS_COLOR = 0x00FF00; - private final static int FAILURE_COLOR = 0xFF0000; - private final static int ERROR_COLOR = 0xDD0000; - /** Service-specific handler. */ private CcDataHandler handler = new CcDataHandler(); @@ -101,7 +92,7 @@ String name = ScrapingUtils.runXQueryString(dom, "<dummy> { data(//property[@name='projectname']/@value) } </dummy>"); String buildLabel = ScrapingUtils.runXQueryString(dom, "<dummy> { data(//property[@name='label']/@value) } </dummy>"); int status = (ScrapingUtils.runXQueryString(dom, "<dummy> { data(//build/@error) } </dummy>").length() == 0) ? CcBuildStatus.SUCCEEDED : CcBuildStatus.FAILED; - Date timestamp = CC_BUILD_DATEFORMAT.parse(ScrapingUtils.runXQueryString(dom, "<dummy> { data(//property[@name='lastbuild']/@value) } </dummy>")); + Date timestamp = CcConstants.CC_BUILD_DATEFORMAT.parse(ScrapingUtils.runXQueryString(dom, "<dummy> { data(//property[@name='lastbuild']/@value) } </dummy>")); int modifications = ScrapingUtils.runXQueryInt(dom, "<dummy> { data(count(//modification)) } </dummy>"); String buildTime = ScrapingUtils.runXQueryString(dom, "<dummy> { data(//build/@time) } </dummy>");// TODO if we keep it as String, that cannot be localized -> should be intelligently parsed (using a Duration class maybe?) and stored as Object int tests = ScrapingUtils.runXQueryInt(dom, "<dummy> { data(count(//testcase)) } </dummy>"); @@ -142,11 +133,11 @@ List<Map.Entry<Integer, Integer>> testsPerCategory = new ArrayList<Map.Entry<Integer, Integer>>(); int success = tests - errors - failures; if(success > 0) - testsPerCategory.addAll(Collections.singletonMap(SUCCESS_COLOR, success).entrySet()); + testsPerCategory.addAll(Collections.singletonMap(CcConstants.SUCCESS_COLOR, success).entrySet()); if(failures > 0) - testsPerCategory.addAll(Collections.singletonMap(FAILURE_COLOR, failures).entrySet()); + testsPerCategory.addAll(Collections.singletonMap(CcConstants.FAILURE_COLOR, failures).entrySet()); if(errors > 0) - testsPerCategory.addAll(Collections.singletonMap(ERROR_COLOR, errors).entrySet()); + testsPerCategory.addAll(Collections.singletonMap(CcConstants.ERROR_COLOR, errors).entrySet()); ByteArrayOutputStream out = new ByteArrayOutputStream(); ChartUtils.writeChartAsPng(ChartUtils.generateColorCodedPieChart(ChartUtils.collectionToPieDataset(testsPerCategory)), out); Added: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraConstants.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraConstants.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraConstants.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -0,0 +1,30 @@ +/* + * Kosmos. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package hu.midori.kosmos.server.jira; + +/** + * <i>JIRA</i>-related constants. + * + * @author <a href="mailto:aro...@mi...">Aron Gombas</a> + * @version $Id$ + */ +public class JiraConstants { + /** Color codes for the issue statuses. */ + public final static int OPEN_COLOR = 0xFF0000; + public final static int CODING_IN_PROGRESS_COLOR = 0xFFFF00; + public final static int REOPENED_COLOR = 0xDD0000; + public final static int RESOLVED_COLOR = 0x00FF00; + public final static int CLOSED_COLOR = 0xDDDDDD; + + /** Color codes for issue priorities. */ + public final static int BLOCKER_COLOR = 0xFF0000; + public final static int CRITICAL_COLOR = 0xEE0000; + public final static int MAJOR_COLOR = 0xDD0000; + public final static int MINOR_COLOR = 0xFFFF00; + public final static int TRIVIAL_COLOR = 0xEEEE00; + public final static int OPTIONAL_COLOR = 0xDDDDDD; +} Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -15,6 +15,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; @@ -39,21 +40,6 @@ public class JiraServiceImpl extends AbstractKosmosService implements JiraService { private final static Log log = LogFactory.getLog(JiraServiceImpl.class); - /** Color codes for the issue statuses. */ - private final static int OPEN_COLOR = 0xFF0000; - private final static int CODING_IN_PROGRESS_COLOR = 0xFFFF00; - private final static int REOPENED_COLOR = 0xDD0000; - private final static int RESOLVED_COLOR = 0x00FF00; - private final static int CLOSED_COLOR = 0xDDDDDD; - - /** Color codes for issue priorities. */ - private final static int BLOCKER_COLOR = 0xFF0000; - private final static int CRITICAL_COLOR = 0xEE0000; - private final static int MAJOR_COLOR = 0xDD0000; - private final static int MINOR_COLOR = 0xFFFF00; - private final static int TRIVIAL_COLOR = 0xEEEE00; - private final static int OPTIONAL_COLOR = 0xDDDDDD; - /** Service-specific handler. */ private JiraDataHandler handler = new JiraDataHandler(); @@ -72,6 +58,7 @@ * </ul> */ private class JiraDataHandler implements CachedDataHandler { + /** There is no quick way to decide if the data is stale. */ public boolean isDataUptodate(Object key) { return false; } @@ -80,10 +67,15 @@ String url = key.toString(); List<JiraProject> projects = new ArrayList<JiraProject>(); - try { - Document dom = ScrapingUtils.downloadHtmlDom(new URL(url)); - + try { + // download database info + connect(url); + Document dom = ScrapingUtils.downloadHtmlDom(new URL(ScrapingUtils.removeUserInfoFromUrl(url))); + disconnect(url); + // TODO review these queries + // TODO restructure all the services code + // run XQueries String queryProject = "for " + @@ -207,6 +199,8 @@ } // scrape issue assignees + String prefix = ScrapingUtils.removeUserInfoFromUrl(url); + Map<String, Integer> openIssuesPerAssigneeMap = new HashMap<String, Integer>(); for(Iterator itIssueAssignee = resultIssueAssignee.iterator(); itIssueAssignee.hasNext();) { String valueIssueAssignee = ((NodeInfo)itIssueAssignee.next()).getStringValue(); @@ -220,47 +214,47 @@ List<Map.Entry<String, Integer>> openIssuesPerAssignee = (List<Map.Entry<String, Integer>>)ChartUtils.intValuedMapToSortedList(openIssuesPerAssigneeMap); ByteArrayOutputStream out = new ByteArrayOutputStream(); - ChartUtils.writeChartAsPng(ChartUtils.generatePieChart(ChartUtils.collectionToPieDataset(openIssuesPerAssignee, ChartUtils.MAX_ITEMS)), out);// TODO fix all generics warnings - String openIssuesPerAssigneeChartUrl = saveCachedFile(url + "_open_issues_per_assignee.png", new ByteArrayInputStream(out.toByteArray())); + ChartUtils.writeChartAsPng(ChartUtils.generatePieChart(ChartUtils.collectionToPieDataset(openIssuesPerAssignee, ChartUtils.MAX_ITEMS)), out); + String openIssuesPerAssigneeChartUrl = saveCachedFile(prefix + "_open_issues_per_assignee.png", new ByteArrayInputStream(out.toByteArray())); // generate issues-per-status chart List<Map.Entry<Integer, Integer>> issuesPerStatusMap = new ArrayList<Map.Entry<Integer, Integer>>(); if(openIssues > 0) - issuesPerStatusMap.addAll(Collections.singletonMap(OPEN_COLOR, openIssues).entrySet()); + issuesPerStatusMap.addAll(Collections.singletonMap(JiraConstants.OPEN_COLOR, openIssues).entrySet()); if(codingInProgressIssues > 0) - issuesPerStatusMap.addAll(Collections.singletonMap(CODING_IN_PROGRESS_COLOR, codingInProgressIssues).entrySet()); + issuesPerStatusMap.addAll(Collections.singletonMap(JiraConstants.CODING_IN_PROGRESS_COLOR, codingInProgressIssues).entrySet()); if(reopenedIssues > 0) - issuesPerStatusMap.addAll(Collections.singletonMap(REOPENED_COLOR, reopenedIssues).entrySet()); + issuesPerStatusMap.addAll(Collections.singletonMap(JiraConstants.REOPENED_COLOR, reopenedIssues).entrySet()); if(resolvedIssues > 0) - issuesPerStatusMap.addAll(Collections.singletonMap(RESOLVED_COLOR, resolvedIssues).entrySet()); + issuesPerStatusMap.addAll(Collections.singletonMap(JiraConstants.RESOLVED_COLOR, resolvedIssues).entrySet()); if(closedIssues > 0) - issuesPerStatusMap.addAll(Collections.singletonMap(CLOSED_COLOR, closedIssues).entrySet()); + issuesPerStatusMap.addAll(Collections.singletonMap(JiraConstants.CLOSED_COLOR, closedIssues).entrySet()); out.reset(); ChartUtils.writeChartAsPng(ChartUtils.generateColorCodedPieChart(ChartUtils.collectionToPieDataset(issuesPerStatusMap)), out); - String issuesPerStatusChartUrl = saveCachedFile(url + "_issues_per_status.png", new ByteArrayInputStream(out.toByteArray())); + String issuesPerStatusChartUrl = saveCachedFile(prefix + "_issues_per_status.png", new ByteArrayInputStream(out.toByteArray())); // generate issues-per-priority chart List<Map.Entry<Integer, Integer>> openIssuesPerPriorityMap = new ArrayList<Map.Entry<Integer, Integer>>(); if(blockerOpenIssues > 0) - openIssuesPerPriorityMap.addAll(Collections.singletonMap(BLOCKER_COLOR, blockerOpenIssues).entrySet()); + openIssuesPerPriorityMap.addAll(Collections.singletonMap(JiraConstants.BLOCKER_COLOR, blockerOpenIssues).entrySet()); if(criticalOpenIssues > 0) - openIssuesPerPriorityMap.addAll(Collections.singletonMap(CRITICAL_COLOR, criticalOpenIssues).entrySet()); + openIssuesPerPriorityMap.addAll(Collections.singletonMap(JiraConstants.CRITICAL_COLOR, criticalOpenIssues).entrySet()); if(majorOpenIssues > 0) - openIssuesPerPriorityMap.addAll(Collections.singletonMap(MAJOR_COLOR, majorOpenIssues).entrySet()); + openIssuesPerPriorityMap.addAll(Collections.singletonMap(JiraConstants.MAJOR_COLOR, majorOpenIssues).entrySet()); if(minorOpenIssues > 0) - openIssuesPerPriorityMap.addAll(Collections.singletonMap(MINOR_COLOR, minorOpenIssues).entrySet()); + openIssuesPerPriorityMap.addAll(Collections.singletonMap(JiraConstants.MINOR_COLOR, minorOpenIssues).entrySet()); if(trivialOpenIssues > 0) - openIssuesPerPriorityMap.addAll(Collections.singletonMap(TRIVIAL_COLOR, trivialOpenIssues).entrySet()); + openIssuesPerPriorityMap.addAll(Collections.singletonMap(JiraConstants.TRIVIAL_COLOR, trivialOpenIssues).entrySet()); if(optionalOpenIssues > 0) - openIssuesPerPriorityMap.addAll(Collections.singletonMap(OPTIONAL_COLOR, optionalOpenIssues).entrySet()); + openIssuesPerPriorityMap.addAll(Collections.singletonMap(JiraConstants.OPTIONAL_COLOR, optionalOpenIssues).entrySet()); out.reset(); ChartUtils.writeChartAsPng(ChartUtils.generateColorCodedPieChart(ChartUtils.collectionToPieDataset(openIssuesPerPriorityMap)), out); - String openIssuesPerPriorityChartUrl = saveCachedFile(url + "_open_issues_per_priority.png", new ByteArrayInputStream(out.toByteArray())); + String openIssuesPerPriorityChartUrl = saveCachedFile(prefix + "_open_issues_per_priority.png", new ByteArrayInputStream(out.toByteArray())); // save - JiraProject project = new JiraProject(name, url, projectKey, projectUrl, description, lead, + JiraProject project = new JiraProject(name, prefix, projectKey, projectUrl, description, lead, openIssues, codingInProgressIssues, reopenedIssues, resolvedIssues, closedIssues, blockerOpenIssues, criticalOpenIssues, majorOpenIssues, minorOpenIssues, trivialOpenIssues, optionalOpenIssues, (List<Map.Entry<String, Integer>>)openIssuesPerAssignee, @@ -274,5 +268,26 @@ return projects; } + + /** + * Connects to the given public or secure JIRA URL. + * @return the repository after a successful connection. + */ + protected void connect(String url) throws MalformedURLException { + // authenticate if project is secured + String userInfo[] = ScrapingUtils.parseUserInfo(url); + if(userInfo != null) { + String userName = userInfo[0]; + String password = userInfo[1]; + + log.debug(String.format("Signing in as \"%s\" \"%s\"...", userName, password)); + // TODO connect here + } + } + + /** Disconnects from the given URL. */ + protected void disconnect(String url) { + // do nothing + } } } Added: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfConstants.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfConstants.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfConstants.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -0,0 +1,24 @@ +/* + * Kosmos. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package hu.midori.kosmos.server.sf; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +/** + * <i>SourceForge</i>-related constants. + * + * @author <a href="mailto:aro...@mi...">Aron Gombas</a> + * @version $Id$ + */ +public class SfConstants { + /** Base URL for SF, used to generate full URLs from the local ones. */ + public final static String SF_BASEURL = "http://www.sourceforge.net"; + + /** Dateformat used in the SF site. */ + public final static DateFormat SF_FILERELEASE_DATEFORMAT = new SimpleDateFormat("MMM d, yyyy"); +} Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -13,8 +13,6 @@ import hu.midori.kosmos.server.util.ScrapingUtils; import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; @@ -36,11 +34,6 @@ public class SfServiceImpl extends AbstractKosmosService implements SfService { private final static Log log = LogFactory.getLog(SfServiceImpl.class); - /** Base URL for SF, used to generate full URLs from the local ones. */ - private final static String SF_BASEURL = "http://www.sourceforge.net"; - /** Dateformat used in the SF site. */ - private final static DateFormat SF_FILERELEASE_DATEFORMAT = new SimpleDateFormat("MMM d, yyyy"); - /** Service-specific handler. */ private SfDataHandler handler = new SfDataHandler(); @@ -90,10 +83,10 @@ StringTokenizer tokenizer = new StringTokenizer(value, "|"); String packageName = tokenizer.nextToken(); - String packageUrl = SF_BASEURL + tokenizer.nextToken(); + String packageUrl = SfConstants.SF_BASEURL + tokenizer.nextToken(); String version = tokenizer.nextToken(); - String versionUrl = SF_BASEURL + tokenizer.nextToken(); - Date date = SF_FILERELEASE_DATEFORMAT.parse(tokenizer.nextToken()); + String versionUrl = SfConstants.SF_BASEURL + tokenizer.nextToken(); + Date date = SfConstants.SF_FILERELEASE_DATEFORMAT.parse(tokenizer.nextToken()); SfRelease release = new SfRelease(packageName, packageUrl, version, versionUrl, date); log.debug(String.format("Adding %s...", release)); Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java 2005-11-02 14:27:40 UTC (rev 1486) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java 2005-11-03 09:28:19 UTC (rev 1487) @@ -18,6 +18,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -29,7 +30,6 @@ import java.util.Set; import java.util.TreeMap; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jfree.data.time.TimeSeries; @@ -86,57 +86,30 @@ try { SVNRepository repo = connect(url); - return (repo.getLatestRevision() == previousLatestRevision); - } catch(SVNException ex) { + boolean isUptodate = (repo.getLatestRevision() == previousLatestRevision); + disconnect(repo); + + return isUptodate; + } catch(Exception ex) { log.error("Unable to get the latest revision", ex); return false; } } - - /** - * Connects to the given public or secure SVN URL. - * @return the repository after a successful connection. - */ - protected SVNRepository connect(String url) throws SVNException { - // connect to repository - SVNURL svnUrl = SVNURL.parseURIEncoded(url); - SVNRepository repo = SVNRepositoryFactory.create(svnUrl); - - // authenticate if repository is secured - String userInfo = svnUrl.getUserInfo(); - if(!StringUtils.isBlank(userInfo)) { - String strings[] = StringUtils.split(userInfo, ':'); - if(strings.length != 2) - throw new IllegalArgumentException(String.format("Invalid user info \"%s\"", userInfo)); - String userName = strings[0]; - String password = strings[1]; - if(StringUtils.isBlank(userName) || StringUtils.isBlank(password)) - throw new IllegalArgumentException(String.format("Invalid username (\"%s\") or password (\"%s\")", userName, password)); - log.debug(String.format("Signing in as \"%s\" \"%s\"...", userName, password)); - repo.setAuthenticationManager(SVNWCUtil.createDefaultAuthenticationManager(userName, password)); - } - - return repo; - } - public Object reloadData(Object key) { String url = key.toString(); List<SvnRepository> repositories = new ArrayList<SvnRepository>(); - // setup JavaSVN - DAVRepositoryFactory.setup(); - SVNRepositoryFactoryImpl.setup(); - try { - // connect + // get repository info SVNRepository repo = connect(url); - // get repository info - SvnRepositoryLogStats logStats = analyzeLog(repo); + SvnRepositoryLogStats logStats = analyzeLog(repo); SvnRepositoryContentStats contentStats = analyzeContent(repo); generateCharts(repo, logStats); + disconnect(repo); + // save previousLatestRevision = repo.getLatestRevision(); SvnRepository repository = new SvnRepository(ScrapingUtils.removeUserInfoFromUrl(repo.getLocation().toString()), repo.getLatestRevision(), @@ -154,7 +127,38 @@ return repositories; } + + /** + * Connects to the given public or secure SVN URL. + * @return the repository after a successful connection. + */ + protected SVNRepository connect(String url) throws MalformedURLException, SVNException { + // setup JavaSVN + DAVRepositoryFactory.setup(); + SVNRepositoryFactoryImpl.setup(); + + // connect to repository + SVNURL svnUrl = SVNURL.parseURIEncoded(url); + SVNRepository repo = SVNRepositoryFactory.create(svnUrl); + + // authenticate if repository is secured + String userInfo[] = ScrapingUtils.parseUserInfo(svnUrl.toString()); + if(userInfo != null) { + String userName = userInfo[0]; + String password = userInfo[1]; + log.debug(String.format("Signing in as \"%s\" \"%s\"...", userName, password)); + repo.setAuthenticationManager(SVNWCUtil.createDefaultAuthenticationManager(userName, password)); + } + + return repo; + } + + /** Disconnects from the given repository. */ + protected void disconnect(SVNRepository repo) { + // do nothing + } + /** Wraps the stats retrieved from the content of a SVN repository. */ private class SvnRepositoryLogStats {// TODO rewrite as bean public Date createdDate; @@ -353,24 +357,24 @@ /** Generates and saves the chart images on the server, and sets the URLs to the stats. */ protected void generateCharts(SVNRepository repository, SvnRepositoryLogStats stats) throws IOException { - String location = ScrapingUtils.removeUserInfoFromUrl(repository.getLocation().toString()); + String prefix = ScrapingUtils.removeUserInfoFromUrl(repository.getLocation().toString()); // generate charts ByteArrayOutputStream out = new ByteArrayOutputStream(); ChartUtils.writeChartAsPng(ChartUtils.generatePieChart(ChartUtils.collectionToPieDataset(stats.commitsPerAuthor, ChartUtils.MAX_ITEMS)), out); - stats.commitsPerAuthorChartUrl = saveCachedFile(location + "_commits_per_author.png", new ByteArrayInputStream(out.toByteArray())); + stats.commitsPerAuthorChartUrl = saveCachedFile(prefix + "_commits_per_author.png", new ByteArrayInputStream(out.toByteArray())); out.reset(); ChartUtils.writeChartAsPng(ChartUtils.generatePieChart(ChartUtils.collectionToPieDataset(stats.commitsPerFile, ChartUtils.MAX_ITEMS)), out); - stats.commitsPerFileChartUrl = saveCachedFile(location + "_commits_per_file.png", new ByteArrayInputStream(out.toByteArray())); + stats.commitsPerFileChartUrl = saveCachedFile(prefix + "_commits_per_file.png", new ByteArrayInputStream(out.toByteArray())); out.reset(); ChartUtils.writeChartAsPng(ChartUtils.generateTimeChart(stats.commitsPerWeek), out); - stats.commitsPerWeekChartUrl = saveCachedFile(location + "_commits_per_week.png", new ByteArrayInputStream(out.toByteArray())); + stats.commitsPerWeekChartUrl = saveCachedFile(prefix + "_commits_per_week.png", new ByteArrayInputStream(out.toByteArray())); out.reset(); ChartUtils.writeChartAsPng(ChartUtils.generateTimeChart(stats.repoEntriesPerWeek), out); - stats.repoEntriesPerWeekChartUrl = saveCachedFile(location + "_files_per_week.png", new ByteArrayInputStream(out.toByteArray())); + stats.repoEntriesPerWeekChartUrl = saveCachedFile(prefix + "_files_per_week.png", new ByteArrayInputStream(out.toByteArray())); } } } |