=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryFilter.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryFilter.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryFilter.java 2014-04-04 12:15:25 +0000 @@ -0,0 +1,140 @@ +package org.hisp.dhis.common; + +import java.util.HashMap; +import java.util.Map; + +/* + * Copyright (c) 2004-2014, 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. + */ + +/** + * @author Lars Helge Overland + */ +public class QueryFilter +{ + public static final String OPTION_SEP = ";"; + + public static final Map OPERATOR_MAP = new HashMap() { { + put( "eq", "=" ); + put( "gt", ">" ); + put( "ge", ">=" ); + put( "lt", "<" ); + put( "le", "<=" ); + put( "ne", "!=" ); + put( "like", "like" ); + put( "in", "in" ); + } }; + + protected String operator; + + protected String filter; + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + public QueryFilter() + { + } + + public QueryFilter( String operator, String filter ) + { + this.operator = operator; + this.filter = filter; + } + + // ------------------------------------------------------------------------- + // Logic + // ------------------------------------------------------------------------- + + public boolean hasFilter() + { + return operator != null && !operator.isEmpty() && filter != null && !filter.isEmpty(); + } + + public String getSqlOperator() + { + if ( operator == null ) + { + return null; + } + + return OPERATOR_MAP.get( operator.toLowerCase() ); + } + + public String getSqlFilter( String encodedFilter ) + { + if ( operator == null || encodedFilter == null ) + { + return null; + } + + if ( operator.equalsIgnoreCase( "like" ) ) + { + return "'%" + encodedFilter + "%'"; + } + else if ( operator.equalsIgnoreCase( "in" ) ) + { + String[] split = encodedFilter.split( OPTION_SEP ); + + final StringBuffer buffer = new StringBuffer( "(" ); + + for ( String el : split ) + { + buffer.append( "'" ).append( el ).append( "'," ); + } + + return buffer.deleteCharAt( buffer.length() - 1 ).append( ")" ).toString(); + } + + return "'" + encodedFilter + "'"; + } + + // ------------------------------------------------------------------------- + // Getters and setters + // ------------------------------------------------------------------------- + + public String getOperator() + { + return operator; + } + + public void setOperator( String operator ) + { + this.operator = operator; + } + + public String getFilter() + { + return filter; + } + + public void setFilter( String filter ) + { + this.filter = filter; + } +} === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java 2014-04-04 11:54:42 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java 2014-04-04 12:15:25 +0000 @@ -287,7 +287,7 @@ // Move down from end to here, to avoid duplicate level in database. - for (int i = dataApprovalLevels.size() - 1; i > index; i-- ) + for ( int i = dataApprovalLevels.size() - 1; i > index; i-- ) { update( dataApprovalLevels.get( i ), i ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/dataapproval/hibernate/DataApprovalLevel.hbm.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/dataapproval/hibernate/DataApprovalLevel.hbm.xml 2014-04-03 16:03:26 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/dataapproval/hibernate/DataApprovalLevel.hbm.xml 2014-04-04 12:15:25 +0000 @@ -21,5 +21,16 @@ + + + + + + + + + + +