=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java 2016-03-01 22:30:53 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java 2016-03-02 07:56:41 +0000 @@ -28,11 +28,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import org.apache.commons.lang3.StringUtils; import org.hisp.dhis.common.BaseDimensionalItemObject; import org.hisp.dhis.common.BaseIdentifiableObject; @@ -43,13 +45,10 @@ import org.hisp.dhis.common.view.DetailedView; import org.hisp.dhis.common.view.ExportView; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; /** * @author Abyot Aselefew @@ -72,7 +71,7 @@ */ @Scanned private Set categoryOptions = new HashSet<>(); - + /** * Indicates whether to ignore data approval. */ @@ -85,7 +84,7 @@ public DataElementCategoryOptionCombo() { } - + // ------------------------------------------------------------------------- // hashCode, equals and toString // ------------------------------------------------------------------------- @@ -224,28 +223,34 @@ { return name; } - + StringBuilder builder = new StringBuilder(); - + + if ( categoryCombo == null || categoryCombo.getCategories().isEmpty() ) + { + return uid; + } + List categories = this.categoryCombo.getCategories(); - + for ( DataElementCategory category : categories ) { List options = category.getCategoryOptions(); - - optionLoop: for ( DataElementCategoryOption option : this.categoryOptions ) + + optionLoop: + for ( DataElementCategoryOption option : this.categoryOptions ) { if ( options.contains( option ) ) { builder.append( option.getDisplayName() ).append( ", " ); - + continue optionLoop; } } } - + builder.delete( Math.max( builder.length() - 2, 0 ), builder.length() ); - + return StringUtils.substring( builder.toString(), 0, 255 ); } @@ -308,7 +313,7 @@ { this.ignoreApproval = ignoreApproval; } - + @Override public void mergeWith( IdentifiableObject other, MergeMode mergeMode ) { === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/preheat/DefaultPreheatService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/preheat/DefaultPreheatService.java 2016-03-01 09:29:51 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/preheat/DefaultPreheatService.java 2016-03-02 07:56:41 +0000 @@ -116,10 +116,14 @@ for ( Class klass : uidMap.keySet() ) { Collection identifiers = uidMap.get( klass ); - Query query = Query.from( schemaService.getDynamicSchema( klass ) ); - query.add( Restrictions.in( "id", identifiers ) ); - List objects = queryService.query( query ); - preheat.put( PreheatIdentifier.UID, objects ); + + if ( !identifiers.isEmpty() ) + { + Query query = Query.from( schemaService.getDynamicSchema( klass ) ); + query.add( Restrictions.in( "id", identifiers ) ); + List objects = queryService.query( query ); + preheat.put( PreheatIdentifier.UID, objects ); + } } } @@ -128,10 +132,14 @@ for ( Class klass : codeMap.keySet() ) { Collection identifiers = codeMap.get( klass ); - Query query = Query.from( schemaService.getDynamicSchema( klass ) ); - query.add( Restrictions.in( "code", identifiers ) ); - List objects = queryService.query( query ); - preheat.put( PreheatIdentifier.CODE, objects ); + + if ( !identifiers.isEmpty() ) + { + Query query = Query.from( schemaService.getDynamicSchema( klass ) ); + query.add( Restrictions.in( "code", identifiers ) ); + List objects = queryService.query( query ); + preheat.put( PreheatIdentifier.CODE, objects ); + } } } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/DefaultMetadataImportService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/DefaultMetadataImportService.java 2016-03-02 05:22:04 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/DefaultMetadataImportService.java 2016-03-02 07:56:41 +0000 @@ -29,6 +29,10 @@ */ import org.hisp.dhis.dxf2.metadata2.feedback.ImportReport; +import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundle; +import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundleParams; +import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundleService; +import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundleValidation; import org.hisp.dhis.user.CurrentUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -45,6 +49,9 @@ @Autowired private CurrentUserService currentUserService; + @Autowired + private ObjectBundleService objectBundleService; + @Override public ImportReport importMetadata( MetadataImportParams params ) { @@ -55,13 +62,12 @@ params.setUser( currentUserService.getCurrentUser() ); } - return report; - } - - @Override - public ImportReport validate( MetadataImportParams params ) - { - ImportReport report = new ImportReport(); + ObjectBundleParams bundleParams = params.toObjectBundleParams(); + ObjectBundle objectBundle = objectBundleService.create( bundleParams ); + + ObjectBundleValidation validation = objectBundleService.validate( objectBundle ); + report.setErrorReports( validation.getErrorReports() ); + return report; } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/MetadataImportParams.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/MetadataImportParams.java 2016-03-02 05:22:04 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/MetadataImportParams.java 2016-03-02 07:56:41 +0000 @@ -31,6 +31,7 @@ import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.MergeMode; import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundleMode; +import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundleParams; import org.hisp.dhis.importexport.ImportStrategy; import org.hisp.dhis.preheat.PreheatIdentifier; import org.hisp.dhis.preheat.PreheatMode; @@ -168,4 +169,18 @@ objects.forEach( this::addObject ); return this; } + + public ObjectBundleParams toObjectBundleParams() + { + ObjectBundleParams params = new ObjectBundleParams(); + params.setUser( user ); + params.setImportMode( importMode ); + params.setObjects( objects ); + params.setPreheatIdentifier( preheatIdentifier ); + params.setPreheatMode( preheatMode ); + params.setObjectBundleMode( objectBundleMode ); + params.setMergeMode( mergeMode ); + + return params; + } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/MetadataImportService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/MetadataImportService.java 2016-03-02 05:22:04 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/MetadataImportService.java 2016-03-02 07:56:41 +0000 @@ -40,7 +40,5 @@ { ImportReport importMetadata( MetadataImportParams params ); - ImportReport validate( MetadataImportParams params ); - MetadataImportParams getParamsFromMap( Map> parameters ); } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/feedback/ImportReport.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/feedback/ImportReport.java 2016-03-02 05:22:04 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/feedback/ImportReport.java 2016-03-02 07:56:41 +0000 @@ -32,6 +32,7 @@ import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import org.hisp.dhis.common.DxfNamespaces; +import org.hisp.dhis.feedback.ErrorCode; import org.hisp.dhis.feedback.ErrorReport; import java.util.ArrayList; @@ -47,7 +48,7 @@ { private ImportStats stats = new ImportStats(); - private Map, List> errorReportMap = new HashMap<>(); + private Map, Map>> errorReports = new HashMap<>(); public ImportReport() { @@ -60,42 +61,65 @@ return stats; } - public void addErrorReport( ErrorReport errorReport ) - { - if ( !errorReportMap.containsKey( errorReport.getMainKlass() ) ) - { - errorReportMap.put( errorReport.getMainKlass(), new ArrayList<>() ); - } - - errorReportMap.get( errorReport.getMainKlass() ).add( errorReport ); - } - public void addErrorReports( List errorReports ) { - if ( errorReports == null || errorReports.isEmpty() ) - { - return; - } - - Class mainKlass = errorReports.get( 0 ).getMainKlass(); - - if ( !errorReportMap.containsKey( mainKlass ) ) - { - errorReportMap.put( mainKlass, new ArrayList<>() ); - } - - errorReportMap.get( mainKlass ).addAll( errorReports ); + errorReports.forEach( this::addErrorReport ); + } + + public void addErrorReport( T errorReport ) + { + if ( !errorReports.containsKey( errorReport.getMainKlass() ) ) + { + errorReports.put( errorReport.getMainKlass(), new HashMap<>() ); + } + + if ( !errorReports.get( errorReport.getMainKlass() ).containsKey( errorReport.getErrorCode() ) ) + { + errorReports.get( errorReport.getMainKlass() ).put( errorReport.getErrorCode(), new ArrayList<>() ); + } + + errorReports.get( errorReport.getMainKlass() ).get( errorReport.getErrorCode() ).add( errorReport ); + } + + public void addErrorReport( Class mainKlass, ErrorCode errorCode, Object... args ) + { + ErrorReport errorReport = new ErrorReport( mainKlass, errorCode, args ); + addErrorReport( errorReport ); } @JsonProperty @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) - public Map, List> getErrorReportMap() - { - return errorReportMap; - } - - public List> getErrorReports() - { - return new ArrayList<>( errorReportMap.values() ); + public Map, Map>> getErrorReports() + { + return errorReports; + } + + public Map> getErrorReports( Class klass ) + { + Map> map = errorReports.get( klass ); + + if ( map == null ) + { + return new HashMap<>(); + } + + return map; + } + + public List getErrorReports( Class klass, ErrorCode errorCode ) + { + Map> map = errorReports.get( klass ); + + if ( !map.containsKey( errorCode ) ) + { + return new ArrayList<>(); + } + + return map.get( errorCode ); + } + + public void setErrorReports( Map, Map>> errorReports ) + { + this.errorReports = errorReports; } } === 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-01 07:51:42 +0000 +++ 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 @@ -191,7 +191,7 @@ } List> referenceErrors = preheatService.checkReferences( bundle.getObjects().get( klass ), bundle.getPreheat(), bundle.getPreheatIdentifier() ); - referenceErrors.forEach( objectBundleValidation::addPreheatErrorReports ); // collapsing for now, we might want to give pr object ref list + referenceErrors.forEach( objectBundleValidation::addErrorReports ); // collapsing for now, we might want to give pr object ref list List> validationViolations = new ArrayList<>(); === 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-01 07:51:42 +0000 +++ 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 @@ -31,7 +31,6 @@ import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.feedback.ErrorCode; import org.hisp.dhis.feedback.ErrorReport; -import org.hisp.dhis.preheat.PreheatErrorReport; import org.hisp.dhis.schema.validation.ValidationViolation; import java.util.ArrayList; @@ -52,9 +51,9 @@ { } - public void addPreheatErrorReports( List preheatErrorReports ) + public void addErrorReports( List errorReports ) { - preheatErrorReports.forEach( this::addErrorReport ); + errorReports.forEach( this::addErrorReport ); } public void addErrorReport( T errorReport ) === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/metadata/MetadataImportController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/metadata/MetadataImportController.java 2016-03-02 05:22:04 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/metadata/MetadataImportController.java 2016-03-02 07:56:41 +0000 @@ -28,11 +28,9 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.dxf2.metadata2.MetadataImportParams; import org.hisp.dhis.dxf2.metadata2.MetadataImportService; import org.hisp.dhis.dxf2.metadata2.feedback.ImportReport; -import org.hisp.dhis.dxf2.metadata2.objectbundle.ObjectBundleMode; import org.hisp.dhis.render.RenderFormat; import org.hisp.dhis.render.RenderService; import org.hisp.dhis.webapi.service.ContextService; @@ -45,8 +43,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.List; -import java.util.Map; /** * @author Morten Olav Hansen @@ -68,18 +64,9 @@ public void postMetadata( HttpServletRequest request, HttpServletResponse response ) throws IOException { MetadataImportParams params = metadataImportService.getParamsFromMap( contextService.getParameterValuesMap() ); - Map, List> objects = renderService.fromMetadata( request.getInputStream(), RenderFormat.JSON ); - params.setObjects( objects ); + params.setObjects( renderService.fromMetadata( request.getInputStream(), RenderFormat.JSON ) ); - if ( ObjectBundleMode.VALIDATE == params.getObjectBundleMode() ) - { - ImportReport importReport = metadataImportService.validate( params ); - renderService.toJson( response.getOutputStream(), importReport ); - } - else if ( ObjectBundleMode.COMMIT == params.getObjectBundleMode() ) - { - ImportReport importReport = metadataImportService.importMetadata( params ); - renderService.toJson( response.getOutputStream(), importReport ); - } + ImportReport importReport = metadataImportService.importMetadata( params ); + renderService.toJson( response.getOutputStream(), importReport ); } }