=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportService.java 2013-07-23 07:51:07 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportService.java 2013-08-12 13:07:42 +0000 @@ -28,6 +28,7 @@ */ import java.io.OutputStream; +import java.io.Writer; import java.util.Collection; import java.util.List; @@ -78,6 +79,17 @@ */ JasperPrint renderReport( OutputStream out, String reportUid, Period period, String organisationUnitUid, String type, I18nFormat format ); + + /** + * Renders and writes a HTML-based standard report to the given Writer. + * + * @param writer the Writer. + * @param uid the report uid. + * @param pe the period iso identifier. + * @param ou the organisation unit uid. + * @param format the I18nFormat. + */ + void renderHtmlReport( Writer writer, String uid, String pe, String ou, I18nFormat format ); /** * Saves a Report. === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java 2013-07-23 07:51:07 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java 2013-08-12 13:07:42 +0000 @@ -31,7 +31,9 @@ import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; import java.io.OutputStream; +import java.io.Writer; import java.sql.Connection; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -46,23 +48,28 @@ import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRProperties; +import org.apache.velocity.VelocityContext; import org.hisp.dhis.common.GenericIdentifiableObjectStore; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.IdentifiableObjectUtils; import org.hisp.dhis.constant.ConstantService; +import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; +import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.report.Report; import org.hisp.dhis.report.ReportService; import org.hisp.dhis.reporttable.ReportTable; import org.hisp.dhis.reporttable.ReportTableService; +import org.hisp.dhis.system.util.Encoder; import org.hisp.dhis.system.util.Filter; import org.hisp.dhis.system.util.FilterUtils; import org.hisp.dhis.system.util.JRExportUtils; import org.hisp.dhis.system.util.StreamUtils; +import org.hisp.dhis.system.velocity.VelocityManager; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.transaction.annotation.Transactional; @@ -76,6 +83,8 @@ { public static final String ORGUNIT_LEVEL_COLUMN_PREFIX = "idlevel"; public static final String ORGUNIT_UID_LEVEL_COLUMN_PREFIX = "uidlevel"; + + private static final Encoder ENCODER = new Encoder(); // ------------------------------------------------------------------------- // Dependencies @@ -217,6 +226,58 @@ return print; } + + public void renderHtmlReport( Writer writer, String uid, String pe, String ou, I18nFormat format ) + { + Report report = getReport( uid ); + OrganisationUnit organisationUnit = null; + List organisationUnitHierarchy = new ArrayList(); + List organisationUnitChildren = new ArrayList(); + List periods = new ArrayList(); + + if ( ou != null ) + { + organisationUnit = organisationUnitService.getOrganisationUnit( ou ); + + if ( organisationUnit != null ) + { + organisationUnitHierarchy.add( organisationUnit ); + + OrganisationUnit parent = organisationUnit; + + while ( parent.getParent() != null ) + { + parent = parent.getParent(); + organisationUnitHierarchy.add( parent ); + } + + organisationUnitChildren.addAll( organisationUnit.getChildren() ); + } + } + + Date date = new Date(); + + if ( pe != null ) + { + date = PeriodType.getPeriodFromIsoString( pe ).getStartDate(); + } + + if ( report != null && report.hasRelativePeriods() ) + { + periods = report.getRelatives().getRelativePeriods( date, format, true ); + } + + final VelocityContext context = new VelocityContext(); + context.put( "report", report ); + context.put( "organisationUnit", organisationUnit ); + context.put( "organisationUnitHierarchy", organisationUnitHierarchy ); + context.put( "organisationUnitChildren", organisationUnitChildren ); + context.put( "periods", periods ); + context.put( "format", format ); + context.put( "encoder", ENCODER ); + + new VelocityManager().getEngine().getTemplate( "html-report.vm" ).merge( context, writer ); + } public int saveReport( Report report ) { === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportController.java 2013-06-09 21:26:26 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportController.java 2013-08-12 13:07:42 +0000 @@ -27,6 +27,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.system.util.CodecUtils.filenameEncode; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -36,6 +38,7 @@ import org.hisp.dhis.api.utils.ContextUtils; import org.hisp.dhis.api.utils.ContextUtils.CacheStrategy; +import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.i18n.I18nManager; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.MonthlyPeriodType; @@ -53,8 +56,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; -import static org.hisp.dhis.system.util.CodecUtils.filenameEncode; - /** * @author Morten Olav Hansen * @author Lars Helge Overland @@ -102,9 +103,7 @@ @RequestParam( value = "pe", required = false ) String period, HttpServletRequest request, HttpServletResponse response ) throws Exception { - JasperPrint print = getReport( request, response, uid, organisationUnitUid, period, "html", ContextUtils.CONTENT_TYPE_HTML, false ); - - request.getSession().setAttribute( BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print ); + getReport( request, response, uid, organisationUnitUid, period, "html", ContextUtils.CONTENT_TYPE_HTML, false ); } @RequestMapping( value = "/{uid}/design", method = RequestMethod.PUT ) @@ -170,15 +169,17 @@ // Supportive methods // ------------------------------------------------------------------------- - private JasperPrint getReport( HttpServletRequest request, HttpServletResponse response, String uid, String organisationUnitUid, String isoPeriod, + private void getReport( HttpServletRequest request, HttpServletResponse response, String uid, String organisationUnitUid, String isoPeriod, String type, String contentType, boolean attachment ) throws Exception { Report report = reportService.getReport( uid ); + + I18nFormat format = i18nManager.getI18nFormat(); if ( report == null ) { ContextUtils.notFoundResponse( response, "Report does not exist: " + uid ); - return null; + return; } if ( organisationUnitUid == null && report.hasReportTable() && report.getReportTable().hasReportParams() @@ -189,12 +190,24 @@ Period period = isoPeriod != null ? PeriodType.getPeriodFromIsoString( isoPeriod ) : new MonthlyPeriodType().createPeriod(); - String filename = CodecUtils.filenameEncode( report.getName() ) + "." + type; - contextUtils.configureResponse( response, contentType, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, attachment ); - - JasperPrint print = reportService.renderReport( response.getOutputStream(), uid, period, organisationUnitUid, type, - i18nManager.getI18nFormat() ); - - return print; + if ( report.isTypeHtml() ) + { + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_HTML, CacheStrategy.RESPECT_SYSTEM_SETTING ); + + reportService.renderHtmlReport( response.getWriter(), uid, isoPeriod, organisationUnitUid, format ); + } + else + { + String filename = CodecUtils.filenameEncode( report.getName() ) + "." + type; + + contextUtils.configureResponse( response, contentType, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, attachment ); + + JasperPrint print = reportService.renderReport( response.getOutputStream(), uid, period, organisationUnitUid, type, format ); + + if ( "html".equals( type ) ) + { + request.getSession().setAttribute( BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print ); + } + } } } === modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/reportviewer/action/GetReportAndParamsAction.java' --- dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/reportviewer/action/GetReportAndParamsAction.java 2013-04-30 11:25:21 +0000 +++ dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/reportviewer/action/GetReportAndParamsAction.java 2013-08-12 13:07:42 +0000 @@ -27,16 +27,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.io.StringWriter; +import java.io.Writer; import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; -import org.hisp.dhis.period.Period; -import org.hisp.dhis.period.PeriodType; -import org.hisp.dhis.report.Report; import org.hisp.dhis.report.ReportService; import org.springframework.beans.factory.annotation.Autowired; @@ -90,39 +85,11 @@ // Output // ------------------------------------------------------------------------- - private Report report; - - public Report getReport() - { - return report; - } - - private OrganisationUnit organisationUnit; - - public OrganisationUnit getOrganisationUnit() - { - return organisationUnit; - } - - private List organisationUnitHierarchy = new ArrayList(); - - public List getOrganisationUnitHierarchy() - { - return organisationUnitHierarchy; - } - - private List organisationUnitChildren = new ArrayList(); - - public List getOrganisationUnitChildren() - { - return organisationUnitChildren; - } - - private List periods; - - public List getPeriods() - { - return periods; + private String content; + + public String getContent() + { + return content; } // ------------------------------------------------------------------------- @@ -130,40 +97,13 @@ // ------------------------------------------------------------------------- public String execute() + throws Exception { - report = reportService.getReport( uid ); - - if ( ou != null ) - { - organisationUnit = organisationUnitService.getOrganisationUnit( ou ); - - if ( organisationUnit != null ) - { - organisationUnitHierarchy.add( organisationUnit ); - - OrganisationUnit parent = organisationUnit; - - while ( parent.getParent() != null ) - { - parent = parent.getParent(); - organisationUnitHierarchy.add( parent ); - } - - organisationUnitChildren.addAll( organisationUnit.getChildren() ); - } - } - - Date date = new Date(); - - if ( pe != null ) - { - date = PeriodType.getPeriodFromIsoString( pe ).getStartDate(); - } - - if ( report != null && report.hasRelativePeriods() ) - { - periods = report.getRelatives().getRelativePeriods( date, format, true ); - } + Writer writer = new StringWriter(); + + reportService.renderHtmlReport( writer, uid, pe, ou, format ); + + content = writer.toString(); return SUCCESS; } === modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/renderHtmlReport.vm' --- dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/renderHtmlReport.vm 2013-04-29 13:14:35 +0000 +++ dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/renderHtmlReport.vm 2013-08-12 13:07:42 +0000 @@ -1,57 +1,6 @@ - -
- +
-
-${report.designContent} -
\ No newline at end of file +${content} \ No newline at end of file