← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 18206: Validation, impl basic support for validation rule analysis in Web API

 

------------------------------------------------------------
revno: 18206
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
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";        
+    }
+}