=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java 2012-03-07 12:10:37 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java 2012-03-12 12:33:20 +0000 @@ -28,7 +28,6 @@ */ import org.apache.commons.lang.StringEscapeUtils; -import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.hisp.dhis.common.BaseIdentifiableObject; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2012-03-05 16:37:17 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2012-03-12 12:33:20 +0000 @@ -68,6 +68,7 @@ final String KEY_SCHEDULED_TASKS = "keyScheduledTasks"; final String KEY_ORGUNITGROUPSET_AGG_LEVEL = "orgUnitGroupSetAggregationLevel"; final String KEY_SMS_CONFIG = "SMS_CONFIG"; + final String KEY_CACHE_STRATEGY = "keyCacheStrategy"; final int DEFAULT_MAX_NUMBER_OF_ATTEMPTS = 20; final int DEFAULT_TIMEFRAME_MINUTES = 1; === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultUserDetailsService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultUserDetailsService.java 2012-03-07 14:37:56 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultUserDetailsService.java 2012-03-12 12:33:20 +0000 @@ -36,7 +36,6 @@ import org.hisp.dhis.user.UserService; import org.springframework.dao.DataAccessException; import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.GrantedAuthorityImpl; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ChartController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ChartController.java 2012-03-10 10:01:52 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ChartController.java 2012-03-12 12:33:20 +0000 @@ -81,6 +81,9 @@ @Autowired private I18nManager i18nManager; + + @Autowired + private ContextUtils contextUtils; //------------------------------------------------------------------------------------------------------- // GET @@ -146,7 +149,7 @@ String filename = CodecUtils.filenameEncode( chart.getName() ) + ".png"; - ContextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PNG, CacheStrategy.NO_CACHE, filename, false ); + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PNG, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, false ); ChartUtilities.writeChartAsPNG( response.getOutputStream(), jFreeChart, width, height ); } @@ -174,7 +177,7 @@ chart = chartService.getJFreeOrganisationUnitChart( indicator, unit, !skipTitle, i18nManager.getI18nFormat() ); } - ContextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PNG, CacheStrategy.NO_CACHE, "chart.png", false ); + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PNG, CacheStrategy.RESPECT_SYSTEM_SETTING, "chart.png", false ); ChartUtilities.writeChartAsPNG( response.getOutputStream(), chart, width, height ); } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DocumentController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DocumentController.java 2012-03-10 10:01:52 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DocumentController.java 2012-03-12 12:33:20 +0000 @@ -72,6 +72,9 @@ @Autowired private LocationManager locationManager; + @Autowired + private ContextUtils contextUtils; + //------------------------------------------------------------------------------------------------------- // GET //------------------------------------------------------------------------------------------------------- @@ -140,7 +143,7 @@ boolean attachment = !( CONTENT_TYPE_PDF.equals( ct ) || CONTENT_TYPE_JPG.equals( ct ) || CONTENT_TYPE_PNG.equals( ct ) ); - ContextUtils.configureResponse( response, document.getContentType(), CacheStrategy.CACHE_TWO_WEEKS, document.getUrl(), attachment ); + contextUtils.configureResponse( response, document.getContentType(), CacheStrategy.CACHE_TWO_WEEKS, document.getUrl(), attachment ); InputStream in = locationManager.getInputStream( document.getUrl(), DocumentService.DIR ); === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/MapController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/MapController.java 2012-03-10 10:01:52 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/MapController.java 2012-03-12 12:33:20 +0000 @@ -77,6 +77,9 @@ @Autowired private MapGenerationService mapGenerationService; + @Autowired + private ContextUtils contextUtils; + //------------------------------------------------------------------------------------------------------- // GET //------------------------------------------------------------------------------------------------------- @@ -200,7 +203,7 @@ if ( image != null ) { - ContextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PNG, CacheStrategy.NO_CACHE, "mapview.png", false ); + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PNG, CacheStrategy.RESPECT_SYSTEM_SETTING, "mapview.png", false ); ImageIO.write( image, "PNG", response.getOutputStream() ); } === 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 2012-03-10 10:01:52 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportController.java 2012-03-12 12:33:20 +0000 @@ -75,6 +75,9 @@ @Autowired private I18nManager i18nManager; + @Autowired + private ContextUtils contextUtils; + // ------------------------------------------------------------------------------------------------------- // GET // ------------------------------------------------------------------------------------------------------- @@ -165,7 +168,7 @@ Date date = period != null ? DateUtils.getMediumDate( period ) : new Cal().now().subtract( Calendar.MONTH, 1 ).time(); String filename = CodecUtils.filenameEncode( report.getName() ) + "." + type; - ContextUtils.configureResponse( response, contentType, CacheStrategy.NO_CACHE, filename, attachment ); + contextUtils.configureResponse( response, contentType, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, attachment ); reportService.renderReport( response.getOutputStream(), uid, date, organisationUnitUid, type, i18nManager.getI18nFormat() ); === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportTableController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportTableController.java 2012-03-10 10:01:52 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ReportTableController.java 2012-03-12 12:33:20 +0000 @@ -83,6 +83,9 @@ @Autowired private I18nManager i18nManager; + @Autowired + private ContextUtils contextUtils; + //------------------------------------------------------------------------------------------------------- // GET //------------------------------------------------------------------------------------------------------- @@ -176,7 +179,7 @@ Grid grid = reportTableService.getReportTableGrid( uid, i18nManager.getI18nFormat(), date, organisationUnitUid ); String filename = filenameEncode( grid.getTitle() ) + ".pdf"; - ContextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PDF, CacheStrategy.NO_CACHE, filename, false ); + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_PDF, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, false ); GridUtils.toPdf( grid, response.getOutputStream() ); } @@ -199,7 +202,7 @@ Grid grid = reportTableService.getReportTableGrid( uid, i18nManager.getI18nFormat(), date, organisationUnitUid ); String filename = filenameEncode( grid.getTitle() ) + ".xls"; - ContextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_EXCEL, CacheStrategy.NO_CACHE, filename, true ); + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_EXCEL, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, true ); GridUtils.toXls( grid, response.getOutputStream() ); } @@ -222,7 +225,7 @@ Grid grid = reportTableService.getReportTableGrid( uid, i18nManager.getI18nFormat(), date, organisationUnitUid ); String filename = filenameEncode( grid.getTitle() ) + ".csv"; - ContextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_CSV, CacheStrategy.NO_CACHE, filename, true ); + contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_CSV, CacheStrategy.RESPECT_SYSTEM_SETTING, filename, true ); GridUtils.toCsv( grid, response.getOutputStream() ); } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/ContextUtils.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/ContextUtils.java 2012-03-10 10:01:52 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/ContextUtils.java 2012-03-12 12:33:20 +0000 @@ -33,11 +33,18 @@ import javax.servlet.http.HttpServletResponse; +import org.hisp.dhis.setting.SystemSettingManager; import org.hisp.dhis.system.util.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import static org.hisp.dhis.setting.SystemSettingManager.KEY_CACHE_STRATEGY; +import static org.apache.commons.lang.StringUtils.trimToNull; /** * @author Lars Helge Overland */ +@Component public class ContextUtils { public static final String CONTENT_TYPE_PDF = "application/pdf"; @@ -54,15 +61,22 @@ public static final String CONTENT_TYPE_JAVASCRIPT = "application/javascript"; public static final String HEADER_USER_AGENT = "User-Agent"; + public static final String HEADER_CACHE_CONTROL = "Cache-Control"; + public static final String HEADER_EXPIRES = "Expires"; + public static final String HEADER_CONTENT_DISPOSITION = "Content-Disposition"; + @Autowired + private SystemSettingManager systemSettingManager; + public enum CacheStrategy { NO_CACHE, + CACHE_6AM_TOMORROW, CACHE_TWO_WEEKS, RESPECT_SYSTEM_SETTING } - public static void configureResponse( HttpServletResponse response, String contentType, CacheStrategy cacheStrategy, + public void configureResponse( HttpServletResponse response, String contentType, CacheStrategy cacheStrategy, String filename, boolean attachment ) { if ( contentType != null ) @@ -70,6 +84,13 @@ response.setContentType( contentType ); } + if ( cacheStrategy.equals( CacheStrategy.RESPECT_SYSTEM_SETTING ) ) + { + String strategy = trimToNull( (String) systemSettingManager.getSystemSetting( KEY_CACHE_STRATEGY ) ); + + cacheStrategy = strategy != null ? CacheStrategy.valueOf( strategy ) : CacheStrategy.NO_CACHE; + } + if ( cacheStrategy == null || cacheStrategy.equals( CacheStrategy.NO_CACHE ) ) { // ----------------------------------------------------------------- @@ -77,23 +98,28 @@ // responses to disk over SSL, was "no-cache". // ----------------------------------------------------------------- - response.setHeader( "Cache-Control", "max-age=1" ); - response.setHeader( "Expires", DateUtils.getExpiredHttpDateString() ); + response.setHeader( HEADER_CACHE_CONTROL, "max-age=1" ); + response.setHeader( HEADER_EXPIRES, DateUtils.getExpiredHttpDateString() ); + } + else if ( cacheStrategy.equals( CacheStrategy.CACHE_6AM_TOMORROW ) ) + { + response.setHeader( HEADER_CACHE_CONTROL, "max-age=" + DateUtils.getSecondsUntilTomorrow( 6 ) ); + response.setHeader( HEADER_EXPIRES, DateUtils.getHttpDateString( DateUtils.getDateForTomorrow( 6 ) ) ); } else if ( cacheStrategy.equals( CacheStrategy.CACHE_TWO_WEEKS ) ) { Calendar cal = Calendar.getInstance(); cal.add( Calendar.DAY_OF_YEAR, 14 ); - response.setHeader( "Cache-Control", "max-age=1209600" ); - response.setHeader( "Expires", DateUtils.getHttpDateString( cal.getTime() ) ); + response.setHeader( HEADER_CACHE_CONTROL, "max-age=1209600" ); + response.setHeader( HEADER_EXPIRES, DateUtils.getHttpDateString( cal.getTime() ) ); } if ( filename != null ) { String type = attachment ? "attachment" : "inline"; - response.setHeader( "Content-Disposition", type + "; filename=\"" + filename + "\"" ); + response.setHeader( HEADER_CONTENT_DISPOSITION, type + "; filename=\"" + filename + "\"" ); } } === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/interceptor/SystemSettingInterceptor.java' --- dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/interceptor/SystemSettingInterceptor.java 2012-03-05 16:37:17 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/interceptor/SystemSettingInterceptor.java 2012-03-12 12:33:20 +0000 @@ -72,7 +72,8 @@ { Map map = new HashMap(); - map.put( KEY_SYSTEM_IDENTIFIER, systemSettingManager.getSystemIdentifier() ); + map.put( KEY_SYSTEM_IDENTIFIER, systemSettingManager.getSystemIdentifier() ); //TODO remove + map.put( KEY_CACHE_STRATEGY, systemSettingManager.getSystemSetting( KEY_CACHE_STRATEGY ) ); map.put( KEY_APPLICATION_TITLE, systemSettingManager.getSystemSetting( KEY_APPLICATION_TITLE ) ); map.put( KEY_FLAG, systemSettingManager.getSystemSetting( KEY_FLAG ) ); map.put( KEY_FLAG_IMAGE, systemSettingManager.getFlagImage() ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/java/org/hisp/dhis/settings/action/system/SetGeneralSettingsAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/java/org/hisp/dhis/settings/action/system/SetGeneralSettingsAction.java 2012-03-05 16:37:17 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/java/org/hisp/dhis/settings/action/system/SetGeneralSettingsAction.java 2012-03-12 12:33:20 +0000 @@ -31,6 +31,7 @@ import static org.hisp.dhis.setting.SystemSettingManager.KEY_DISABLE_DATAENTRYFORM_WHEN_COMPLETED; import static org.hisp.dhis.setting.SystemSettingManager.KEY_FACTOR_OF_DEVIATION; import static org.hisp.dhis.setting.SystemSettingManager.KEY_OMIT_INDICATORS_ZERO_NUMERATOR_DATAMART; +import static org.hisp.dhis.setting.SystemSettingManager.KEY_CACHE_STRATEGY; import org.hisp.dhis.configuration.Configuration; import org.hisp.dhis.configuration.ConfigurationService; @@ -93,6 +94,13 @@ // Output // ------------------------------------------------------------------------- + private String cacheStrategy; + + public void setCacheStrategy( String cacheStrategy ) + { + this.cacheStrategy = cacheStrategy; + } + private Integer infrastructuralDataElements; public void setInfrastructuralDataElements( Integer infrastructuralDataElements ) @@ -169,6 +177,7 @@ public String execute() { + systemSettingManager.saveSystemSetting( KEY_CACHE_STRATEGY, cacheStrategy ); systemSettingManager.saveSystemSetting( KEY_OMIT_INDICATORS_ZERO_NUMERATOR_DATAMART, omitIndicatorsZeroNumeratorDataMart ); systemSettingManager.saveSystemSetting( KEY_DISABLE_DATAENTRYFORM_WHEN_COMPLETED, disableDataEntryWhenCompleted ); systemSettingManager.saveSystemSetting( KEY_FACTOR_OF_DEVIATION, factorDeviation ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/resources/org/hisp/dhis/settings/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/resources/org/hisp/dhis/settings/i18n_module.properties 2012-03-04 13:26:24 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/resources/org/hisp/dhis/settings/i18n_module.properties 2012-03-12 12:33:20 +0000 @@ -96,4 +96,8 @@ completeness_recipients=Completeness notification recipients no_completeness_recipients=No completeness recipients use_db_locale_no_translation=Use database locale / no translation -system_overview=System overview \ No newline at end of file +system_overview=System overview +cache_strategy=Cache strategy +no_cache=No cache +cache_until_6am_tomorrow=Cache until 6 AM tomorrow +cache_for_two_weeks=Cache for two weeks \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/webapp/dhis-web-maintenance-settings/systemGeneralSettings.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/webapp/dhis-web-maintenance-settings/systemGeneralSettings.vm 2012-03-05 16:37:17 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/webapp/dhis-web-maintenance-settings/systemGeneralSettings.vm 2012-03-12 12:33:20 +0000 @@ -2,6 +2,7 @@ jQuery(document).ready(function() { jQuery("input[type=button]").click(function() { jQuery.postUTF8( 'setSystemGeneralSettings.action', { + cacheStrategy: getFieldValue( 'cacheStrategy' ), infrastructuralDataElements: getFieldValue( 'infrastructuralDataElements' ), infrastructuralPeriodType: getFieldValue( 'infrastructuralPeriodType' ), feedbackRecipients: getFieldValue( 'feedbackRecipients' ), @@ -20,6 +21,17 @@

$i18n.getString( "general_settings" )

+ +

$i18n.getString( "cache_strategy" )

+ +

+ +

+

$i18n.getString( "infrastructural_data_elements" )