=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java 2011-04-23 18:52:44 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java 2011-05-11 01:04:56 +0000 @@ -28,6 +28,7 @@ */ import java.util.Collection; +import java.util.HashSet; import org.amplecode.quick.StatementHolder; import org.amplecode.quick.StatementManager; @@ -49,10 +50,12 @@ /** * @author Kristian Nordal - * @version $Id: HibernateOrganisationUnitStore.java 6251 2008-11-10 14:37:05Z larshelg $ + * @version $Id: HibernateOrganisationUnitStore.java 6251 2008-11-10 14:37:05Z + * larshelg $ */ public class HibernateOrganisationUnitStore - extends HibernateGenericStore implements OrganisationUnitStore + extends HibernateGenericStore + implements OrganisationUnitStore { // ------------------------------------------------------------------------- // Dependencies @@ -71,14 +74,14 @@ { this.jdbcTemplate = jdbcTemplate; } - + // ------------------------------------------------------------------------- // OrganisationUnit // ------------------------------------------------------------------------- - + public OrganisationUnit getOrganisationUnitByNameIgnoreCase( String name ) { - Criteria criteria = sessionFactory.getCurrentSession().createCriteria( OrganisationUnit.class ); + Criteria criteria = sessionFactory.getCurrentSession().createCriteria( OrganisationUnit.class ); criteria.add( Restrictions.eq( "name", name ).ignoreCase() ); return (OrganisationUnit) criteria.uniqueResult(); } @@ -95,62 +98,63 @@ public Collection getOrganisationUnitsWithoutGroups() { String hql = "from OrganisationUnit o where o.groups.size = 0"; - + return sessionFactory.getCurrentSession().createQuery( hql ).list(); } @SuppressWarnings( "unchecked" ) - public Collection getOrganisationUnitsByNameAndGroups( String name, Collection groups, boolean limit ) + public Collection getOrganisationUnitsByNameAndGroups( String name, + Collection groups, boolean limit ) { boolean first = true; - + name = StringUtils.trimToNull( name ); groups = CollectionUtils.isEmpty( groups ) ? null : groups; - + StringBuilder hql = new StringBuilder( "from OrganisationUnit o" ); - + if ( name != null ) { - hql.append( " where lower(name) like :name" ); - + hql.append( " where lower(name) like :name" ); + first = false; } - + if ( groups != null ) { for ( int i = 0; i < groups.size(); i++ ) { String clause = first ? " where" : " and"; - + hql.append( clause ).append( " :g" ).append( i ).append( " in elements( o.groups )" ); - + first = false; } } Query query = sessionFactory.getCurrentSession().createQuery( hql.toString() ); - + if ( name != null ) { query.setString( "name", "%" + name.toLowerCase() + "%" ); } - + if ( groups != null ) { int i = 0; - + for ( OrganisationUnitGroup group : groups ) { query.setEntity( "g" + i++, group ); } } - + if ( limit ) { query.setMaxResults( OrganisationUnitService.MAX_LIMIT ); } - - return query.list(); + + return query.list(); } // ------------------------------------------------------------------------- @@ -160,22 +164,20 @@ public OrganisationUnitHierarchy getOrganisationUnitHierarchy() { final String sql = "SELECT organisationunitid, parentid FROM organisationunit"; - + return new OrganisationUnitHierarchy( jdbcTemplate.query( sql, new OrganisationUnitRelationshipRowMapper() ) ); } - + public void updateOrganisationUnitParent( int organisationUnitId, int parentId ) { StatementHolder holder = statementManager.getHolder(); - - final String sql = - "UPDATE organisationunit " + - "SET parentid='" + parentId + "' " + - "WHERE organisationunitid='" + organisationUnitId + "'"; - + + final String sql = "UPDATE organisationunit " + "SET parentid='" + parentId + "' " + + "WHERE organisationunitid='" + organisationUnitId + "'"; + holder.executeUpdate( sql ); } - + // ------------------------------------------------------------------------- // OrganisationUnitLevel // ------------------------------------------------------------------------- @@ -203,7 +205,7 @@ public void deleteOrganisationUnitLevels() { String hql = "delete from OrganisationUnitLevel"; - + sessionFactory.getCurrentSession().createQuery( hql ).executeUpdate(); } @@ -216,14 +218,14 @@ public OrganisationUnitLevel getOrganisationUnitLevelByLevel( int level ) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria( OrganisationUnitLevel.class ); - + return (OrganisationUnitLevel) criteria.add( Restrictions.eq( "level", level ) ).uniqueResult(); } public OrganisationUnitLevel getOrganisationUnitLevelByName( String name ) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria( OrganisationUnitLevel.class ); - + return (OrganisationUnitLevel) criteria.add( Restrictions.eq( "name", name ) ).uniqueResult(); } @@ -238,27 +240,38 @@ @Override public void update( Collection units ) { - String ids = ""; + Collection unitIds = new HashSet(); + for ( OrganisationUnit orgunit : units ) { - ids += orgunit.getId()+", "; - } - ids += "0"; - - final String sqlUpdateTrue = "UPDATE organisationunit SET hasPatients=true WHERE organisationunitid in ( " + ids +" );"; - - jdbcTemplate.execute( sqlUpdateTrue ); - - final String sqlUpdateFalse = "UPDATE organisationunit SET hasPatients=false WHERE organisationunitid not in ( " + ids +" );"; - - jdbcTemplate.execute( sqlUpdateFalse ); - } - - @SuppressWarnings("unchecked") + unitIds.add( orgunit.getId() ); + } + + if ( unitIds.size() > 0 ) + { + String sql = "update OrganisationUnit set hasPatients=true where organisationunitid in (:unitIds)"; + Query query = sessionFactory.getCurrentSession().createQuery( sql ); + query.setParameterList( "unitIds", unitIds ); + query.executeUpdate(); + + sql = "UPDATE OrganisationUnit SET hasPatients=false WHERE organisationunitid not in ( :unitIds )"; + query = sessionFactory.getCurrentSession().createQuery( sql ); + query.setParameterList( "unitIds", unitIds ); + query.executeUpdate(); + } + else + { + String sql = "update OrganisationUnit set hasPatients=false"; + Query query = sessionFactory.getCurrentSession().createQuery( sql ); + query.executeUpdate(); + } + } + + @SuppressWarnings( "unchecked" ) public Collection get( Boolean hasPatients ) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria( OrganisationUnit.class ); - + return criteria.add( Restrictions.eq( "hasPatients", hasPatients ) ).list(); } }