------------------------------------------------------------ revno: 412 committer: Lars Helge Oeverland larshe...@gmail.com branch nick: trunk timestamp: Fri 2009-07-03 01:13:13 +0200 message: Code optimization in ExpressionService modified: dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java dhis-2/pom.xml
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2009-07-01 18:52:56 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2009-07-02 23:13:13 +0000 @@ -66,6 +66,8 @@ private static final Log log = LogFactory.getLog( DefaultExpressionService.class ); private static final String NULL_REPLACEMENT = "0"; + private static final String FORMULA_EXPRESSION = "(\\[\\d+\\" + SEPARATOR + "\\d+\\])"; + private static final String DESCRIPTION_EXPRESSION = "\\[.+?\\" + SEPARATOR + ".+?\\]"; // ------------------------------------------------------------------------- // Dependencies @@ -163,12 +165,7 @@ while ( matcher.find() ) { - String replaceString = matcher.group(); - - replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); - replaceString = replaceString.substring( 0, replaceString.indexOf( SEPARATOR ) ); - - final DataElement dataElement = dataElementService.getDataElement( Integer.parseInt( replaceString ) ); + final DataElement dataElement = dataElementService.getDataElement( getOperand( matcher.group() ).getDataElementId() ); if ( dataElement != null ) { @@ -186,29 +183,26 @@ if ( expression != null ) { - final Matcher matcher = getMatcher( "(\\[\\d+\\" + SEPARATOR + "\\d+\\])", expression ); + final Matcher matcher = getMatcher( FORMULA_EXPRESSION, expression ); while ( matcher.find() ) { String match = matcher.group(); - match = match.replaceAll( "[\\[\\]]", "" ); - - final int dataElementId = Integer.parseInt( match.substring( 0, match.indexOf( SEPARATOR ) ) ); - final int categoryOptionComboId = Integer.parseInt( match.substring( match.indexOf( SEPARATOR ) + 1, match.length() ) ); + final Operand operand = getOperand( match ); - final Integer mappedDataElementId = dataElementMapping.get( dataElementId ); - final Integer mappedCategoryOptionComboId = categoryOptionComboMapping.get( categoryOptionComboId ); + final Integer mappedDataElementId = dataElementMapping.get( operand.getDataElementId() ); + final Integer mappedCategoryOptionComboId = categoryOptionComboMapping.get( operand.getOptionComboId() ); if ( mappedDataElementId == null ) { - log.info( "Data element identifier refers to non-existing object: " + dataElementId ); + log.info( "Data element identifier refers to non-existing object: " + operand.getDataElementId() ); match = NULL_REPLACEMENT; } else if ( mappedCategoryOptionComboId == null ) { - log.info( "Category option combo identifer refers to non-existing object: " + categoryOptionComboId ); + log.info( "Category option combo identifer refers to non-existing object: " + operand.getOptionComboId() ); match = NULL_REPLACEMENT; } @@ -234,18 +228,11 @@ { operandsInExpression = new HashSet<Operand>(); - final Matcher matcher = getMatcher( "(\\[\\d+\\" + SEPARATOR + "\\d+\\])", expression ); + final Matcher matcher = getMatcher( FORMULA_EXPRESSION, expression ); while ( matcher.find() ) { - final Operand operand = new Operand(); - - final String match = matcher.group().replaceAll( "[\\[\\]]", "" ); - - operand.setDataElementId( Integer.parseInt( match.substring( 0, match.indexOf( SEPARATOR ) ) ) ); - operand.setOptionComboId( Integer.parseInt( match.substring( match.indexOf( SEPARATOR ) + 1, match.length() ) ) ); - - operandsInExpression.add( operand ); + operandsInExpression.add( getOperand( matcher.group() ) ); } } @@ -256,7 +243,7 @@ { StringBuffer buffer = new StringBuffer(); - final Matcher matcher = getMatcher( "\\[.+?\\" + SEPARATOR + ".+?\\]", formula ); + final Matcher matcher = getMatcher( DESCRIPTION_EXPRESSION, formula ); int dataElementId = -1; int categoryOptionComboId = -1; @@ -324,55 +311,28 @@ { buffer = new StringBuffer(); - final Matcher matcher = getMatcher( "\\[.+?\\" + SEPARATOR + ".+?\\]", formula ); - - int dataElementId = -1; - int categoryOptionComboId = -1; - - DataElement dataElement = null; - DataElementCategoryOptionCombo categoryOptionCombo = null; + final Matcher matcher = getMatcher( DESCRIPTION_EXPRESSION, formula ); while ( matcher.find() ) { String replaceString = matcher.group(); - - replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); - - final String dataElementIdString = replaceString.substring( 0, replaceString.indexOf( SEPARATOR ) ); - final String optionComboIdString = replaceString.substring( replaceString.indexOf( SEPARATOR ) + 1, replaceString.length() ); - - try - { - dataElementId = Integer.parseInt( dataElementIdString ); - } - catch ( NumberFormatException ex ) - { - throw new IllegalArgumentException( "Data element identifier must be a number: " + replaceString ); - } - - try - { - categoryOptionComboId = Integer.parseInt( optionComboIdString ); - } - catch ( NumberFormatException ex ) - { - throw new IllegalArgumentException( "Category option combo identifier must be a number: " - + replaceString ); - } - - dataElement = dataElementService.getDataElement( dataElementId ); - categoryOptionCombo = categoryOptionComboService.getDataElementCategoryOptionCombo( categoryOptionComboId ); + + final Operand operand = getOperand( replaceString ); + + final DataElement dataElement = dataElementService.getDataElement( operand.getDataElementId() ); + final DataElementCategoryOptionCombo categoryOptionCombo = + categoryOptionComboService.getDataElementCategoryOptionCombo( operand.getOptionComboId() ); if ( dataElement == null ) { throw new IllegalArgumentException( "Identifier does not reference a data element: " - + dataElementId ); + + operand.getDataElementId() ); } if ( categoryOptionCombo == null ) { throw new IllegalArgumentException( "Identifier does not reference a category option combo: " - + categoryOptionComboId ); + + operand.getOptionComboId() ); } replaceString = dataElement.getName() + SEPARATOR + categoryOptionComboService.getOptionNames( categoryOptionCombo ); @@ -411,7 +371,7 @@ } } - final Matcher matcher = getMatcher( "(\\[\\d+\\" + SEPARATOR + "\\d+\\])", expression ); + final Matcher matcher = getMatcher( FORMULA_EXPRESSION, expression ); while ( matcher.find() ) { @@ -442,7 +402,7 @@ if ( expression != null ) { - final Matcher matcher = getMatcher( "(\\[\\d+\\" + SEPARATOR + "\\d+\\])", expression ); + final Matcher matcher = getMatcher( FORMULA_EXPRESSION, expression ); buffer = new StringBuffer(); @@ -450,28 +410,16 @@ { String replaceString = matcher.group(); - replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); - - final String dataElementIdString = replaceString.substring( 0, replaceString.indexOf( SEPARATOR ) ); - final String categoryOptionComboIdString = replaceString.substring( replaceString.indexOf( SEPARATOR ) + 1, replaceString.length() ); - - final int dataElementId = Integer.parseInt( dataElementIdString ); - final int optionComboId = Integer.parseInt( categoryOptionComboIdString ); - - final DataElement dataElement = dataElementService.getDataElement( dataElementId ); - final DataElementCategoryOptionCombo categoryOptionCombo = categoryOptionComboService.getDataElementCategoryOptionCombo( optionComboId ); + final Operand operand = getOperand( replaceString ); + + final DataElement dataElement = dataElementService.getDataElement( operand.getDataElementId() ); + final DataElementCategoryOptionCombo categoryOptionCombo = + categoryOptionComboService.getDataElementCategoryOptionCombo( operand.getOptionComboId() ); final DataValue dataValue = dataValueService.getDataValue( source, dataElement, period, categoryOptionCombo ); - if ( dataValue == null ) - { - replaceString = NULL_REPLACEMENT; - } - else - { - replaceString = String.valueOf( dataValue.getValue() ); - } - + replaceString = ( dataValue == null ) ? NULL_REPLACEMENT : dataValue.getValue(); + matcher.appendReplacement( buffer, replaceString ); } @@ -491,4 +439,14 @@ return pattern.matcher( expression ); } + + private Operand getOperand( String formula ) + { + formula = formula.replaceAll( "[\\[\\]]", "" ); + + final int dataElementId = Integer.parseInt( formula.substring( 0, formula.indexOf( SEPARATOR ) ) ); + final int categoryOptionComboId = Integer.parseInt( formula.substring( formula.indexOf( SEPARATOR ) + 1, formula.length() ) ); + + return new Operand( dataElementId, categoryOptionComboId ); + } } === modified file 'dhis-2/pom.xml' --- dhis-2/pom.xml 2009-06-30 14:52:21 +0000 +++ dhis-2/pom.xml 2009-07-02 23:13:13 +0000 @@ -24,6 +24,7 @@ <module>dhis-useradminandsecurity</module> </modules> + <!-- <repositories> <repository> <id>amplecode_maven2_repo</id> @@ -31,6 +32,7 @@ <url>http://www.amplecode.org/maven2</url> </repository> </repositories> + --> <!-- <pluginRepositories> -- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription. _______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp