=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationViolation.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationViolation.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationViolation.java 2016-02-11 08:11:40 +0000 @@ -32,6 +32,7 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.google.common.base.MoreObjects; import org.hisp.dhis.common.DxfNamespaces; /** @@ -98,13 +99,13 @@ this.value = value; } - @Override public String toString() + @Override + public String toString() { - final StringBuilder sb = new StringBuilder( "ValidationViolation{" ); - sb.append( "property='" ).append( property ).append( '\'' ); - sb.append( ", message='" ).append( message ).append( '\'' ); - sb.append( ", value=" ).append( value ); - sb.append( '}' ); - return sb.toString(); + return MoreObjects.toStringHelper( this ) + .add( "property", property ) + .add( "message", message ) + .add( "value", value ) + .toString(); } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java 2016-02-11 07:16:09 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java 2016-02-11 08:11:40 +0000 @@ -33,12 +33,12 @@ import org.hisp.dhis.preheat.PreheatMode; import org.hisp.dhis.preheat.PreheatParams; import org.hisp.dhis.preheat.PreheatService; -import org.hisp.dhis.schema.Schema; import org.hisp.dhis.schema.SchemaService; import org.hisp.dhis.validation.ValidationViolation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; /** @@ -84,10 +84,19 @@ objectBundleValidation.addInvalidReferences( klass, preheatService.checkReferences( bundle.getObjects().get( klass ), bundle.getPreheat(), bundle.getPreheatIdentifier() ) ); + List> validationViolations = new ArrayList<>(); + for ( IdentifiableObject object : bundle.getObjects().get( klass ) ) { - List validationViolations = schemaValidator.validate( object ); + List validate = schemaValidator.validate( object ); + + if ( !validate.isEmpty() ) + { + validationViolations.add( validate ); + } } + + objectBundleValidation.addValidationViolation( klass, validationViolations ); } return objectBundleValidation; === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleValidation.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleValidation.java 2016-02-11 05:40:52 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleValidation.java 2016-02-11 08:11:40 +0000 @@ -31,6 +31,7 @@ import com.google.common.base.MoreObjects; import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.preheat.PreheatValidation; +import org.hisp.dhis.validation.ValidationViolation; import java.util.HashMap; import java.util.List; @@ -43,6 +44,8 @@ { private Map, List> preheatValidations = new HashMap<>(); + private Map, List>> validationViolations = new HashMap<>(); + public ObjectBundleValidation() { } @@ -57,6 +60,16 @@ return preheatValidations; } + public void addValidationViolation( Class klass, List> validationViolations ) + { + this.validationViolations.put( klass, validationViolations ); + } + + public Map, List>> getValidationViolations() + { + return validationViolations; + } + @Override public String toString() { === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java 2016-02-11 06:53:05 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java 2016-02-11 08:11:40 +0000 @@ -208,6 +208,23 @@ } } + @Test + public void testPreheatValidationsInvalidObjects() throws IOException + { + Map, List> metadata = renderService.fromMetadata( + new ClassPathResource( "dxf2/de_validate2.json" ).getInputStream(), RenderFormat.JSON ); + + ObjectBundleParams params = new ObjectBundleParams(); + params.setObjectBundleMode( ObjectBundleMode.VALIDATE ); + params.setObjects( metadata ); + + ObjectBundle bundle = objectBundleService.create( params ); + ObjectBundleValidation validate = objectBundleService.validate( bundle ); + + assertFalse( validate.getValidationViolations().isEmpty() ); + assertEquals( 2, validate.getValidationViolations().get( DataElement.class ).size() ); + } + private void defaultSetup() { DataElement de1 = createDataElement( 'A' ); === added file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/de_validate2.json' --- dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/de_validate2.json 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/de_validate2.json 2016-02-11 08:11:40 +0000 @@ -0,0 +1,79 @@ +{ + "dataElements": [ + { + "lastUpdated": "2016-01-15T15:44:11.475+0000", + "aggregationLevels": [], + "name": "Birth certificate", + "created": "2016-01-15T11:13:32.416+0000", + "shortName": "Birth certificate", + "aggregationType": "SUM", + "id": "uf3svrmp8Oj", + "userGroupAccesses": [], + "publicAccess": "rw------", + "user": { + "id": "GOLswS44mh8" + }, + "zeroIsSignificant": false, + "categoryCombo": { + "id": "p0KPaWEg3cf" + }, + "attributeValues": [] + }, + { + "aggregationType": "SUM", + "publicAccess": "rw------", + "userGroupAccesses": [], + "id": "ulD2zW0TIy2", + "attributeValues": [], + "categoryCombo": { + "id": "p0KPaWEg3cf" + }, + "user": { + "id": "GOLswS44mh8" + }, + "zeroIsSignificant": false, + "name": "Documentation", + "lastUpdated": "2016-01-15T15:44:11.475+0000", + "aggregationLevels": [], + "created": "2016-01-15T11:13:00.541+0000", + "shortName": "Documentation", + "domainType": "TRACKER" + }, + { + "id": "cNkTt6mJQyO", + "userGroupAccesses": [], + "user": { + "id": "GOLswS44mh8" + }, + "description": "Yebo", + "zeroIsSignificant": false, + "attributeValues": [ + { + "lastUpdated": "2016-01-12T04:53:21.853+0000", + "attribute": { + "id": "Z4X3J7jMLYV" + }, + "created": "2016-01-12T04:53:21.454+0000", + "value": "ACTIVITY" + } + ], + "shortName": "Yebo", + "lastUpdated": "2016-01-12T04:53:21.840+0000", + "created": "2016-01-12T04:53:21.826+0000", + "optionSet": { + "id": "pQYCiuosBnZ" + }, + "valueType": "NUMBER", + "publicAccess": "rw------", + "formName": "Yebo", + "categoryCombo": { + "id": "p0KPaWEg3cf" + }, + "code": "Yebo", + "aggregationType": "SUM", + "domainType": "TRACKER", + "aggregationLevels": [], + "name": "Yebo" + } + ] +}