=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/ContextUtils.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/ContextUtils.java 2014-10-28 10:29:40 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/ContextUtils.java 2014-11-17 22:18:59 +0000 @@ -354,7 +354,7 @@ * the "If-None-Match" header value, generates an ETag based on the given * collection of IdentifiableObjects and compares them for equality. If this * evaluates to true, it will set status code 304 Not Modified on the response - * and remove all elements from the given list. It will also set the ETag header + * and remove all elements from the given list. It will set the ETag header * on the response in any case. * * @param request the HttpServletRequest. @@ -380,4 +380,34 @@ return false; } + + /** + * This method looks up the ETag sent in the request from the "If-None-Match" + * header value and compares it to the given tag. If they match, it will set + * status code 304 Not Modified on the response. It will set the ETag header + * on the response in any case. It will wrap the given tag in quotes. + * + * @param request the HttpServletRequest. + * @param response the HttpServletResponse. + * @param tag the tag to compare. + * @return true if the given tag match the request tag and the response is + * considered not modified, false if not. + */ + public static boolean isNotModified( HttpServletRequest request, HttpServletResponse response, String tag ) + { + tag = tag != null ? ( QUOTE + tag + QUOTE ) : null; + + String inputTag = request.getHeader( HEADER_IF_NONE_MATCH ); + + response.setHeader( HEADER_ETAG, tag ); + + if ( inputTag != null && inputTag.equals( tag ) ) + { + response.setStatus( HttpServletResponse.SC_NOT_MODIFIED ); + + return true; + } + + return false; + } } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetDataSetAssociationsAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetDataSetAssociationsAction.java 2014-11-17 17:38:08 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetDataSetAssociationsAction.java 2014-11-17 22:18:59 +0000 @@ -28,14 +28,23 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.struts2.ServletActionContext; +import org.hisp.dhis.common.IdentifiableObjectManager; import org.hisp.dhis.configuration.ConfigurationService; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitDataSetAssociationSet; import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.system.util.DateUtils; +import org.hisp.dhis.webapi.utils.ContextUtils; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.Action; @@ -51,19 +60,22 @@ @Autowired private ConfigurationService configurationService; + + @Autowired + private IdentifiableObjectManager identifiableObjectManager; // ------------------------------------------------------------------------- // Output // ------------------------------------------------------------------------- - private List> dataSetAssociationSets; + private List> dataSetAssociationSets = new ArrayList<>(); public List> getDataSetAssociationSets() { return dataSetAssociationSets; } - private Map organisationUnitAssociationSetMap; + private Map organisationUnitAssociationSetMap = new HashMap<>(); public Map getOrganisationUnitAssociationSetMap() { @@ -77,6 +89,15 @@ @Override public String execute() { + Date lastUpdated = DateUtils.max( identifiableObjectManager.getLastUpdated( DataSet.class ), + identifiableObjectManager.getLastUpdated( OrganisationUnit.class ) ); + String tag = lastUpdated != null ? DateUtils.LONG_DATE_FORMAT.format( lastUpdated ) : null; + + if ( ContextUtils.isNotModified( ServletActionContext.getRequest(), ServletActionContext.getResponse(), tag ) ) + { + return SUCCESS; + } + OrganisationUnitLevel offlineOrgUnitLevel = configurationService.getConfiguration().getOfflineOrganisationUnitLevel(); Integer level = offlineOrgUnitLevel != null ? offlineOrgUnitLevel.getLevel() : null; === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js 2014-11-17 21:59:40 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js 2014-11-17 22:18:59 +0000 @@ -162,8 +162,10 @@ */ $( document ).ready( function() { + /** + * Cache false necessary to prevent IE from caching by default. + */ $.ajaxSetup( { - type: 'POST', cache: false } ); @@ -291,6 +293,7 @@ $.ajax( { url: 'getDataSetAssociations.action', dataType: 'json', + cache: true, success: function( json ) { sessionStorage[dhis2.de.cst.dataSetAssociations] = JSON.stringify( json.dataSetAssociations );