=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java 2015-10-01 10:05:20 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java 2015-10-01 11:35:44 +0000 @@ -1093,7 +1093,7 @@ if ( event.getAttributeCategoryOptions() != null && program.getCategoryCombo() != null ) { - coc = inputUtils.getAttributeOptionCombo( program.getCategoryCombo(), program.getCategoryCombo().getUid(), event.getAttributeCategoryOptions() ); //getAttributeOptionCombo( program.getCategoryCombo(), event.getAttributeCategoryOptions() ); + coc = inputUtils.getAttributeOptionCombo( program.getCategoryCombo(), event.getAttributeCategoryOptions() ); //getAttributeOptionCombo( program.getCategoryCombo(), event.getAttributeCategoryOptions() ); if ( coc == null) { === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/utils/InputUtils.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/utils/InputUtils.java 2015-10-01 10:05:20 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/utils/InputUtils.java 2015-10-01 11:35:44 +0000 @@ -35,7 +35,6 @@ import org.hisp.dhis.dataelement.DataElementCategoryOption; import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; import org.hisp.dhis.dataelement.DataElementCategoryService; -import org.hisp.dhis.dxf2.webmessage.WebMessageException; import org.springframework.beans.factory.annotation.Autowired; import java.util.HashSet; @@ -62,7 +61,7 @@ * @return the attribute option combo identified from the given input, or null * if the input was invalid. */ - public DataElementCategoryOptionCombo getAttributeOptionCombo( DataElementCategoryCombo ccombo, String cc, String cp ) + public DataElementCategoryOptionCombo getAttributeOptionCombo( String cc, String cp ) { Set opts = TextUtils.splitToArray( cp, TextUtils.SEMICOLON ); @@ -75,14 +74,72 @@ throw new IllegalQueryException( "Both or none of category combination and category options must be present" ) ; } - DataElementCategoryCombo categoryCombo = ccombo; + DataElementCategoryCombo categoryCombo = null; + + if ( cc != null && (categoryCombo = idObjectManager.get( DataElementCategoryCombo.class, cc )) == null ) + { + throw new IllegalQueryException( "Illegal category combo identifier: " + cc ); + } + + // --------------------------------------------------------------------- + // Attribute category options validation + // --------------------------------------------------------------------- + + DataElementCategoryOptionCombo attributeOptionCombo = null; + + if ( opts != null ) + { + Set categoryOptions = new HashSet<>(); + + for ( String uid : opts ) + { + DataElementCategoryOption categoryOption = idObjectManager.get( DataElementCategoryOption.class, uid ); + + if ( categoryOption == null ) + { + throw new IllegalQueryException( "Illegal category option identifier: " + uid ) ; + } + + categoryOptions.add( categoryOption ); + } + + attributeOptionCombo = categoryService.getDataElementCategoryOptionCombo( categoryCombo, categoryOptions ); + + if ( attributeOptionCombo == null ) + { + throw new IllegalQueryException( "Attribute option combo does not exist for given category combo and category options" ); + } + } + + if ( attributeOptionCombo == null ) + { + attributeOptionCombo = categoryService.getDefaultDataElementCategoryOptionCombo(); + } + + if ( attributeOptionCombo == null ) + { + throw new IllegalQueryException( "Default attribute option combo does not exist" ); + } + + return attributeOptionCombo; + } + /** + * Validates and retrieves the attribute option combo. 409 conflict as status + * code along with a textual message will be set on the response in case of + * invalid input. + * + * @param cc the category combo. + * @param cp the category option query string. + * @return the attribute option combo identified from the given input, or null + * if the input was invalid. + */ + public DataElementCategoryOptionCombo getAttributeOptionCombo( DataElementCategoryCombo categoryCombo, String cp ) + { + Set opts = TextUtils.splitToArray( cp, TextUtils.SEMICOLON ); if ( categoryCombo == null ) { - if ( cc != null && (categoryCombo = idObjectManager.get( DataElementCategoryCombo.class, cc )) == null ) - { - throw new IllegalQueryException( "Illegal category combo identifier: " + cc ); - } + throw new IllegalQueryException( "Illegal category combo"); } // --------------------------------------------------------------------- @@ -127,4 +184,5 @@ return attributeOptionCombo; } + } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java 2015-10-01 10:05:20 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java 2015-10-01 11:35:44 +0000 @@ -192,7 +192,7 @@ throw new WebMessageException( WebMessageUtils.conflict( "Illegal organisation unit identifier: " + ou ) ); } - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, cc, cp ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( cc, cp ); if ( attributeOptionCombo == null ) { @@ -285,7 +285,7 @@ String cc = completeDataSetRegistrationRequest.getCc(); String cp = completeDataSetRegistrationRequest.getCp(); - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, cc, cp ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( cc, cp ); if ( attributeOptionCombo == null ) { @@ -372,7 +372,7 @@ throw new WebMessageException( WebMessageUtils.conflict( "Illegal organisation unit identifier: " + ou ) ); } - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, cc, cp ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( cc, cp ); if ( attributeOptionCombo == null ) { === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DataValueController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DataValueController.java 2015-10-01 10:05:20 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DataValueController.java 2015-10-01 11:35:44 +0000 @@ -673,7 +673,7 @@ private DataElementCategoryOptionCombo getAndValidateAttributeOptionCombo( String cc, String cp ) throws WebMessageException { - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, cc, cp ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( cc, cp ); if ( attributeOptionCombo == null ) { === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.java 2015-10-01 10:05:20 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.java 2015-10-01 11:35:44 +0000 @@ -155,7 +155,7 @@ { WebOptions options = new WebOptions( parameters ); - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, attributeCc, attributeCos ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( attributeCc, attributeCos ); if ( attributeOptionCombo == null ) { @@ -217,7 +217,7 @@ IdSchemes idSchemes, Model model, HttpServletResponse response, HttpServletRequest request ) throws IOException, WebMessageException { - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, attributeCc, attributeCos ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( attributeCc, attributeCos ); if ( attributeOptionCombo == null ) { @@ -267,7 +267,7 @@ { WebOptions options = new WebOptions( parameters ); - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( null, attributeCc, attributeCos ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( attributeCc, attributeCos ); if ( attributeOptionCombo == null ) { === modified file 'dhis-2/dhis-web/dhis-web-dataentry/pom.xml' --- dhis-2/dhis-web/dhis-web-dataentry/pom.xml 2015-07-20 02:01:37 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/pom.xml 2015-10-01 11:35:44 +0000 @@ -48,6 +48,10 @@ dhis-service-reporting + org.hisp.dhis + dhis-service-dxf2 + + javax.servlet servlet-api === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetDataValuesForDataSetAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetDataValuesForDataSetAction.java 2015-07-10 06:06:40 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetDataValuesForDataSetAction.java 2015-10-01 11:35:44 +0000 @@ -44,7 +44,7 @@ import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodType; -import org.hisp.dhis.webapi.utils.InputUtils; +import org.hisp.dhis.dxf2.utils.InputUtils; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java 2015-09-03 12:15:43 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java 2015-10-01 11:35:44 +0000 @@ -47,7 +47,7 @@ import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.user.UserCredentials; import org.hisp.dhis.user.UserService; -import org.hisp.dhis.webapi.utils.InputUtils; +import org.hisp.dhis.dxf2.utils.InputUtils; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.Action; === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/ValidationAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/ValidationAction.java 2015-07-10 19:12:53 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/ValidationAction.java 2015-10-01 11:35:44 +0000 @@ -50,7 +50,7 @@ import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.validation.ValidationResult; import org.hisp.dhis.validation.ValidationRuleService; -import org.hisp.dhis.webapi.utils.InputUtils; +import org.hisp.dhis.dxf2.utils.InputUtils; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired;