------------------------------------------------------------ revno: 18206 committer: Lars Helge Overland <larshe...@gmail.com> branch nick: dhis2 timestamp: Mon 2015-02-09 17:30:46 +0100 message: Validation, impl basic support for validation rule analysis in Web API added: dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationSummary.java dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/validation/ValidationController.java modified: dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationResult.java
-- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationResult.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationResult.java 2015-02-09 14:52:38 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationResult.java 2015-02-09 16:30:46 +0000 @@ -28,15 +28,23 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.io.Serializable; + +import org.hisp.dhis.common.BaseIdentifiableObject; +import org.hisp.dhis.common.DxfNamespaces; import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.period.Period; -import java.io.Serializable; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; /** * @author Margrethe Store */ +@JacksonXmlRootElement( localName = "validationResult", namespace = DxfNamespaces.DXF_2_0 ) public class ValidationResult implements Serializable, Comparable<ValidationResult> { @@ -303,6 +311,9 @@ // Set and get methods // ------------------------------------------------------------------------- + @JsonProperty + @JsonSerialize( as = BaseIdentifiableObject.class ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public OrganisationUnit getOrgUnit() { return orgUnit; @@ -313,6 +324,9 @@ this.orgUnit = orgUnit; } + @JsonProperty + @JsonSerialize( as = BaseIdentifiableObject.class ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Period getPeriod() { return period; @@ -323,6 +337,9 @@ this.period = period; } + @JsonProperty + @JsonSerialize( as = BaseIdentifiableObject.class ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public DataElementCategoryOptionCombo getAttributeOptionCombo() { return attributeOptionCombo; @@ -333,6 +350,9 @@ this.attributeOptionCombo = attributeOptionCombo; } + @JsonProperty + @JsonSerialize( as = BaseIdentifiableObject.class ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public ValidationRule getValidationRule() { return validationRule; @@ -343,6 +363,8 @@ this.validationRule = validationRule; } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Double getLeftsideValue() { return leftsideValue; @@ -353,6 +375,8 @@ this.leftsideValue = leftsideValue; } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Double getRightsideValue() { return rightsideValue; === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationSummary.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationSummary.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationSummary.java 2015-02-09 16:30:46 +0000 @@ -0,0 +1,81 @@ +package org.hisp.dhis.validation; + +/* + * Copyright (c) 2004-2015, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.util.ArrayList; +import java.util.List; + +import org.hisp.dhis.common.DxfNamespaces; +import org.hisp.dhis.dataelement.DataElementOperand; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + +/** + * @author Lars Helge Overland + */ +@JacksonXmlRootElement( localName = "validationSummary", namespace = DxfNamespaces.DXF_2_0 ) +public class ValidationSummary +{ + private List<ValidationResult> validationRuleViolations = new ArrayList<>(); + + private List<DataElementOperand> outlierViolations = new ArrayList<>(); + + public ValidationSummary() + { + } + + @JsonProperty + @JacksonXmlElementWrapper( localName = "validationRuleViolations", namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlProperty( localName = "validationRuleViolation", namespace = DxfNamespaces.DXF_2_0 ) + public List<ValidationResult> getValidationRuleViolations() + { + return validationRuleViolations; + } + + public void setValidationRuleViolations( List<ValidationResult> validationRuleViolations ) + { + this.validationRuleViolations = validationRuleViolations; + } + + @JsonProperty + @JacksonXmlElementWrapper( localName = "outlierViolations", namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlProperty( localName = "outlierViolation", namespace = DxfNamespaces.DXF_2_0 ) + public List<DataElementOperand> getOutlierViolations() + { + return outlierViolations; + } + + public void setOutlierViolations( List<DataElementOperand> outlierViolations ) + { + this.outlierViolations = outlierViolations; + } +} === added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/validation/ValidationController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/validation/ValidationController.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/validation/ValidationController.java 2015-02-09 16:30:46 +0000 @@ -0,0 +1,121 @@ +package org.hisp.dhis.webapi.controller.validation; + +/* + * Copyright (c) 2004-2015, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.util.ArrayList; + +import javax.servlet.http.HttpServletResponse; + +import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; +import org.hisp.dhis.dataelement.DataElementCategoryService; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.dataset.DataSetService; +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.validation.ValidationResult; +import org.hisp.dhis.validation.ValidationRuleService; +import org.hisp.dhis.validation.ValidationSummary; +import org.hisp.dhis.webapi.utils.ContextUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author Lars Helge Overland + */ +@Controller +@RequestMapping( value = "/validation" ) +public class ValidationController +{ + @Autowired + private ValidationRuleService validationRuleService; + + @Autowired + private DataSetService dataSetService; + + @Autowired + private PeriodService periodService; + + @Autowired + private OrganisationUnitService organisationUnitService; + + @Autowired + private DataElementCategoryService categoryService; + + @RequestMapping( value = "/dataSet/{ds}", method = RequestMethod.GET ) + public String validate( @PathVariable String ds, @RequestParam String pe, + @RequestParam String ou, @RequestParam( required = false ) String aoc, + HttpServletResponse response, Model model ) + { + DataSet dataSet = dataSetService.getDataSet( ds ); + + if ( dataSet == null ) + { + ContextUtils.conflictResponse( response, "Data set does not exist: " + ds ); + return null; + } + + Period period = PeriodType.getPeriodFromIsoString( pe ); + + if ( period == null ) + { + ContextUtils.conflictResponse( response, "Period does not exist: " + pe ); + return null; + } + + OrganisationUnit orgUnit = organisationUnitService.getOrganisationUnit( ou ); + + if ( orgUnit == null ) + { + ContextUtils.conflictResponse( response, "Organisation unit does not exist: " + pe ); + return null; + } + + DataElementCategoryOptionCombo attributeOptionCombo = categoryService.getDataElementCategoryOptionCombo( aoc ); + + if ( attributeOptionCombo == null ) + { + attributeOptionCombo = categoryService.getDefaultDataElementCategoryOptionCombo(); + } + + ValidationSummary summary = new ValidationSummary(); + + summary.setValidationRuleViolations( new ArrayList<ValidationResult>( validationRuleService.validate( dataSet, period, orgUnit, attributeOptionCombo ) ) ); + + model.addAttribute( "model", summary ); + return "summary"; + } +}
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp