=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java 2016-02-15 04:57:22 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java 2016-03-03 01:20:51 +0000 @@ -30,7 +30,7 @@ import org.hisp.dhis.attribute.exception.NonUniqueAttributeValueException; import org.hisp.dhis.common.IdentifiableObject; -import org.hisp.dhis.schema.validation.ValidationViolation; +import org.hisp.dhis.feedback.ErrorReport; import java.util.List; import java.util.Set; @@ -183,7 +183,7 @@ */ int getAttributeValueCount(); - List validateAttributeValues( T object, Set attributeValues ); + List validateAttributeValues( T object, Set attributeValues ); void updateAttributeValues( T object, List jsonAttributeValues ) throws Exception; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/feedback/ErrorCode.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/feedback/ErrorCode.java 2016-03-01 07:51:42 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/feedback/ErrorCode.java 2016-03-03 01:20:51 +0000 @@ -29,13 +29,29 @@ */ /** + * E4000 - E4999: Metadata Validation Errors * E5000 - E5999: Preheat Errors - * E6000 - E6999: DXF2 Import Errors + * E6000 - E6999: Metadata Import Errors * * @author Morten Olav Hansen */ public enum ErrorCode { + /* Metadata Validation Errors */ + E4000( "Missing required property \"{0}\"." ), + E4001( "Maximum length of property \"{0}\"is {1}, but given length was {2}." ), + E4002( "Allowed length range for property \"{0}\" is [{1},{2}], but given length was {3}." ), + E4003( "Property \"{0}\" requires a valid email address, was given \"{1}\"." ), + E4004( "Property \"{0}\" requires a valid URL, was given \"{1}\"." ), + E4005( "Property \"{0}\" requires a valid password, was given \"{1}\"." ), + E4006( "Property \"{0}\" requires a valid HEX color, was given \"{1}\"." ), + E4007( "Allowed size range for collection property \"{0}\" is [{1},{2}], but size given was {3}." ), + E4008( "Allowed range for numeric property \"{0}\" is [{1},{2}], but number given was {3}." ), + E4009( "Attribute \"{0}\" is unique, and value \"{1}\" already exist." ), + E4010( "Attribute \"{0}\" is not supported for type \"{1}\"." ), + E4011( "Attribute \"{0}\" is required, but not value was found." ), + + /* Preheat Errors */ E5000( "No matching object for given reference. Identifier was {0}, and object was {1}." ), E5001( "Invalid reference {0} on object {1} for association \"{2}\"." ); === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/feedback/ErrorReport.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/feedback/ErrorReport.java 2016-03-01 07:51:42 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/feedback/ErrorReport.java 2016-03-03 01:20:51 +0000 @@ -28,11 +28,16 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import com.fasterxml.jackson.annotation.JsonProperty; +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; /** * @author Morten Olav Hansen */ +@JacksonXmlRootElement( localName = "errorReport", namespace = DxfNamespaces.DXF_2_0 ) public class ErrorReport { protected final ErrorMessage message; @@ -55,21 +60,29 @@ this.message = message; } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public ErrorCode getErrorCode() { return message.getErrorCode(); } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getMessage() { return message.getMessage(); } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Class getMainKlass() { return mainKlass; } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Class getErrorKlass() { return errorKlass; @@ -81,6 +94,8 @@ return this; } + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Object getValue() { return value; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/validation/SchemaValidator.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/validation/SchemaValidator.java 2016-02-15 04:57:22 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/validation/SchemaValidator.java 2016-03-03 01:20:51 +0000 @@ -28,6 +28,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.feedback.ErrorReport; + import java.util.List; /** @@ -42,7 +44,7 @@ * @param persisted Only include persisted properties * @return WebMessage containing validation response */ - List validate( Object object, boolean persisted ); + List validate( Object object, boolean persisted ); /** * Validate object against its schema, the object is required to be non-null and have a schema associated with it. @@ -52,5 +54,5 @@ * @param object Object to validate * @return WebMessage containing validation response */ - List validate( Object object ); + List validate( Object object ); } === removed file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/validation/ValidationViolation.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/validation/ValidationViolation.java 2016-02-15 04:57:22 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/validation/ValidationViolation.java 1970-01-01 00:00:00 +0000 @@ -1,111 +0,0 @@ -package org.hisp.dhis.schema.validation; - -/* - * Copyright (c) 2004-2016, 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 com.fasterxml.jackson.annotation.JsonProperty; -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; - -/** - * @author Morten Olav Hansen - */ -@JsonPropertyOrder( { - "message" -} ) -@JacksonXmlRootElement( localName = "validationViolation", namespace = DxfNamespaces.DXF_2_0 ) -public class ValidationViolation -{ - private String property; - - private String message; - - private Object value; - - public ValidationViolation( String property, String message ) - { - this.property = property; - this.message = message; - } - - public ValidationViolation( String property, String message, Object value ) - { - this.property = property; - this.message = message; - this.value = value; - } - - @JsonProperty - @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) - public String getProperty() - { - return property; - } - - public void setProperty( String property ) - { - this.property = property; - } - - @JsonProperty - @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) - public String getMessage() - { - return message; - } - - public void setMessage( String message ) - { - this.message = message; - } - - @JsonProperty - @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) - public Object getValue() - { - return value; - } - - public void setValue( Object value ) - { - this.value = value; - } - - @Override - public String toString() - { - return MoreObjects.toStringHelper( this ) - .add( "property", property ) - .add( "message", message ) - .add( "value", value ) - .toString(); - } -} === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java 2016-02-29 07:35:27 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java 2016-03-03 01:20:51 +0000 @@ -33,8 +33,9 @@ import org.hisp.dhis.attribute.exception.NonUniqueAttributeValueException; import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.IdentifiableObjectManager; +import org.hisp.dhis.feedback.ErrorCode; +import org.hisp.dhis.feedback.ErrorReport; import org.hisp.dhis.i18n.I18nService; -import org.hisp.dhis.schema.validation.ValidationViolation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; @@ -273,13 +274,13 @@ } @Override - public List validateAttributeValues( T object, Set attributeValues ) + public List validateAttributeValues( T object, Set attributeValues ) { - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); if ( attributeValues.isEmpty() ) { - return validationViolations; + return errorReports; } Map attributeValueMap = attributeValues.stream() @@ -300,9 +301,7 @@ { if ( !manager.isAttributeValueUnique( object.getClass(), object, attributeValue.getAttribute(), av.getValue() ) ) { - validationViolations.add( new ValidationViolation( attributeValue.getAttribute().getUid(), - "Value '" + av.getValue() + "' already exists for attribute '" - + attributeValue.getAttribute().getDisplayName() + "' (" + attributeValue.getAttribute().getUid() + ")" ) ); + errorReports.add( new ErrorReport( Attribute.class, ErrorCode.E4009, attributeValue.getAttribute().getUid(), av.getValue() ) ); } } @@ -317,9 +316,7 @@ if ( !attributeValue.getAttribute().getSupportedClasses().contains( object.getClass() ) ) { - validationViolations.add( new ValidationViolation( attributeValue.getAttribute().getUid(), - "Attribute '" + attributeValue.getAttribute().getDisplayName() + "' (" + attributeValue.getAttribute().getUid() + ") is not supported for type " - + object.getClass().getSimpleName() ) ); + errorReports.add( new ErrorReport( Attribute.class, ErrorCode.E4010, attributeValue.getAttribute().getUid(), object.getClass().getSimpleName() ) ); } else { @@ -327,11 +324,9 @@ } } - mandatoryAttributes.stream() - .forEach( att -> validationViolations.add( - new ValidationViolation( att.getUid(), "Missing mandatory attribute '" + att.getDisplayName() + "' (" + att.getUid() + ")" ) ) ); + mandatoryAttributes.stream().forEach( att -> errorReports.add( new ErrorReport( Attribute.class, ErrorCode.E4011, att.getUid() ) ) ); - return validationViolations; + return errorReports; } @Override === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/validation/DefaultSchemaValidator.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/validation/DefaultSchemaValidator.java 2016-02-15 04:57:22 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/validation/DefaultSchemaValidator.java 2016-03-03 01:20:51 +0000 @@ -29,6 +29,8 @@ */ import org.apache.commons.validator.GenericValidator; +import org.hisp.dhis.feedback.ErrorCode; +import org.hisp.dhis.feedback.ErrorReport; import org.hisp.dhis.schema.Property; import org.hisp.dhis.schema.PropertyType; import org.hisp.dhis.schema.Schema; @@ -51,13 +53,13 @@ private SchemaService schemaService; @Override - public List validate( Object object ) + public List validate( Object object ) { return validate( object, true ); } @Override - public List validate( Object object, boolean persisted ) + public List validate( Object object, boolean persisted ) { if ( object == null || schemaService.getSchema( object.getClass() ) == null ) { @@ -66,7 +68,7 @@ Schema schema = schemaService.getSchema( object.getClass() ); - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); for ( Property property : schema.getProperties() ) { @@ -81,30 +83,30 @@ { if ( property.isRequired() ) { - validationViolations.add( new ValidationViolation( property.getName(), "Required property missing." ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4000, property.getName() ).setErrorKlass( property.getKlass() ) ); } continue; } - validationViolations.addAll( validateString( value, property ) ); - validationViolations.addAll( validateCollection( value, property ) ); - validationViolations.addAll( validateInteger( value, property ) ); - validationViolations.addAll( validateFloat( value, property ) ); - validationViolations.addAll( validateDouble( value, property ) ); + errorReports.addAll( validateString( value, property ) ); + errorReports.addAll( validateCollection( value, property ) ); + errorReports.addAll( validateInteger( value, property ) ); + errorReports.addAll( validateFloat( value, property ) ); + errorReports.addAll( validateDouble( value, property ) ); } - return validationViolations; + return errorReports; } - private Collection validateString( Object object, Property property ) + private List validateString( Object object, Property property ) { - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); // TODO How should empty strings be handled? they are not valid color, password, url, etc of course. if ( !String.class.isInstance( object ) || StringUtils.isEmpty( object ) ) { - return validationViolations; + return errorReports; } String value = (String) object; @@ -112,33 +114,36 @@ // check column max length if ( value.length() > property.getLength() ) { - validationViolations.add( new ValidationViolation( property.getName(), "Maximum length for property is " - + property.getLength() + ", length is " + value.length(), value ) ); - - return validationViolations; + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4001, property.getName(), property.getLength(), value.length() ) + .setErrorKlass( property.getKlass() ) ); + return errorReports; } if ( value.length() < property.getMin() || value.length() > property.getMax() ) { - validationViolations.add( new ValidationViolation( property.getName(), "Allowed range for length [" - + property.getMin() + ", " + property.getMax() + "], length is " + value.length(), value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4002, property.getName(), property.getMin(), property.getMax(), value.length() ) + .setErrorKlass( property.getKlass() ) ); } if ( PropertyType.EMAIL == property.getPropertyType() && !GenericValidator.isEmail( value ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Not a valid email.", value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4003, property.getName(), value ) + .setErrorKlass( property.getKlass() ) ); } else if ( PropertyType.URL == property.getPropertyType() && !isUrl( value ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Not a valid URL.", value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4004, property.getName(), value ) + .setErrorKlass( property.getKlass() ) ); } else if ( PropertyType.PASSWORD == property.getPropertyType() && !ValidationUtils.passwordIsValid( value ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Not a valid password.", value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4005, property.getName(), value ) + .setErrorKlass( property.getKlass() ) ); } else if ( PropertyType.COLOR == property.getPropertyType() && !ValidationUtils.isValidHexColor( value ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Not a valid hex color.", value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4006, property.getName(), value ) + .setErrorKlass( property.getKlass() ) ); } /* TODO add proper validation for both Points and Polygons, ValidationUtils only supports points at this time @@ -148,7 +153,7 @@ } */ - return validationViolations; + return errorReports; } // Commons validator have some issues in latest version, replacing with a very simple test for now @@ -157,83 +162,83 @@ return !StringUtils.isEmpty( url ) && (url.startsWith( "http://" ) || url.startsWith( "https://" )); } - private Collection validateCollection( Object object, Property property ) + private List validateCollection( Object object, Property property ) { - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); if ( !Collection.class.isInstance( object ) ) { - return validationViolations; + return errorReports; } Collection value = (Collection) object; if ( value.size() < property.getMin() || value.size() > property.getMax() ) { - validationViolations.add( new ValidationViolation( property.getName(), "Invalid range for size [" - + property.getMin() + ", " + property.getMax() + "], size is " + value.size(), value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4007, property.getName(), property.getMin(), property.getMax(), value.size() ) + .setErrorKlass( property.getKlass() ) ); } - return validationViolations; + return errorReports; } - private Collection validateInteger( Object object, Property property ) + private List validateInteger( Object object, Property property ) { - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); if ( !Integer.class.isInstance( object ) ) { - return validationViolations; + return errorReports; } Integer value = (Integer) object; if ( !GenericValidator.isInRange( value, property.getMin(), property.getMax() ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Invalid range for value [" - + property.getMin() + ", " + property.getMax() + "], value is " + value, value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4008, property.getName(), property.getMin(), property.getMax(), value ) + .setErrorKlass( property.getKlass() ) ); } - return validationViolations; + return errorReports; } - private Collection validateFloat( Object object, Property property ) + private List validateFloat( Object object, Property property ) { - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); if ( !Float.class.isInstance( object ) ) { - return validationViolations; + return errorReports; } Float value = (Float) object; if ( !GenericValidator.isInRange( value, property.getMin(), property.getMax() ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Invalid range for value [" - + property.getMin() + ", " + property.getMax() + "], value is " + value, value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4008, property.getName(), property.getMin(), property.getMax(), value ) + .setErrorKlass( property.getKlass() ) ); } - return validationViolations; + return errorReports; } - private Collection validateDouble( Object object, Property property ) + private List validateDouble( Object object, Property property ) { - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); if ( !Double.class.isInstance( object ) ) { - return validationViolations; + return errorReports; } Double value = (Double) object; if ( !GenericValidator.isInRange( value, property.getMin(), property.getMax() ) ) { - validationViolations.add( new ValidationViolation( property.getName(), "Invalid range for value [" - + property.getMin() + ", " + property.getMax() + "], value is " + value, value ) ); + errorReports.add( new ErrorReport( object.getClass(), ErrorCode.E4008, property.getName(), property.getMin(), property.getMax(), value ) + .setErrorKlass( property.getKlass() ) ); } - return validationViolations; + return errorReports; } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java 2016-03-01 10:39:19 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java 2016-03-03 01:20:51 +0000 @@ -61,6 +61,8 @@ import org.hisp.dhis.eventreport.EventReport; import org.hisp.dhis.expression.Expression; import org.hisp.dhis.expression.ExpressionService; +import org.hisp.dhis.feedback.ErrorCode; +import org.hisp.dhis.feedback.ErrorReport; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; import org.hisp.dhis.period.PeriodType; @@ -70,7 +72,6 @@ import org.hisp.dhis.schema.Schema; import org.hisp.dhis.schema.SchemaService; import org.hisp.dhis.schema.validation.SchemaValidator; -import org.hisp.dhis.schema.validation.ValidationViolation; import org.hisp.dhis.security.acl.AclService; import org.hisp.dhis.system.util.ReflectionUtils; import org.hisp.dhis.trackedentity.TrackedEntity; @@ -283,12 +284,12 @@ return false; } - List validationViolations = schemaValidator.validate( object ); + List errorReports = schemaValidator.validate( object ); - if ( !validationViolations.isEmpty() ) + if ( !errorReports.isEmpty() ) { summaryType.getImportConflicts().add( - new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + validationViolations ) ); + new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + errorReports ) ); return false; } @@ -302,12 +303,12 @@ } NonIdentifiableObjects nonIdentifiableObjects = new NonIdentifiableObjects( user ); - validationViolations = nonIdentifiableObjects.validate( object, object ); + errorReports = nonIdentifiableObjects.validate( object, object ); - if ( !validationViolations.isEmpty() ) + if ( !errorReports.isEmpty() ) { summaryType.getImportConflicts().add( - new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + validationViolations ) ); + new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + errorReports ) ); return false; } @@ -408,23 +409,23 @@ return true; } - List validationViolations = schemaValidator.validate( object ); + List errorReports = schemaValidator.validate( object ); - if ( !validationViolations.isEmpty() ) + if ( !errorReports.isEmpty() ) { summaryType.getImportConflicts().add( - new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + validationViolations ) ); + new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + errorReports ) ); return false; } NonIdentifiableObjects nonIdentifiableObjects = new NonIdentifiableObjects( user ); - validationViolations = nonIdentifiableObjects.validate( persistedObject, object ); + errorReports = nonIdentifiableObjects.validate( persistedObject, object ); - if ( !validationViolations.isEmpty() ) + if ( !errorReports.isEmpty() ) { summaryType.getImportConflicts().add( - new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + validationViolations ) ); + new ImportConflict( IdentifiableObjectUtils.getDisplayName( object ), "Validation Violations: " + errorReports ) ); return false; } @@ -966,10 +967,10 @@ this.user = user; } - public List validate( T persistedObject, T object ) + public List validate( T persistedObject, T object ) { schema = schemaService.getDynamicSchema( object.getClass() ); - List validationViolations = new ArrayList<>(); + List errorReports = new ArrayList<>(); if ( schema.havePersistedProperty( "attributeValues" ) ) { @@ -979,17 +980,17 @@ if ( attribute == null ) { - validationViolations.add( new ValidationViolation( attributeValue.getAttribute().getUid(), - "Unknown reference to " + attributeValue.getAttribute() + " on object " + attributeValue ) ); + errorReports.add( new ErrorReport( Attribute.class, ErrorCode.E5001, attributeValue.getAttribute().getUid(), + object.getUid(), "attributeValues" ) ); } attributeValue.setAttribute( attribute ); } - validationViolations.addAll( attributeService.validateAttributeValues( persistedObject, object.getAttributeValues() ) ); + errorReports.addAll( attributeService.validateAttributeValues( persistedObject, object.getAttributeValues() ) ); } - return validationViolations; + return errorReports; } public void extract( T object ) === 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-03-02 07:56:41 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java 2016-03-03 01:20:51 +0000 @@ -38,6 +38,7 @@ import org.hisp.dhis.common.IdentifiableObjectUtils; import org.hisp.dhis.dxf2.metadata2.objectbundle.hooks.ObjectBundleHook; import org.hisp.dhis.feedback.ErrorCode; +import org.hisp.dhis.feedback.ErrorReport; import org.hisp.dhis.preheat.Preheat; import org.hisp.dhis.preheat.PreheatErrorReport; import org.hisp.dhis.preheat.PreheatIdentifier; @@ -46,7 +47,6 @@ import org.hisp.dhis.preheat.PreheatService; import org.hisp.dhis.schema.SchemaService; import org.hisp.dhis.schema.validation.SchemaValidator; -import org.hisp.dhis.schema.validation.ValidationViolation; import org.hisp.dhis.user.CurrentUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -193,19 +193,19 @@ List> referenceErrors = preheatService.checkReferences( bundle.getObjects().get( klass ), bundle.getPreheat(), bundle.getPreheatIdentifier() ); referenceErrors.forEach( objectBundleValidation::addErrorReports ); // collapsing for now, we might want to give pr object ref list - List> validationViolations = new ArrayList<>(); + List> validationErrorReports = new ArrayList<>(); for ( IdentifiableObject object : bundle.getObjects().get( klass ) ) { - List validate = schemaValidator.validate( object ); + List validate = schemaValidator.validate( object ); if ( !validate.isEmpty() ) { - validationViolations.add( validate ); + validationErrorReports.add( validate ); } } - objectBundleValidation.addValidationViolation( klass, validationViolations ); + validationErrorReports.forEach( objectBundleValidation::addErrorReports ); } bundle.setObjectBundleStatus( ObjectBundleStatus.VALIDATED ); === 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-03-02 07:56:41 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleValidation.java 2016-03-03 01:20:51 +0000 @@ -28,10 +28,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.feedback.ErrorCode; import org.hisp.dhis.feedback.ErrorReport; -import org.hisp.dhis.schema.validation.ValidationViolation; import java.util.ArrayList; import java.util.HashMap; @@ -45,8 +43,6 @@ { private Map, Map>> errorReports = new HashMap<>(); - private Map, List>> validationViolations = new HashMap<>(); - public ObjectBundleValidation() { } @@ -105,14 +101,4 @@ return map.get( errorCode ); } - - public void addValidationViolation( Class klass, List> validationViolations ) - { - this.validationViolations.put( klass, validationViolations ); - } - - public Map, List>> getValidationViolations() - { - return validationViolations; - } } === added file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/webmessage/responses/ErrorReportsWebMessageResponse.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/webmessage/responses/ErrorReportsWebMessageResponse.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/webmessage/responses/ErrorReportsWebMessageResponse.java 2016-03-03 01:20:51 +0000 @@ -0,0 +1,66 @@ +package org.hisp.dhis.dxf2.webmessage.responses; + +/* + * Copyright (c) 2004-2016, 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 com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import org.hisp.dhis.common.DxfNamespaces; +import org.hisp.dhis.dxf2.webmessage.AbstractWebMessageResponse; +import org.hisp.dhis.feedback.ErrorReport; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Morten Olav Hansen + */ +public class ErrorReportsWebMessageResponse + extends AbstractWebMessageResponse +{ + private List errorReports = new ArrayList<>(); + + public ErrorReportsWebMessageResponse( List errorReports ) + { + this.errorReports = errorReports; + } + + @JsonProperty + @JacksonXmlElementWrapper( localName = "errorReports", namespace = DxfNamespaces.DXF_2_0, useWrapping = false ) + @JacksonXmlProperty( localName = "errorReport", namespace = DxfNamespaces.DXF_2_0 ) + public List getErrorReports() + { + return errorReports; + } + + public void setErrorReports( List errorReports ) + { + this.errorReports = errorReports; + } +} === removed file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/webmessage/responses/ValidationViolationsWebMessageResponse.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/webmessage/responses/ValidationViolationsWebMessageResponse.java 2016-02-15 04:57:22 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/webmessage/responses/ValidationViolationsWebMessageResponse.java 1970-01-01 00:00:00 +0000 @@ -1,66 +0,0 @@ -package org.hisp.dhis.dxf2.webmessage.responses; - -/* - * Copyright (c) 2004-2016, 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 com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import org.hisp.dhis.common.DxfNamespaces; -import org.hisp.dhis.schema.validation.ValidationViolation; -import org.hisp.dhis.dxf2.webmessage.AbstractWebMessageResponse; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Morten Olav Hansen - */ -public class ValidationViolationsWebMessageResponse - extends AbstractWebMessageResponse -{ - private List validationViolations = new ArrayList<>(); - - public ValidationViolationsWebMessageResponse( List validationViolations ) - { - this.validationViolations = validationViolations; - } - - @JsonProperty - @JacksonXmlElementWrapper( localName = "validationViolations", namespace = DxfNamespaces.DXF_2_0, useWrapping = false ) - @JacksonXmlProperty( localName = "validationViolation", namespace = DxfNamespaces.DXF_2_0 ) - public List getValidationViolations() - { - return validationViolations; - } - - public void setValidationViolations( List validationViolations ) - { - this.validationViolations = validationViolations; - } -} === 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-03-01 07:51:42 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java 2016-03-03 01:20:51 +0000 @@ -238,8 +238,8 @@ ObjectBundle bundle = objectBundleService.create( params ); ObjectBundleValidation validate = objectBundleService.validate( bundle ); - assertFalse( validate.getValidationViolations().isEmpty() ); - assertEquals( 2, validate.getValidationViolations().get( DataElement.class ).size() ); + assertFalse( validate.getErrorReports().isEmpty() ); + assertEquals( 2, validate.getErrorReports().get( DataElement.class ).size() ); } @Test === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/MaintenanceController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/MaintenanceController.java 2016-03-02 06:42:30 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/MaintenanceController.java 2016-03-03 01:20:51 +0000 @@ -1,35 +1,6 @@ package org.hisp.dhis.webapi.controller; import org.hisp.dhis.analytics.AnalyticsTableService; - -/* - * Copyright (c) 2004-2016, 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 org.hisp.dhis.analytics.partition.PartitionManager; import org.hisp.dhis.cache.HibernateCacheManager; import org.hisp.dhis.common.IdentifiableObject; @@ -37,19 +8,19 @@ import org.hisp.dhis.dxf2.common.Options; import org.hisp.dhis.dxf2.metadata.ExportService; import org.hisp.dhis.dxf2.metadata.Metadata; -import org.hisp.dhis.render.RenderService; -import org.hisp.dhis.schema.validation.SchemaValidator; import org.hisp.dhis.dxf2.webmessage.WebMessage; -import org.hisp.dhis.schema.validation.ValidationViolation; -import org.hisp.dhis.webapi.service.WebMessageService; -import org.hisp.dhis.webapi.utils.WebMessageUtils; +import org.hisp.dhis.feedback.ErrorReport; import org.hisp.dhis.maintenance.MaintenanceService; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.render.RenderService; import org.hisp.dhis.resourcetable.ResourceTableService; import org.hisp.dhis.schema.Property; import org.hisp.dhis.schema.Schema; import org.hisp.dhis.schema.SchemaService; +import org.hisp.dhis.schema.validation.SchemaValidator; +import org.hisp.dhis.webapi.service.WebMessageService; +import org.hisp.dhis.webapi.utils.WebMessageUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; @@ -66,6 +37,34 @@ import java.util.List; import java.util.Map; +/* + * Copyright (c) 2004-2016, 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. + */ + /** * @author Lars Helge Overland */ @@ -77,7 +76,7 @@ @Autowired private WebMessageService webMessageService; - + @Autowired private MaintenanceService maintenanceService; @@ -127,7 +126,7 @@ { maintenanceService.removeExpiredInvitations(); } - + @RequestMapping( value = "/ouPathsUpdate", method = { RequestMethod.PUT, RequestMethod.POST } ) @PreAuthorize( "hasRole('ALL') or hasRole('F_PERFORM_MAINTENANCE')" ) public void forceUpdatePaths() @@ -141,26 +140,26 @@ { maintenanceService.prunePeriods(); } - + @RequestMapping( value = "/dataPruning/organisationUnits/{uid}", method = { RequestMethod.PUT, RequestMethod.POST } ) @PreAuthorize( "hasRole('ALL')" ) public void pruneDataByOrganisationUnit( @PathVariable String uid, HttpServletResponse response ) throws Exception { OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit( uid ); - + if ( organisationUnit == null ) { webMessageService.sendJson( WebMessageUtils.conflict( "Organisation unit does not exist: " + uid ), response ); return; } - + boolean result = maintenanceService.pruneData( organisationUnit ); - + WebMessage message = result ? WebMessageUtils.ok( "Data was pruned successfully" ) : WebMessageUtils.conflict( "Data could not be pruned" ); - + webMessageService.sendJson( message, response ); - } + } @RequestMapping( value = "/zeroDataValueRemoval", method = { RequestMethod.PUT, RequestMethod.POST } ) @PreAuthorize( "hasRole('ALL') or hasRole('F_PERFORM_MAINTENANCE')" ) @@ -208,7 +207,7 @@ Metadata metadata = exportService.getMetaData( options ); Schema schema = schemaService.getDynamicSchema( Metadata.class ); - Map>> output = new HashMap<>(); + Map>> output = new HashMap<>(); for ( Property property : schema.getProperties() ) { @@ -223,7 +222,7 @@ for ( Object object : collection ) { - List validationViolations = schemaValidator.validate( object ); + List validationViolations = schemaValidator.validate( object ); if ( !validationViolations.isEmpty() ) { === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SchemaController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SchemaController.java 2016-02-27 11:03:16 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SchemaController.java 2016-03-03 01:20:51 +0000 @@ -30,6 +30,7 @@ import com.google.common.collect.Lists; import org.hisp.dhis.dxf2.webmessage.WebMessage; +import org.hisp.dhis.feedback.ErrorReport; import org.hisp.dhis.fieldfilter.FieldFilterService; import org.hisp.dhis.node.NodeUtils; import org.hisp.dhis.node.types.CollectionNode; @@ -40,7 +41,6 @@ import org.hisp.dhis.schema.SchemaService; import org.hisp.dhis.schema.Schemas; import org.hisp.dhis.schema.validation.SchemaValidator; -import org.hisp.dhis.schema.validation.ValidationViolation; import org.hisp.dhis.webapi.service.ContextService; import org.hisp.dhis.webapi.service.LinkService; import org.hisp.dhis.webapi.service.WebMessageService; @@ -144,9 +144,9 @@ } Object object = renderService.fromJson( request.getInputStream(), schema.getKlass() ); - List validationViolations = schemaValidator.validate( object ); + List validationViolations = schemaValidator.validate( object ); - WebMessage webMessage = WebMessageUtils.validationViolations( validationViolations ); + WebMessage webMessage = WebMessageUtils.errorReports( validationViolations ); webMessageService.send( webMessage, response, request ); } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/WebMessageUtils.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/WebMessageUtils.java 2016-02-15 04:57:22 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/WebMessageUtils.java 2016-03-03 01:20:51 +0000 @@ -28,14 +28,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.dxf2.common.Status; import org.hisp.dhis.dxf2.importsummary.ImportStatus; import org.hisp.dhis.dxf2.importsummary.ImportSummaries; import org.hisp.dhis.dxf2.importsummary.ImportSummary; import org.hisp.dhis.dxf2.metadata.ImportTypeSummary; -import org.hisp.dhis.schema.validation.ValidationViolation; import org.hisp.dhis.dxf2.webmessage.WebMessage; -import org.hisp.dhis.dxf2.common.Status; -import org.hisp.dhis.dxf2.webmessage.responses.ValidationViolationsWebMessageResponse; +import org.hisp.dhis.dxf2.webmessage.responses.ErrorReportsWebMessageResponse; +import org.hisp.dhis.feedback.ErrorReport; import org.springframework.http.HttpStatus; import java.util.List; @@ -246,12 +246,12 @@ return webMessage; } - public static WebMessage validationViolations( List validationViolations ) + public static WebMessage errorReports( List errorReports ) { WebMessage webMessage = new WebMessage(); - webMessage.setResponse( new ValidationViolationsWebMessageResponse( validationViolations ) ); + webMessage.setResponse( new ErrorReportsWebMessageResponse( errorReports ) ); - if ( !validationViolations.isEmpty() ) + if ( !errorReports.isEmpty() ) { webMessage.setStatus( Status.ERROR ); webMessage.setHttpStatus( HttpStatus.BAD_REQUEST );