diff options
author | Maria Odea B. Ching <oching@apache.org> | 2008-10-02 08:35:42 +0000 |
---|---|---|
committer | Maria Odea B. Ching <oching@apache.org> | 2008-10-02 08:35:42 +0000 |
commit | 31d7e3515916d3ed98441fd70a2e1ea87ce43224 (patch) | |
tree | 63f44799e4055c88a2fa14c1ecea664642fd8f58 /archiva-modules | |
parent | 8dfa0492c09dabf55a22553ae926dded49cd21dd (diff) | |
download | archiva-31d7e3515916d3ed98441fd70a2e1ea87ce43224.tar.gz archiva-31d7e3515916d3ed98441fd70a2e1ea87ce43224.zip |
[MRM-84]
-added row count config in statistics report
-added pagination in report
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@701033 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules')
3 files changed, 269 insertions, 98 deletions
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java index f254422df..0fcb62342 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java @@ -22,6 +22,8 @@ package org.apache.maven.archiva.web.action.reports; import com.opensymphony.webwork.interceptor.ServletRequestAware; import com.opensymphony.xwork.Preparable; +import org.apache.commons.lang.time.DateFormatUtils; +import org.apache.commons.lang.time.DateUtils; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.database.ArchivaDAO; import org.apache.maven.archiva.database.ArchivaDatabaseException; @@ -51,6 +53,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; + +import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; @@ -123,9 +127,9 @@ public class GenerateReportAction private List<String> availableRepositories; - private Date startDate; + private String startDate; - private Date endDate; + private String endDate; private int reposSize; @@ -133,6 +137,11 @@ public class GenerateReportAction private List<RepositoryStatistics> repositoryStatistics = new ArrayList<RepositoryStatistics>(); + private DataLimits limits = new DataLimits(); + + private String[] datePatterns = new String[] { "MM/dd/yy", "MM/dd/yyyy", "MMMMM/dd/yyyy", "MMMMM/dd/yy", + "dd MMMMM yyyy", "dd/MM/yy", "dd/MM/yyyy", "yyyy/MM/dd" }; + public void prepare() { repositoryIds = new ArrayList<String>(); @@ -177,9 +186,48 @@ public class GenerateReportAction */ public String generateStatistics() { - DataLimits limits = new DataLimits(); - setDefaults(); + if( rowCount < 10 ) + { + addFieldError( "rowCount", "Row count must be larger than 10." ); + return INPUT; + } reposSize = selectedRepositories.size(); + Date startDateInDateFormat = null; + Date endDateInDateFormat = null; + + if( startDate == null || "".equals( startDate ) ) + { + startDateInDateFormat = getDefaultStartDate(); + } + else + { + try + { + startDateInDateFormat = DateUtils.parseDate( startDate, datePatterns ); + } + catch ( ParseException e ) + { + addFieldError( "startDate", "Invalid date format."); + return INPUT; + } + } + + if( endDate == null || "".equals( endDate ) ) + { + endDateInDateFormat = getDefaultEndDate(); + } + else + { + try + { + endDateInDateFormat = DateUtils.parseDate( endDate, datePatterns ); + } + catch ( ParseException e ) + { + addFieldError( "endDate", "Invalid date format."); + return INPUT; + } + } try { @@ -197,7 +245,7 @@ public class GenerateReportAction try { List contentStats = repoContentStatsDao.queryRepositoryContentStatistics( - new RepositoryContentStatisticsByRepositoryConstraint( repo, startDate, endDate ) ); + new RepositoryContentStatisticsByRepositoryConstraint( repo, startDateInDateFormat, endDateInDateFormat ) ); if( contentStats == null || contentStats.isEmpty() ) { @@ -206,7 +254,7 @@ public class GenerateReportAction continue; } - repositoryStatistics.addAll( generator.generateReport( contentStats, repo, startDate, endDate, limits ) ); + repositoryStatistics.addAll( generator.generateReport( contentStats, repo, startDateInDateFormat, endDateInDateFormat, limits ) ); } catch ( ObjectNotFoundException oe ) { @@ -229,7 +277,7 @@ public class GenerateReportAction try { List<RepositoryContentStatistics> contentStats = repoContentStatsDao.queryRepositoryContentStatistics( - new RepositoryContentStatisticsByRepositoryConstraint( selectedRepo, startDate, endDate ) ); + new RepositoryContentStatisticsByRepositoryConstraint( selectedRepo, startDateInDateFormat, endDateInDateFormat ) ); if( contentStats == null || contentStats.isEmpty() ) { @@ -242,7 +290,7 @@ public class GenerateReportAction int totalPages = ( limits.getTotalCount() / limits.getPerPageCount() ) + extraPage; limits.setCountOfPages( totalPages ); - repositoryStatistics = generator.generateReport( contentStats, selectedRepo, startDate, endDate, limits ); + repositoryStatistics = generator.generateReport( contentStats, selectedRepo, startDateInDateFormat, endDateInDateFormat, limits ); } catch ( ObjectNotFoundException oe ) { @@ -259,7 +307,23 @@ public class GenerateReportAction { addFieldError( "availableRepositories", "Please select a repository (or repositories) from the list." ); return INPUT; - } + } + + if( repositoryStatistics.isEmpty() ) + { + return BLANK; + } + + if( startDate.equals( getDefaultStartDate() ) ) + { + startDate = null; + } + else + { + startDate = DateFormatUtils.format( startDateInDateFormat, "MM/dd/yyyy" ); + } + + endDate = DateFormatUtils.format( endDateInDateFormat, "MM/dd/yyyy" ); } catch ( ArchivaReportException e ) { @@ -269,21 +333,19 @@ public class GenerateReportAction return SUCCESS; } - - private void setDefaults() + + private Date getDefaultStartDate() { - if( startDate == null ) - { - Calendar cal = Calendar.getInstance(); - cal.clear(); - cal.set( 1900, 1, 1, 0, 0, 0 ); - startDate = cal.getTime(); - } + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.set( 1900, 1, 1, 0, 0, 0 ); - if( endDate == null ) - { - endDate = Calendar.getInstance().getTime(); - } + return cal.getTime(); + } + + private Date getDefaultEndDate() + { + return Calendar.getInstance().getTime(); } public String execute() @@ -525,22 +587,22 @@ public class GenerateReportAction this.availableRepositories = availableRepositories; } - public Date getStartDate() + public String getStartDate() { return startDate; } - public void setStartDate( Date startDate ) + public void setStartDate( String startDate ) { this.startDate = startDate; } - public Date getEndDate() + public String getEndDate() { return endDate; } - public void setEndDate( Date endDate ) + public void setEndDate( String endDate ) { this.endDate = endDate; } @@ -574,4 +636,14 @@ public class GenerateReportAction { this.selectedRepo = selectedRepo; } + + public DataLimits getLimits() + { + return limits; + } + + public void setLimits( DataLimits limits ) + { + this.limits = limits; + } } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp index 5bcdb7986..62c12bb38 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp @@ -39,6 +39,7 @@ <ww:datepicker label="Start Date" name="startDate" id="startDate"/> <ww:datepicker label="End Date" name="endDate" id="endDate"/> + <ww:textfield label="Row Count" name="rowCount" /> <ww:submit value="View Statistics"/> </ww:form> diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/statisticsReport.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/statisticsReport.jsp index 8366f3eba..dd70758c2 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/statisticsReport.jsp +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/statisticsReport.jsp @@ -30,84 +30,182 @@ <body> <h1>Statistics Report</h1> +<c:url var="imgNextPageUrl" value="/images/icon_next_page.gif"/> +<c:url var="imgPrevPageUrl" value="/images/icon_prev_page.gif"/> +<c:url var="imgPrevPageDisabledUrl" value="/images/icon_prev_page_disabled.gif"/> +<c:url var="imgNextPageDisabledUrl" value="/images/icon_next_page_disabled.gif"/> + <div id="contentArea"> + + <%-- TODO: fix problem in date format! --%> + + <%-- Pagination - start --%> + <p> + + <%-- Set Prev & Next icons --%> + <c:set var="prevPageUrl"> + <ww:url action="generateStatisticsReport" namespace="/report"> + <ww:param name="selectedRepositories" value="%{'${selectedRepositories}'}"/> + <ww:param name="rowCount" value="%{'${rowCount}'}"/> + <ww:param name="startDate" value="%{'${startDate}'}"/> + <ww:param name="endDate" value="%{'${endDate}'}"/> + <ww:param name="page" value="%{'${page - 1}'}"/> + </ww:url> + </c:set> + <c:set var="nextPageUrl"> + <ww:url action="generateStatisticsReport" namespace="/report"> + <ww:param name="selectedRepositories" value="%{'${selectedRepositories}'}"/> + <ww:param name="rowCount" value="%{'${rowCount}'}"/> + <ww:param name="startDate" value="%{'${startDate}'}"/> + <ww:param name="endDate" value="%{'${endDate}'}"/> + <ww:param name="page" value="%{'${page + 1}'}"/> + </ww:url> + </c:set> + + <c:choose> + <c:when test="${page == 1}"> + <img src="${imgPrevPageDisabledUrl}"/> + </c:when> + <c:otherwise> + <a href="${prevPageUrl}"> + <img src="${imgPrevPageUrl}"/> + </a> + </c:otherwise> + </c:choose> + + <%-- Google-style pagination --%> + <c:choose> + <c:when test="${limits.countOfPages > 11}"> + <c:choose> + <c:when test="${(page - 5) < 0}"> + <c:set var="beginVal">0</c:set> + <c:set var="endVal">10</c:set> + </c:when> + <c:when test="${(page + 5) > (limits.countOfPages - 1)}"> + <c:set var="beginVal">${(limits.countOfPages -1) - 10}</c:set> + <c:set var="endVal">${limits.countOfPages - 1}</c:set> + </c:when> + <c:otherwise> + <c:set var="beginVal">${page - 5}</c:set> + <c:set var="endVal">${page + 5}</c:set> + </c:otherwise> + </c:choose> + </c:when> + <c:otherwise> + <c:set var="beginVal">0</c:set> + <c:set var="endVal">${limits.countOfPages - 1}</c:set> + </c:otherwise> + </c:choose> + + <c:forEach var="i" begin="${beginVal}" end="${endVal}"> + <c:choose> + <c:when test="${i != (page - 1)}"> + <c:set var="specificPageUrl"> + <ww:url action="generateStatisticsReport" namespace="/report"> + <ww:param name="selectedRepositories" value="%{'${selectedRepositories}'}"/> + <ww:param name="rowCount" value="%{'${rowCount}'}"/> + <ww:param name="startDate" value="%{'${startDate}'}"/> + <ww:param name="endDate" value="%{'${endDate}'}"/> + <ww:param name="page" value="%{'${page + 1}'}"/> + </ww:url> + </c:set> + <a href="${specificPageUrl}">${i + 1}</a> + </c:when> + <c:otherwise> + <b>${i + 1}</b> + </c:otherwise> + </c:choose> + </c:forEach> + + <c:choose> + <c:when test="${page == limits.countOfPages}"> + <img src="${imgNextPageDisabledUrl}"/> + </c:when> + <c:otherwise> + <a href="${nextPageUrl}"> + <img src="${imgNextPageUrl}"/> + </a> + </c:otherwise> + </c:choose> + </p> + <%-- Pagination - end --%> + <c:choose> - <c:when test="${reposSize > 1}"> + <c:when test="${reposSize > 1}"> - <h1>Latest Statistics Comparison Report</h1> - <table class="infoTable" border="1"> - <tr> - <th>Repository</th> - <th>Total File Count</th> - <th>Total Size</th> - <th>Artifact Count</th> - <th>Group Count</th> - <th>Project Count</th> - <th>Plugins</th> - <th>Archetypes</th> - <th>Jars</th> - <th>Wars</th> - <th>Deployments</th> - <th>Downloads</th> - </tr> + <h1>Latest Statistics Comparison Report</h1> + <table class="infoTable" border="1"> + <tr> + <th>Repository</th> + <th>Total File Count</th> + <th>Total Size</th> + <th>Artifact Count</th> + <th>Group Count</th> + <th>Project Count</th> + <th>Plugins</th> + <th>Archetypes</th> + <th>Jars</th> + <th>Wars</th> + <th>Deployments</th> + <th>Downloads</th> + </tr> - <c:forEach var="stats" items="${repositoryStatistics}"> - <tr> - <td>${stats.repositoryId}</td> - <td align="right">${stats.fileCount}</td> - <td align="right">${stats.totalSize}</td> - <td align="right">${stats.artifactCount}</td> - <td align="right">${stats.groupCount}</td> - <td align="right">${stats.projectCount}</td> - <td align="right">${stats.pluginCount}</td> - <td align="right">${stats.archetypeCount}</td> - <td align="right">${stats.jarCount}</td> - <td align="right">${stats.warCount}</td> - <td align="right">${stats.deploymentCount}</td> - <td align="right">${stats.downloadCount}</td> - </tr> - </c:forEach> - </table> - - </c:when> - <c:otherwise> + <c:forEach var="stats" items="${repositoryStatistics}"> + <tr> + <td>${stats.repositoryId}</td> + <td align="right">${stats.fileCount}</td> + <td align="right">${stats.totalSize}</td> + <td align="right">${stats.artifactCount}</td> + <td align="right">${stats.groupCount}</td> + <td align="right">${stats.projectCount}</td> + <td align="right">${stats.pluginCount}</td> + <td align="right">${stats.archetypeCount}</td> + <td align="right">${stats.jarCount}</td> + <td align="right">${stats.warCount}</td> + <td align="right">${stats.deploymentCount}</td> + <td align="right">${stats.downloadCount}</td> + </tr> + </c:forEach> + </table> + </c:when> + <c:otherwise> - <h1>Statistics for Repository '${selectedRepo}'</h1> - <table class="infoTable" border="1"> - <tr> - <th>Date of Scan</th> - <th>Total File Count</th> - <th>Total Size</th> - <th>Artifact Count</th> - <th>Group Count</th> - <th>Project Count</th> - <th>Plugins</th> - <th>Archetypes</th> - <th>Jars</th> - <th>Wars</th> - <th>Deployments</th> - <th>Downloads</th> - </tr> + <h1>Statistics for Repository '${selectedRepo}'</h1> + <table class="infoTable" border="1"> + <tr> + <th>Date of Scan</th> + <th>Total File Count</th> + <th>Total Size</th> + <th>Artifact Count</th> + <th>Group Count</th> + <th>Project Count</th> + <th>Plugins</th> + <th>Archetypes</th> + <th>Jars</th> + <th>Wars</th> + <th>Deployments</th> + <th>Downloads</th> + </tr> - <c:forEach var="stats" items="${repositoryStatistics}"> - <tr> - <td align="right">${stats.dateOfScan}</td> - <td align="right">${stats.fileCount}</td> - <td align="right">${stats.totalSize}</td> - <td align="right">${stats.artifactCount}</td> - <td align="right">${stats.groupCount}</td> - <td align="right">${stats.projectCount}</td> - <td align="right">${stats.pluginCount}</td> - <td align="right">${stats.archetypeCount}</td> - <td align="right">${stats.jarCount}</td> - <td align="right">${stats.warCount}</td> - <td align="right">${stats.deploymentCount}</td> - <td align="right">${stats.downloadCount}</td> - </tr> - </c:forEach> - </table> - - </c:otherwise> + <c:forEach var="stats" items="${repositoryStatistics}"> + <tr> + <td align="right">${stats.dateOfScan}</td> + <td align="right">${stats.fileCount}</td> + <td align="right">${stats.totalSize}</td> + <td align="right">${stats.artifactCount}</td> + <td align="right">${stats.groupCount}</td> + <td align="right">${stats.projectCount}</td> + <td align="right">${stats.pluginCount}</td> + <td align="right">${stats.archetypeCount}</td> + <td align="right">${stats.jarCount}</td> + <td align="right">${stats.warCount}</td> + <td align="right">${stats.deploymentCount}</td> + <td align="right">${stats.downloadCount}</td> + </tr> + </c:forEach> + </table> + + </c:otherwise> </c:choose> </div> |