dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #03397
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 1142: Added database encoding of column names for the exclusive orgunit groupset resource table.
------------------------------------------------------------
revno: 1142
committer: Lars Helge Oeverland larshelge@xxxxxxxxx
branch nick: trunk
timestamp: Mon 2009-11-30 16:32:55 +0100
message:
Added database encoding of column names for the exclusive orgunit groupset resource table.
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java
dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java
dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/statement/CreateExclusiveGroupSetTableStatement.java
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CodecUtils.java
--
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.
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2009-11-24 11:01:39 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2009-11-30 15:32:55 +0000
@@ -858,9 +858,8 @@
/**
* Database encodes the argument string. Remove non-character data from the
- * string, prefixes the string if it starts with a numeric charater and
+ * string, prefixes the string if it starts with a numeric character and
* truncates the string if it is longer than 255 characters.
- *
*/
private String databaseEncode( String string )
{
=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java 2009-10-18 22:44:41 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java 2009-11-30 15:32:55 +0000
@@ -224,7 +224,6 @@
for ( DataElementCategoryOptionCombo combo : combos )
{
-
DataElementCategoryOptionComboName entry = new DataElementCategoryOptionComboName( combo.getId(), combo
.getName() );
=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/statement/CreateExclusiveGroupSetTableStatement.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/statement/CreateExclusiveGroupSetTableStatement.java 2009-06-14 19:43:19 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/statement/CreateExclusiveGroupSetTableStatement.java 2009-11-30 15:32:55 +0000
@@ -31,6 +31,7 @@
import org.amplecode.quick.Statement;
import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
+import org.hisp.dhis.system.util.CodecUtils;
/**
* @author Lars Helge Overland
@@ -60,7 +61,7 @@
for ( OrganisationUnitGroupSet groupSet : groupSets )
{
- buffer.append( groupSet.getName() + SPACE + LONG_TEXT_COLUMN_TYPE + SEPARATOR );
+ buffer.append( CodecUtils.databaseEncode( groupSet.getName() ) + SPACE + LONG_TEXT_COLUMN_TYPE + SEPARATOR );
}
buffer.append( "PRIMARY KEY ( organisationunitid ) )" );
=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CodecUtils.java'
--- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CodecUtils.java 2009-11-21 16:22:30 +0000
+++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CodecUtils.java 2009-11-30 15:32:55 +0000
@@ -28,6 +28,8 @@
*/
import java.io.UnsupportedEncodingException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.logging.Log;
@@ -42,8 +44,10 @@
private static final Log log = LogFactory.getLog( CodecUtils.class );
private static final String CHARSET = "8859_1";
-
private static final Base64 codec = new Base64();
+ private static final String EMPTY_REPLACEMENT = "_";
+ private static final String REGEX_NUMERIC = "([0-9]*)";
+ private static final String SEPARATOR = "_";
/**
* Encrypts a string with Base64 encoding.
@@ -96,23 +100,22 @@
int b, sumb = 0;
for ( int i = 0, more = -1; i < l; i++ )
{
- /* Get next byte b from URL segment s */
switch ( ch = s.charAt( i ) )
{
- case '%':
- ch = s.charAt( ++i );
- int hb = (Character.isDigit( (char) ch ) ? ch - '0' : 10 + Character.toLowerCase( (char) ch ) - 'a') & 0xF;
- ch = s.charAt( ++i );
- int lb = (Character.isDigit( (char) ch ) ? ch - '0' : 10 + Character.toLowerCase( (char) ch ) - 'a') & 0xF;
- b = (hb << 4) | lb;
- break;
- case '+':
- b = ' ';
- break;
- default:
- b = ch;
+ case '%':
+ ch = s.charAt( ++i );
+ int hb = (Character.isDigit( (char) ch ) ? ch - '0' : 10 + Character.toLowerCase( (char) ch ) - 'a') & 0xF;
+ ch = s.charAt( ++i );
+ int lb = (Character.isDigit( (char) ch ) ? ch - '0' : 10 + Character.toLowerCase( (char) ch ) - 'a') & 0xF;
+ b = (hb << 4) | lb;
+ break;
+ case '+':
+ b = ' ';
+ break;
+ default:
+ b = ch;
}
- /* Decode byte b as UTF-8, sumb collects incomplete chars */
+
if ( (b & 0xc0) == 0x80 )
{ // 10xxxxxx (continuation byte)
sumb = (sumb << 6) | (b & 0x3f); // Add 6 bits to sumb
@@ -148,9 +151,62 @@
sumb = b & 0x01;
more = 5; // Expect 5 more bytes
}
- /* We don't test if the UTF-8 encoding is well-formed */
}
return sbuf.toString();
}
+
+ /**
+ * Database encodes the argument string. Remove non-character data from the
+ * string, prefixes the string if it starts with a numeric character and
+ * truncates the string if it is longer than 255 characters.
+ *
+ * @param string the string to encode.
+ */
+ public static String databaseEncode( String string )
+ {
+ if ( string != null )
+ {
+ string = string.toLowerCase();
+
+ string = string.replaceAll( " ", EMPTY_REPLACEMENT );
+ string = string.replaceAll( "<", EMPTY_REPLACEMENT + "lt" + EMPTY_REPLACEMENT );
+ string = string.replaceAll( ">", EMPTY_REPLACEMENT + "gt" + EMPTY_REPLACEMENT );
+
+ StringBuffer buffer = new StringBuffer();
+
+ Pattern pattern = Pattern.compile( "[a-zA-Z0-9_]" );
+
+ Matcher matcher = pattern.matcher( string );
+
+ while ( matcher.find() )
+ {
+ buffer.append( matcher.group() );
+ }
+
+ string = buffer.toString();
+
+ string = string.replaceAll( EMPTY_REPLACEMENT + "+", EMPTY_REPLACEMENT );
+
+ // -----------------------------------------------------------------
+ // Cannot start with numeric character
+ // -----------------------------------------------------------------
+
+ if ( string.length() > 0 && string.substring( 0, 1 ).matches( REGEX_NUMERIC ) )
+ {
+ string = SEPARATOR + string;
+ }
+
+ // -----------------------------------------------------------------
+ // Cannot be longer than 255 characters
+ // -----------------------------------------------------------------
+
+ if ( string.length() > 255 )
+ {
+ string = string.substring( 0, 255 );
+ }
+ }
+
+ return string;
+ }
}