=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataapproval/DataApprovalLevelService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataapproval/DataApprovalLevelService.java 2014-10-23 08:30:41 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataapproval/DataApprovalLevelService.java 2014-10-24 11:45:30 +0000 @@ -117,6 +117,8 @@ */ List getAllDataApprovalLevels(); + Map getDataApprovalLevelMap(); + List getUserDataApprovalLevels(); /** === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodType.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodType.java 2014-09-01 06:16:29 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodType.java 2014-10-24 11:45:30 +0000 @@ -61,7 +61,8 @@ public abstract class PeriodType implements Serializable { - // cache for speeding up period lookup, uses calendar.name() + periodType.getName() + date.getTime() as key + // Cache for period lookup, uses calendar.name() + periodType.getName() + date.getTime() as key + private static Cache periodCache = CacheBuilder.newBuilder() .expireAfterAccess( 5, TimeUnit.MINUTES ) .initialCapacity( 10000 ) === 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-10-24 10:49:02 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalLevelService.java 2014-10-24 11:45:30 +0000 @@ -36,7 +36,10 @@ import java.util.Map; import java.util.Set; +import com.google.common.base.Function; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + import org.apache.commons.collections.CollectionUtils; import org.hisp.dhis.dataelement.CategoryOptionGroup; import org.hisp.dhis.dataelement.CategoryOptionGroupSet; @@ -268,6 +271,19 @@ return dataApprovalLevels; } + + public Map getDataApprovalLevelMap() + { + List levels = dataApprovalLevelStore.getAllDataApprovalLevels(); + + return Maps.uniqueIndex( levels, new Function() + { + public Integer apply( DataApprovalLevel level ) + { + return level.getLevel(); + } + } ); + } @Override public List getUserDataApprovalLevels() === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalService.java 2014-10-24 10:44:54 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/DefaultDataApprovalService.java 2014-10-24 11:45:30 +0000 @@ -28,6 +28,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.system.util.CollectionUtils.asSet; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hisp.dhis.dataapproval.exceptions.DataApprovalException; @@ -60,17 +71,6 @@ import org.hisp.dhis.user.User; import org.springframework.transaction.annotation.Transactional; -import static org.hisp.dhis.system.util.CollectionUtils.asSet; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * @author Jim Grace */ === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/hibernate/HibernateDataApprovalStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/hibernate/HibernateDataApprovalStore.java 2014-10-24 10:44:54 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataapproval/hibernate/HibernateDataApprovalStore.java 2014-10-24 11:45:30 +0000 @@ -30,6 +30,7 @@ import java.util.Date; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.hibernate.Criteria; @@ -243,6 +244,8 @@ DataElementCategoryOptionCombo defaultOptionCombo = categoryService.getDefaultDataElementCategoryOptionCombo(); + Map levelMap = dataApprovalLevelService.getDataApprovalLevelMap(); + Set userDataApprovals = new HashSet<>(); while ( rowSet.next() ) @@ -264,7 +267,7 @@ DataElementCategoryOptionCombo attributeOptionCombo = categoryService.getDataElementCategoryOptionCombo( attributeOptionComboId ); Period period = periodService.getPeriod( periodId ); - DataApprovalLevel dataApprovalLevel = ( level == null ? null : dataApprovalLevelService.getDataApprovalLevelByLevelNumber( level ) ); + DataApprovalLevel dataApprovalLevel = ( level == null ? null : levelMap.get( level ) ); OrganisationUnit orgUnit = ( orgUnitId == null ? null : organisationUnitService.getOrganisationUnit( orgUnitId ) ); //TODO: currently special cased for PEFPAR's requirements. Can we make it more generic?