=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidation.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidation.java 2012-01-15 14:53:46 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidation.java 2012-11-08 13:09:31 +0000 @@ -29,6 +29,8 @@ import java.io.Serializable; +import org.hisp.dhis.expression.Operator; + /** * @author Chau Thu Tran * @version $ ProgramValidation.java Apr 28, 2011 10:27:29 AM $ @@ -66,6 +68,9 @@ public static final int AFTER_OR_EQUALS_TO_DUE_DATE = -4; public static final int BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS = -5; + + + public static final String NOT_NULL_VALUE_IN_EXPRESSION = "{NOT-NULL-VALUE}"; // ------------------------------------------------------------------------- // Fields @@ -75,9 +80,11 @@ private String description; - private String leftSide; + private ProgramExpression leftSide; + + private Operator operator; - private String rightSide; + private ProgramExpression rightSide; private Program program; @@ -92,7 +99,7 @@ } - public ProgramValidation( String description, String leftSide, String rightSide, Program program ) + public ProgramValidation( String description, ProgramExpression leftSide, ProgramExpression rightSide, Program program ) { this.description = description; this.leftSide = leftSide; @@ -100,7 +107,7 @@ this.program = program; } - public ProgramValidation( String description, String leftSide, String rightSide, Program program, Boolean dateType ) + public ProgramValidation( String description, ProgramExpression leftSide, ProgramExpression rightSide, Program program, Boolean dateType ) { this.description = description; this.leftSide = leftSide; @@ -207,22 +214,22 @@ this.description = description; } - public String getLeftSide() + public ProgramExpression getLeftSide() { return leftSide; } - public void setLeftSide( String leftSide ) + public void setLeftSide( ProgramExpression leftSide ) { this.leftSide = leftSide; } - public String getRightSide() + public ProgramExpression getRightSide() { return rightSide; } - public void setRightSide( String rightSide ) + public void setRightSide( ProgramExpression rightSide ) { this.rightSide = rightSide; } @@ -246,4 +253,14 @@ { this.dateType = dateType; } + + public Operator getOperator() + { + return operator; + } + + public void setOperator( Operator operator ) + { + this.operator = operator; + } } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidationService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidationService.java 2012-11-06 07:09:13 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidationService.java 2012-11-08 13:09:31 +0000 @@ -57,8 +57,6 @@ Collection getProgramValidation( ProgramStageDataElement psdataElement ); - ProgramValidationResult runValidation( ProgramValidation validation, + ProgramValidationResult validate( ProgramValidation validation, ProgramStageInstance programStageInstance, I18nFormat format ); - - String getValidationDescription( String condition ); } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramValidationService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramValidationService.java 2012-11-06 15:55:46 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramValidationService.java 2012-11-08 13:09:31 +0000 @@ -27,21 +27,12 @@ package org.hisp.dhis.program; -import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.OBJECT_PROGRAM_STAGE_DATAELEMENT; -import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.SEPARATOR_ID; -import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.SEPARATOR_OBJECT; -import static org.hisp.dhis.program.ProgramValidation.AFTER_CURRENT_DATE; -import static org.hisp.dhis.program.ProgramValidation.AFTER_DUE_DATE; -import static org.hisp.dhis.program.ProgramValidation.AFTER_OR_EQUALS_TO_CURRENT_DATE; -import static org.hisp.dhis.program.ProgramValidation.AFTER_OR_EQUALS_TO_DUE_DATE; -import static org.hisp.dhis.program.ProgramValidation.BEFORE_CURRENT_DATE; -import static org.hisp.dhis.program.ProgramValidation.BEFORE_DUE_DATE; -import static org.hisp.dhis.program.ProgramValidation.BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS; -import static org.hisp.dhis.program.ProgramValidation.BEFORE_OR_EQUALS_TO_CURRENT_DATE; -import static org.hisp.dhis.program.ProgramValidation.BEFORE_OR_EQUALS_TO_DUE_DATE; +import static org.hisp.dhis.program.ProgramExpression.NOT_NULL_VALUE_IN_EXPRESSION; +import static org.hisp.dhis.program.ProgramExpression.OBJECT_PROGRAM_STAGE_DATAELEMENT; +import static org.hisp.dhis.program.ProgramExpression.SEPARATOR_ID; +import static org.hisp.dhis.program.ProgramExpression.SEPARATOR_OBJECT; import java.util.Collection; -import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.regex.Matcher; @@ -50,9 +41,6 @@ import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementService; import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.patientdatavalue.PatientDataValue; -import org.hisp.dhis.patientdatavalue.PatientDataValueService; -import org.nfunk.jep.JEP; import org.springframework.transaction.annotation.Transactional; /** @@ -65,20 +53,14 @@ { private final String regExp = "\\[" + OBJECT_PROGRAM_STAGE_DATAELEMENT + SEPARATOR_OBJECT + "([a-zA-Z0-9\\- ]+[" + SEPARATOR_ID + "[0-9]*]*)" + "\\]"; - - private final String regExpComparator = "(<=|>=|==|!=|<|>|>)+"; - - private final String SEPARATE_SIDE_VALUE = "&&"; - - private final String INVALID_CONDITION = "Invalid condition"; - + private ProgramValidationStore validationStore; private ProgramStageService programStageService; private DataElementService dataElementService; - private PatientDataValueService valueService; + private ProgramExpressionService expressionService; // ------------------------------------------------------------------------- // Setters @@ -89,6 +71,11 @@ this.validationStore = validationStore; } + public void setExpressionService( ProgramExpressionService expressionService ) + { + this.expressionService = expressionService; + } + public void setProgramStageService( ProgramStageService programStageService ) { this.programStageService = programStageService; @@ -99,11 +86,6 @@ this.dataElementService = dataElementService; } - public void setValueService( PatientDataValueService valueService ) - { - this.valueService = valueService; - } - // ------------------------------------------------------------------------- // Implementation methods // ------------------------------------------------------------------------- @@ -138,29 +120,31 @@ } @Override - public ProgramValidationResult runValidation( ProgramValidation validation, - ProgramStageInstance programStageInstance, I18nFormat format ) + public ProgramValidationResult validate( ProgramValidation validation, ProgramStageInstance programStageInstance, + I18nFormat format ) { - if ( validation.getDateType() ) - { - return runDateExpression( validation, programStageInstance, format ); - } - else - { - String resultLeft = runExpression( validation.getLeftSide(), programStageInstance ); - String resultRight = runExpression( validation.getRightSide(), programStageInstance ); - if ( resultLeft != null && resultRight != null ) + if ( !validation.getDateType() ) + { + String leftSideValue = expressionService.getProgramExpressionValue( validation.getLeftSide(), + programStageInstance ); + String rightSideValue = expressionService.getProgramExpressionValue( validation.getRightSide(), + programStageInstance ); + String operator = validation.getOperator().getMathematicalOperator(); + + if ( (leftSideValue != null && rightSideValue.equals( NOT_NULL_VALUE_IN_EXPRESSION ) && rightSideValue == null) + || ( !(leftSideValue != null && rightSideValue != null + && ((operator.equals( "==" ) && leftSideValue.equals( rightSideValue )) + || (operator.equals( "<" ) && leftSideValue.compareTo( rightSideValue ) < 0) + || (operator.equals( "<=" ) && (leftSideValue.equals( rightSideValue ) || leftSideValue + .compareTo( rightSideValue ) < 0)) + || (operator.equals( ">" ) && leftSideValue.compareTo( rightSideValue ) > 0) + || (operator.equals( ">=" ) && (leftSideValue.equals( rightSideValue ) || leftSideValue + .compareTo( rightSideValue ) > 0)) || (operator.equals( "!=" ) && !leftSideValue + .equals( rightSideValue ))))) ) { - boolean validLeftSide = Boolean.parseBoolean( resultLeft.split( SEPARATE_SIDE_VALUE )[0] ); - boolean validRightSide = Boolean.parseBoolean( resultRight.split( SEPARATE_SIDE_VALUE )[0] ); - if ( validLeftSide != validRightSide ) - { - return new ProgramValidationResult( programStageInstance, validation, - resultLeft.split( SEPARATE_SIDE_VALUE )[1], resultRight.split( SEPARATE_SIDE_VALUE )[1] ); - } + return new ProgramValidationResult( programStageInstance, validation, leftSideValue, rightSideValue ); } } - return null; } @@ -196,105 +180,6 @@ return result; } - private ProgramValidationResult runDateExpression( ProgramValidation programValidation, - ProgramStageInstance programStageInstance, I18nFormat format ) - { - boolean valid = true; - - Pattern pattern = Pattern.compile( regExp ); - Matcher matcher = pattern.matcher( programValidation.getLeftSide() ); - - if ( matcher.find() ) - { - String match = matcher.group(); - - PatientDataValue dataValue = getPatientDataValue( match, programStageInstance ); - - if ( dataValue != null ) - { - - String rightSide = programValidation.getRightSide(); - Date dueDate = dataValue.getProgramStageInstance().getDueDate(); - Date currentDate = dataValue.getTimestamp(); - Date value = format.parseDate( dataValue.getValue() ); - String operator = ""; - int daysValue = 0; - - int index = rightSide.indexOf( 'D' ); - if ( index < 0 ) - { - int rightValidation = Integer.parseInt( rightSide ); - - switch ( rightValidation ) - { - case BEFORE_CURRENT_DATE: - operator = "<"; - valid = value.before( currentDate ); - break; - case BEFORE_OR_EQUALS_TO_CURRENT_DATE: - operator = "<="; - valid = (value.before( currentDate ) || value.equals( currentDate )); - break; - case AFTER_CURRENT_DATE: - operator = ">"; - valid = value.after( currentDate ); - break; - case AFTER_OR_EQUALS_TO_CURRENT_DATE: - operator = ">="; - valid = (value.after( currentDate ) || value.equals( currentDate )); - break; - case BEFORE_DUE_DATE: - operator = "<"; - currentDate = dueDate; - valid = value.before( dueDate ); - break; - case BEFORE_OR_EQUALS_TO_DUE_DATE: - operator = "<="; - currentDate = dueDate; - valid = (value.before( dueDate ) || value.equals( dueDate )); - case AFTER_DUE_DATE: - operator = ">"; - currentDate = dueDate; - valid = value.after( dueDate ); - break; - case AFTER_OR_EQUALS_TO_DUE_DATE: - operator = ">="; - currentDate = dueDate; - valid = (value.after( dueDate ) || value.equals( dueDate )); - break; - default: - break; - } - } - else - { - int rightValidation = Integer.parseInt( rightSide.substring( 0, index ) ); - daysValue = Integer.parseInt( rightSide.substring( index + 1, rightSide.length() ) ); - if ( rightValidation == BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS ) - { - long maxDays = dueDate.getTime() / 86400000 + daysValue; - long minDays = dueDate.getTime() / 86400000 - daysValue; - long valueDays = value.getTime() / 86400000; - valid = (valueDays <= maxDays && valueDays >= minDays); - operator = "="; - } - } - - if ( !valid ) - { - String result = dataValue.getValue() + " " + operator + " " + format.formatDate( currentDate ); - if( daysValue!=0 ) - { - result += " +/- " + daysValue; - } - return new ProgramValidationResult( programStageInstance, programValidation, result, null ); - } - } - } - - return null; - } - public Collection getProgramValidation( ProgramStage programStage ) { Collection programValidation = getProgramValidation( programStage.getProgram() ); @@ -336,150 +221,11 @@ return programValidation; } - - public String getValidationDescription( String condition ) - { - StringBuffer description = new StringBuffer(); - - Pattern patternCondition = Pattern.compile( regExp ); - - Matcher matcher = patternCondition.matcher( condition ); - - while ( matcher.find() ) - { - String match = matcher.group(); - match = match.replaceAll( "[\\[\\]]", "" ); - - String[] info = match.split( SEPARATOR_OBJECT ); - String[] ids = info[1].split( SEPARATOR_ID ); - - String programStageId = ids[0]; - ProgramStage programStage = programStageService.getProgramStage( Integer.parseInt( programStageId ) ); - - int dataElementId = Integer.parseInt( ids[1] ); - DataElement dataElement = dataElementService.getDataElement( dataElementId ); - - if ( programStage == null || dataElement == null ) - { - return INVALID_CONDITION; - } - - matcher.appendReplacement( description, programStage.getName() + SEPARATOR_ID + dataElement.getName() ); - - } - - matcher.appendTail( description ); - - return description.toString(); - } - + // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- - - private String SUM_OPERATOR_IN_EXPRESSION = "+"; - - private String NOT_NULL_VALUE_IN_EXPRESSION = "{NOT-NULL-VALUE}"; - - private String runExpression( String expression, ProgramStageInstance programStageInstance ) - { - boolean valid = true; - String comparetor = ""; - Pattern pattern = Pattern.compile( regExpComparator ); - Matcher matcher = pattern.matcher( expression ); - if ( matcher.find() ) - { - comparetor = matcher.group(); - } - - String[] sides = expression.split( regExpComparator ); - String leftSideValue = getOneSideExpressionValue( sides[0].trim(), programStageInstance ); - String rightSideValue = getOneSideExpressionValue( sides[1].trim(), programStageInstance ); - - if ( leftSideValue == null && rightSideValue == null ) - { - return "true&&null"; - } - else if ( expression.indexOf( SUM_OPERATOR_IN_EXPRESSION ) != -1 ) - { - if ( leftSideValue != null && rightSideValue != null ) - { - String result = leftSideValue + comparetor + rightSideValue; - final JEP parser = new JEP(); - parser.parseExpression( result ); - valid = (parser.getValue() == 1.0); - } - } - else - { - if ( rightSideValue != null && rightSideValue.equals( NOT_NULL_VALUE_IN_EXPRESSION ) ) - { - valid = !(leftSideValue == null); - } - else if ( leftSideValue != null - && rightSideValue != null - && ((comparetor.equals( "==" ) && leftSideValue.equals( rightSideValue )) - || (comparetor.equals( "<" ) && leftSideValue.compareTo( rightSideValue ) < 0) - || (comparetor.equals( "<=" ) && (leftSideValue.equals( rightSideValue ) || leftSideValue - .compareTo( rightSideValue ) < 0)) - || (comparetor.equals( ">" ) && leftSideValue.compareTo( rightSideValue ) > 0) - || (comparetor.equals( ">=" ) && (leftSideValue.equals( rightSideValue ) || leftSideValue - .compareTo( rightSideValue ) > 0)) || (comparetor.equals( "!=" ) && !leftSideValue - .equals( rightSideValue ))) ) - { - valid = true; - } - else - { - valid = false; - } - } - - return valid + SEPARATE_SIDE_VALUE + leftSideValue + " " + comparetor + " " + rightSideValue; - } - - private String getOneSideExpressionValue( String expression, ProgramStageInstance programStageInstance ) - { - StringBuffer description = new StringBuffer(); - - Pattern pattern = Pattern.compile( regExp ); - - Matcher matcher = pattern.matcher( expression ); - - while ( matcher.find() ) - { - String match = matcher.group(); - - PatientDataValue dataValue = getPatientDataValue( match, programStageInstance ); - - if ( dataValue == null ) - { - return null; - } - - matcher.appendReplacement( description, dataValue.getValue() ); - } - - matcher.appendTail( description ); - - return description.toString(); - } - - private PatientDataValue getPatientDataValue( String match, ProgramStageInstance programStageInstance ) - { - match = match.replaceAll( "[\\[\\]]", "" ); - - String[] info = match.split( SEPARATOR_OBJECT ); - String[] ids = info[1].split( SEPARATOR_ID ); - - int dataElementId = Integer.parseInt( ids[1] ); - DataElement dataElement = dataElementService.getDataElement( dataElementId ); - - PatientDataValue dataValue = valueService.getPatientDataValue( programStageInstance, dataElement ); - - return dataValue; - } - + private Collection getDataElementInExpression( ProgramValidation programValidation ) { Collection dataElements = new HashSet(); === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2012-10-25 13:31:14 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2012-11-08 13:09:31 +0000 @@ -61,6 +61,11 @@ + + + + + @@ -214,8 +219,13 @@ - + + + + + + + === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/resources/org/hisp/dhis/program/hibernate/ProgramValidation.hbm.xml' --- dhis-2/dhis-services/dhis-service-patient/src/main/resources/org/hisp/dhis/program/hibernate/ProgramValidation.hbm.xml 2012-01-13 02:14:28 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/resources/org/hisp/dhis/program/hibernate/ProgramValidation.hbm.xml 2012-11-08 13:09:31 +0000 @@ -4,8 +4,7 @@ "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> - + @@ -13,13 +12,21 @@ - - - + + + + + + + - + === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/org/hisp/dhis/caseentry/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/org/hisp/dhis/caseentry/i18n_module.properties 2012-11-08 06:20:53 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/org/hisp/dhis/caseentry/i18n_module.properties 2012-11-08 13:09:31 +0000 @@ -470,4 +470,6 @@ left_value = Left value right_value = Right value validation_rule = Validation rule -add_filter = Add filter \ No newline at end of file +add_filter = Add filter +edit_left_side = Edit left side +edit_right_side = Edit right side \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js 2012-11-08 04:13:48 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js 2012-11-08 13:09:31 +0000 @@ -213,7 +213,7 @@ var array = []; Ext.Array.each(selected, function(item) { var data = a.store.findExact('id', item); - array.push({id: item, name: a.store.getAt(data).data.name, compulsory: a.store.getAt(data).data.compulsory, valueType: a.store.getAt(data).data.valueType, displayInReports:r.data.displayInReports}); + array.push({id: item, name: a.store.getAt(data).data.name, compulsory: a.store.getAt(data).data.compulsory, valueType: a.store.getAt(data).data.valueType}); }); s.store.add(array); } @@ -226,7 +226,7 @@ { if( elements[i].style.display != 'none' ) { - array.push({id: a.store.getAt(i).data.id, name: a.store.getAt(i).data.name, compulsory: a.store.getAt(i).data.compulsory, valueType: a.store.getAt(i).data.valueType, displayInReports:r.data.displayInReports}); + array.push({id: a.store.getAt(i).data.id, name: a.store.getAt(i).data.name, compulsory: a.store.getAt(i).data.compulsory, valueType: a.store.getAt(i).data.valueType}); } } s.store.add(array); @@ -594,7 +594,7 @@ }), dataelement: { available: Ext.create('Ext.data.Store', { - fields: ['id', 'name', 'compulsory', 'valueType', 'displayInReports'], + fields: ['id', 'name', 'compulsory', 'valueType'], proxy: { type: 'ajax', url: TR.conf.finals.ajax.path_commons + TR.conf.finals.ajax.dataelements_get, @@ -608,15 +608,6 @@ listeners: { load: function(s) { this.isloaded = true; - // Get displayedInList-Data elements - var array = []; - TR.cmp.params.dataelement.available.store.each( function(r) { - if( r.data.displayInReports=="true" ) - { - array.push({id: r.data.id, name: r.data.name, compulsory: r.data.compulsory, valueType: r.data.valueType, displayInReports:r.data.displayInReports }); - } - }); - TR.cmp.params.dataelement.selected.store.add(array); TR.util.store.addToStorage(s); TR.util.multiselect.filterAvailable(TR.cmp.params.dataelement.available, TR.cmp.params.dataelement.selected); } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/AddProgramValidationAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/AddProgramValidationAction.java 2012-01-13 02:14:28 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/AddProgramValidationAction.java 2012-11-08 13:09:31 +0000 @@ -27,7 +27,9 @@ package org.hisp.dhis.patient.action.validation; +import org.hisp.dhis.expression.Operator; import org.hisp.dhis.program.Program; +import org.hisp.dhis.program.ProgramExpression; import org.hisp.dhis.program.ProgramService; import org.hisp.dhis.program.ProgramValidation; import org.hisp.dhis.program.ProgramValidationService; @@ -47,67 +49,73 @@ private ProgramValidationService programValidationService; + public void setProgramValidationService( ProgramValidationService programValidationService ) + { + this.programValidationService = programValidationService; + } + private ProgramService programService; + public void setProgramService( ProgramService programService ) + { + this.programService = programService; + } + // ------------------------------------------------------------------------- // Input/Output // ------------------------------------------------------------------------- private String description; - private String leftSide; - - private String rightSide; - - private Integer programId; - + public void setDescription( String description ) + { + this.description = description; + } + + private String operator; + + public void setOperator( String operator ) + { + this.operator = operator; + } + + private String leftSideExpression; + + public void setLeftSideExpression( String leftSideExpression ) + { + this.leftSideExpression = leftSideExpression; + } + + private String leftSideDescription; + + public void setLeftSideDescription( String leftSideDescription ) + { + this.leftSideDescription = leftSideDescription; + } + + private String rightSideExpression; + + public void setRightSideExpression( String rightSideExpression ) + { + this.rightSideExpression = rightSideExpression; + } + + private String rightSideDescription; + + public void setRightSideDescription( String rightSideDescription ) + { + this.rightSideDescription = rightSideDescription; + } + + private Boolean dateType; - private String message; - - // ------------------------------------------------------------------------- - // Setters - // ------------------------------------------------------------------------- - - public void setProgramService( ProgramService programService ) - { - this.programService = programService; - } - public void setDateType( Boolean dateType ) { this.dateType = dateType; } - public void setProgramValidationService( ProgramValidationService programValidationService ) - { - this.programValidationService = programValidationService; - } - - public void setDescription( String description ) - { - this.description = description; - } - - public void setLeftSide( String leftSide ) - { - this.leftSide = leftSide; - } - - public String getMessage() - { - return message; - } - - public void setRightSide( String rightSide ) - { - this.rightSide = rightSide; - } - - public Integer getProgramId() - { - return programId; - } + private Integer programId; public void setProgramId( Integer programId ) { @@ -122,17 +130,20 @@ public String execute() throws Exception { + ProgramExpression leftExpression = new ProgramExpression( leftSideExpression, leftSideDescription ); + ProgramExpression rightExpression = new ProgramExpression( rightSideExpression, rightSideDescription ); + ProgramValidation validation = new ProgramValidation(); - validation.setDescription( description.trim() ); - validation.setLeftSide( leftSide.trim() ); - validation.setRightSide( rightSide.trim() ); + validation.setOperator( Operator.valueOf(operator) ); + validation.setLeftSide( leftExpression ); + validation.setRightSide( rightExpression ); validation.setDateType( dateType ); Program program = programService.getProgram( programId ); validation.setProgram( program ); - - message = programValidationService.addProgramValidation( validation ) + ""; + + programValidationService.addProgramValidation( validation ); return SUCCESS; } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/GetProgramValidationAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/GetProgramValidationAction.java 2012-07-30 10:10:18 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/GetProgramValidationAction.java 2012-11-08 13:09:31 +0000 @@ -44,43 +44,25 @@ // ------------------------------------------------------------------------- private ProgramValidationService programValidationService; - + + public void setProgramValidationService( ProgramValidationService programValidationService ) + { + this.programValidationService = programValidationService; + } + // ------------------------------------------------------------------------- // Input && Output // ------------------------------------------------------------------------- private Integer validationId; - private ProgramValidation validation; - - private String leftDescription; - - public String getLeftDescription() - { - return leftDescription; - } - - private String rightDescription; - - public String getRightDescription() - { - return rightDescription; - } - - // ------------------------------------------------------------------------- - // Getter && Setter - // ------------------------------------------------------------------------- - - public void setProgramValidationService( ProgramValidationService programValidationService ) - { - this.programValidationService = programValidationService; - } - public void setValidationId( Integer validationId ) { this.validationId = validationId; } + private ProgramValidation validation; + public ProgramValidation getValidation() { return validation; @@ -96,9 +78,6 @@ { validation = programValidationService.getProgramValidation( validationId ); - leftDescription = programValidationService.getValidationDescription( validation.getLeftSide() ); - rightDescription = programValidationService.getValidationDescription( validation.getRightSide() ); - return SUCCESS; } === removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/GetProgramValidationDescriptionAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/GetProgramValidationDescriptionAction.java 2012-07-30 10:10:18 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/GetProgramValidationDescriptionAction.java 1970-01-01 00:00:00 +0000 @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2004-2012, 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. - */ -package org.hisp.dhis.patient.action.validation; - -import org.hisp.dhis.program.ProgramValidationService; - -import com.opensymphony.xwork2.Action; - -/** - * @author Chau Thu Tran - * @version $ID : GetAggConditionDescriptionAction.java Jan 11, 2011 9:14:19 PM - * $ - */ -public class GetProgramValidationDescriptionAction - implements Action -{ - // ------------------------------------------------------------------------- - // Dependency - // ------------------------------------------------------------------------- - - private ProgramValidationService programValidationService; - - // ------------------------------------------------------------------------- - // Input && Output - // ------------------------------------------------------------------------- - - private String condition; - - private String description; - - // ------------------------------------------------------------------------- - // Getters && Setters - // ------------------------------------------------------------------------- - - public void setProgramValidationService( ProgramValidationService programValidationService ) - { - this.programValidationService = programValidationService; - } - - public String getDescription() - { - return description; - } - - public void setCondition( String condition ) - { - this.condition = condition; - } - - // ------------------------------------------------------------------------- - // Action implementation - // ------------------------------------------------------------------------- - - @Override - public String execute() - throws Exception - { - description = programValidationService.getValidationDescription( condition ); - - return SUCCESS; - } -} === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/UpdateProgramValidationAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/UpdateProgramValidationAction.java 2012-01-11 05:31:53 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/validation/UpdateProgramValidationAction.java 2012-11-08 13:09:31 +0000 @@ -27,6 +27,8 @@ package org.hisp.dhis.patient.action.validation; +import org.hisp.dhis.expression.Operator; +import org.hisp.dhis.program.ProgramExpression; import org.hisp.dhis.program.ProgramValidation; import org.hisp.dhis.program.ProgramValidationService; @@ -45,52 +47,69 @@ private ProgramValidationService programValidationService; + public void setProgramValidationService( ProgramValidationService programValidationService ) + { + this.programValidationService = programValidationService; + } + // ------------------------------------------------------------------------- // Input // ------------------------------------------------------------------------- private Integer id; - private String description; - - private String leftSide; - - private String rightSide; - - private Integer programId; - - // ------------------------------------------------------------------------- - // Setters - // ------------------------------------------------------------------------- - - public void setProgramValidationService( ProgramValidationService programValidationService ) - { - this.programValidationService = programValidationService; - } - - public Integer getProgramId() - { - return programId; - } - public void setId( Integer id ) { this.id = id; } + private String description; + public void setDescription( String description ) { this.description = description; } - public void setLeftSide( String leftSide ) - { - this.leftSide = leftSide; - } - - public void setRightSide( String rightSide ) - { - this.rightSide = rightSide; + private String operator; + + public void setOperator( String operator ) + { + this.operator = operator; + } + + private String leftSideExpression; + + public void setLeftSideExpression( String leftSideExpression ) + { + this.leftSideExpression = leftSideExpression; + } + + private String leftSideDescription; + + public void setLeftSideDescription( String leftSideDescription ) + { + this.leftSideDescription = leftSideDescription; + } + + private String rightSideExpression; + + public void setRightSideExpression( String rightSideExpression ) + { + this.rightSideExpression = rightSideExpression; + } + + private String rightSideDescription; + + public void setRightSideDescription( String rightSideDescription ) + { + this.rightSideDescription = rightSideDescription; + } + + private Boolean dateType; + + public void setDateType( Boolean dateType ) + { + this.dateType = dateType; } // ------------------------------------------------------------------------- @@ -103,12 +122,15 @@ { ProgramValidation validation = programValidationService.getProgramValidation( id ); - programId = validation.getProgram().getId(); + ProgramExpression leftExpression = new ProgramExpression( leftSideExpression, leftSideDescription ); + ProgramExpression rightExpression = new ProgramExpression( rightSideExpression, rightSideDescription ); validation.setDescription( description.trim() ); - validation.setLeftSide( leftSide.trim() ); - validation.setRightSide( rightSide.trim() ); - + validation.setOperator( Operator.valueOf( operator ) ); + validation.setLeftSide( leftExpression ); + validation.setRightSide( rightExpression ); + validation.setDateType( dateType ); + programValidationService.updateProgramValidation( validation ); return SUCCESS; === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/META-INF/dhis/beans.xml 2012-10-12 07:34:56 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/META-INF/dhis/beans.xml 2012-11-08 13:09:31 +0000 @@ -898,16 +898,16 @@ - + - - - + - + + F_PROGRAM_VALIDATION - + /dhis-web-maintenance-patient/responseCaseAggDescription.vm