=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ValidationUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ValidationUtils.java 2011-10-20 18:51:07 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ValidationUtils.java 2011-12-01 12:29:14 +0000 @@ -41,7 +41,11 @@ */ public class ValidationUtils { - private static Pattern COORDINATE_PATTERN = Pattern.compile( "\\[([+-]?\\d+\\.?\\d*),([+-]?\\d+\\.?\\d*)\\]" ); + private static Pattern POINT_PATTERN = Pattern.compile( "\\[(.+),\\s?(.+)\\]" ); + private static int LONG_MAX = 180; + private static int LONG_MIN = -180; + private static int LAT_MAX = 90; + private static int LAT_MIN = -90; /** * Validates whether an email string is valid. @@ -106,7 +110,32 @@ */ public static boolean coordinateIsValid( String coordinate ) { - return coordinate != null ? COORDINATE_PATTERN.matcher( coordinate ).matches() : false; + if ( coordinate == null || coordinate.trim().isEmpty() ) + { + return false; + } + + Matcher matcher = POINT_PATTERN.matcher( coordinate ); + + if ( !matcher.find() ) + { + return false; + } + + double longitude = 0.0; + double latitude = 0.0; + + try + { + longitude = Double.parseDouble( matcher.group( 1 ) ); + latitude = Double.parseDouble( matcher.group( 2 ) ); + } + catch ( NumberFormatException ex ) + { + return false; + } + + return longitude >= LONG_MIN && longitude <= LONG_MAX && latitude >= LAT_MIN && latitude <= LAT_MAX; } /** @@ -124,7 +153,7 @@ return null; } - Matcher matcher = COORDINATE_PATTERN.matcher( coordinate ); + Matcher matcher = POINT_PATTERN.matcher( coordinate ); return matcher.find() ? matcher.group( 1 ) : null; } @@ -144,7 +173,7 @@ return null; } - Matcher matcher = COORDINATE_PATTERN.matcher( coordinate ); + Matcher matcher = POINT_PATTERN.matcher( coordinate ); return matcher.find() ? matcher.group( 2 ) : null; } === modified file 'dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ValidationUtilsTest.java' --- dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ValidationUtilsTest.java 2011-11-14 14:48:51 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ValidationUtilsTest.java 2011-12-01 12:29:14 +0000 @@ -48,8 +48,8 @@ assertTrue( coordinateIsValid( "[+37.99034,-28.94221]" ) ); assertTrue( coordinateIsValid( "[37.99034,-28.94221]" ) ); assertTrue( coordinateIsValid( "[+37.99034,28.94221]" ) ); - assertTrue( coordinateIsValid( "[37.99034,28.94221]" ) ); - assertTrue( coordinateIsValid( "[+37,-28.94221]" ) ); + assertTrue( coordinateIsValid( "[170.99034,78.94221]" ) ); + assertTrue( coordinateIsValid( "[-167,-28.94221]" ) ); assertTrue( coordinateIsValid( "[37.99034,28]" ) ); assertFalse( coordinateIsValid( "23.34343,56.3232" ) ); @@ -60,6 +60,11 @@ assertFalse( coordinateIsValid( "[++37,-28.94221]" ) ); assertFalse( coordinateIsValid( "S-0.27726 E37.08472" ) ); assertFalse( coordinateIsValid( null ) ); + + assertFalse( coordinateIsValid( "-185.12345,45.45423" ) ); + assertFalse( coordinateIsValid( "192.56789,-45.34332" ) ); + assertFalse( coordinateIsValid( "140.34,92.23323" ) ); + assertFalse( coordinateIsValid( "123.34,-94.23323" ) ); } @Test === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/validationRules.js' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/validationRules.js 2011-10-06 18:31:41 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/validationRules.js 2011-12-01 12:29:14 +0000 @@ -77,11 +77,15 @@ "openingDate" : { "required" : true }, + "longitude" : { + "number" : true, + "min": -180, + "max": 180 + }, "latitude" : { - "number" : true - }, - "longitude" : { - "number" : true + "number" : true, + "min": -90, + "max": 90 }, "url" : { "url" : true,