=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/ListMap.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/ListMap.java 2013-02-26 18:33:01 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/ListMap.java 2012-04-03 22:10:58 +0000 @@ -37,12 +37,22 @@ public class ListMap extends HashMap> { + public ListMap() + { + super(); + } + + public ListMap( ListMap listMap ) + { + super( listMap ); + } + public List putValue( T key, V value ) { List list = this.get( key ); list = list == null ? new ArrayList() : list; list.add( value ); - this.put( key, list ); + super.put( key, list ); return null; } } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2012-12-07 21:28:50 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2012-04-03 22:10:58 +0000 @@ -63,7 +63,7 @@ final String KEY_EMAIL_USERNAME = "keyEmailUsername"; final String KEY_EMAIL_PASSWORD = "keyEmailPassword"; final String KEY_SCHEDULED_PERIOD_TYPES = "keyScheduledPeriodTypes"; - final String KEY_SCHEDULED_TASKS = "keyScheduledTasks"; + final String KEY_SCHEDULED_TASKS = "keySchedTasks"; final String KEY_ORGUNITGROUPSET_AGG_LEVEL = "orgUnitGroupSetAggregationLevel"; final String KEY_SMS_CONFIG = "SMS_CONFIG"; final String KEY_CACHE_STRATEGY = "keyCacheStrategy"; === 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 2013-03-01 17:59:05 +0000 +++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java 2012-04-03 22:10:58 +0000 @@ -66,6 +66,7 @@ import org.hisp.dhis.resourcetable.statement.CreateIndicatorGroupSetTableStatement; import org.hisp.dhis.resourcetable.statement.CreateOrganisationUnitGroupSetTableStatement; import org.hisp.dhis.sqlview.SqlViewService; +import org.springframework.transaction.annotation.Transactional; /** * @author Lars Helge Overland @@ -144,17 +145,18 @@ // All // ------------------------------------------------------------------------- + @Transactional public void generateAll() { sqlViewService.dropAllSqlViewTables(); - + + generateOrganisationUnitStructures(); generateCategoryOptionComboNames(); generateCategoryTable(); generateDataElementGroupSetTable(); generateDataElementTable(); generateIndicatorGroupSetTable(); generateOrganisationUnitGroupSetTable(); - generateOrganisationUnitStructures(); generatePeriodTable(); sqlViewService.createAllViewTables(); @@ -223,6 +225,11 @@ BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( GenericBatchHandler.class ). setTableName( ResourceTableStore.TABLE_NAME_CATEGORY_OPTION_COMBO_NAME ).init(); + + //TODO + + + for ( DataElementCategoryOptionCombo combo : combos ) { final List values = new ArrayList(); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/DefaultSchedulingManager.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/DefaultSchedulingManager.java 2013-03-04 20:41:25 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/DefaultSchedulingManager.java 2012-04-03 22:10:58 +0000 @@ -87,9 +87,9 @@ } } - public void scheduleTasks( Map keyCronMap ) + public void scheduleTasks( ListMap cronKeyMap ) { - systemSettingManager.saveSystemSetting( KEY_SCHEDULED_TASKS, new HashMap( keyCronMap ) ); + systemSettingManager.saveSystemSetting( KEY_SCHEDULED_TASKS, new ListMap( cronKeyMap ) ); scheduleTasks(); } @@ -101,42 +101,10 @@ scheduler.stopAllTasks(); } - public void executeTasks() - { - ListMap cronKeyMap = getCronKeyMap(); - - for ( String cron : cronKeyMap.keySet() ) - { - ScheduledTasks scheduledTasks = getScheduledTasksForCron( cron, cronKeyMap ); - - if ( !scheduledTasks.isEmpty() ) - { - scheduler.executeTask( scheduledTasks ); - } - } - } - + @SuppressWarnings("unchecked") public ListMap getCronKeyMap() { - Map keyCronMap = getKeyCronMap(); - - ListMap cronKeyMap = new ListMap(); - - for ( String key : keyCronMap.keySet() ) - { - String cron = keyCronMap.get( key ); - - cronKeyMap.putValue( cron, key ); - } - - return cronKeyMap; - } - - public boolean isScheduled( String key ) - { - Map keyCronMap = getKeyCronMap(); - - return keyCronMap.get( key ) != null; + return (ListMap) systemSettingManager.getSystemSetting( KEY_SCHEDULED_TASKS, new ListMap() ); } public String getTaskStatus() @@ -172,13 +140,4 @@ return scheduledTasks; } - - /** - * Returns a mapping between task keys and cron expressions. - */ - @SuppressWarnings("unchecked") - private Map getKeyCronMap() - { - return (Map) systemSettingManager.getSystemSetting( KEY_SCHEDULED_TASKS, new HashMap() ); - } } === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/SchedulingManager.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/SchedulingManager.java 2013-03-04 20:41:25 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/SchedulingManager.java 2012-04-03 22:10:58 +0000 @@ -27,8 +27,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.util.Map; - import org.hisp.dhis.common.ListMap; /** @@ -51,11 +49,9 @@ /** * Schedule the given tasks. * - * @param keyCronMap map of tasks to be scheduled. The map key is the key of - * the task, i.e. the task bean identifier. The map value is the cron - * expression to use when scheduling the task. + * @param cronKeyMap a mapping of cron expressions and task keys. */ - void scheduleTasks( Map keyCronMap ); + void scheduleTasks( ListMap cronKeyMap ); /** * Stop all tasks. @@ -63,18 +59,11 @@ void stopTasks(); /** - * Execute all tasks immediately. - */ - void executeTasks(); - - /** * Get a mapping of cron expressions and list of task keys for all scheduled * tasks. */ ListMap getCronKeyMap(); - boolean isScheduled( String key ); - /** * Gets the task status. Can be STATUS_RUNNING, STATUS_DONE, STATUS_STOPPED, * STATUS_NOT_STARTED. === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/scheduling/SchedulingManagerTest.java' --- dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/scheduling/SchedulingManagerTest.java 2013-03-04 20:41:25 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/scheduling/SchedulingManagerTest.java 2012-04-03 22:10:58 +0000 @@ -30,15 +30,11 @@ import static org.hisp.dhis.scheduling.SchedulingManager.TASK_ANALYTICS_ALL; import static org.hisp.dhis.scheduling.SchedulingManager.TASK_DATAMART_LAST_6_MONTHS; import static org.hisp.dhis.scheduling.SchedulingManager.TASK_RESOURCE_TABLE; -import static org.hisp.dhis.system.scheduling.Scheduler.CRON_DAILY_0AM; import static org.hisp.dhis.system.scheduling.Scheduler.CRON_DAILY_0AM_EXCEPT_SUNDAY; +import static org.hisp.dhis.system.scheduling.Scheduler.CRON_WEEKLY_SUNDAY_0AM; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import java.util.HashMap; -import java.util.Map; - import org.hisp.dhis.DhisSpringTest; import org.hisp.dhis.common.ListMap; import org.hisp.dhis.system.scheduling.Scheduler; @@ -57,20 +53,20 @@ @Test public void testScheduleTasks() { - Map keyCronMap = new HashMap(); - keyCronMap.put( TASK_RESOURCE_TABLE, CRON_DAILY_0AM ); - keyCronMap.put( TASK_ANALYTICS_ALL, CRON_DAILY_0AM ); - keyCronMap.put( TASK_DATAMART_LAST_6_MONTHS, CRON_DAILY_0AM_EXCEPT_SUNDAY ); + ListMap cronKeyMap = new ListMap(); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_RESOURCE_TABLE ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_ANALYTICS_ALL ); + cronKeyMap.putValue( CRON_WEEKLY_SUNDAY_0AM, TASK_DATAMART_LAST_6_MONTHS ); - schedulingManager.scheduleTasks( keyCronMap ); + schedulingManager.scheduleTasks( cronKeyMap ); - ListMap cronKeyMap = schedulingManager.getCronKeyMap(); + cronKeyMap = schedulingManager.getCronKeyMap(); assertEquals( 2, cronKeyMap.size() ); - assertTrue( cronKeyMap.containsKey( CRON_DAILY_0AM ) ); assertTrue( cronKeyMap.containsKey( CRON_DAILY_0AM_EXCEPT_SUNDAY ) ); - assertEquals( 2, cronKeyMap.get( CRON_DAILY_0AM ).size() ); - assertEquals( 1, cronKeyMap.get( CRON_DAILY_0AM_EXCEPT_SUNDAY ).size() ); + assertTrue( cronKeyMap.containsKey( CRON_WEEKLY_SUNDAY_0AM ) ); + assertEquals( 2, cronKeyMap.get( CRON_DAILY_0AM_EXCEPT_SUNDAY ).size() ); + assertEquals( 1, cronKeyMap.get( CRON_WEEKLY_SUNDAY_0AM ).size() ); assertEquals( Scheduler.STATUS_RUNNING, schedulingManager.getTaskStatus() ); } @@ -78,13 +74,13 @@ @Test public void testStopTasks() { - Map keyCronMap = new HashMap(); - keyCronMap.put( TASK_RESOURCE_TABLE, CRON_DAILY_0AM ); - keyCronMap.put( TASK_ANALYTICS_ALL, CRON_DAILY_0AM ); + ListMap cronKeyMap = new ListMap(); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_RESOURCE_TABLE ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_ANALYTICS_ALL ); assertEquals( Scheduler.STATUS_NOT_STARTED, schedulingManager.getTaskStatus() ); - schedulingManager.scheduleTasks( keyCronMap ); + schedulingManager.scheduleTasks( cronKeyMap ); assertEquals( Scheduler.STATUS_RUNNING, schedulingManager.getTaskStatus() ); @@ -92,17 +88,4 @@ assertEquals( Scheduler.STATUS_NOT_STARTED, schedulingManager.getTaskStatus() ); } - - @Test - public void testIsScheduled() - { - Map keyCronMap = new HashMap(); - keyCronMap.put( TASK_RESOURCE_TABLE, CRON_DAILY_0AM ); - keyCronMap.put( TASK_ANALYTICS_ALL, CRON_DAILY_0AM ); - - schedulingManager.scheduleTasks( keyCronMap ); - - assertTrue( schedulingManager.isScheduled( TASK_RESOURCE_TABLE ) ); - assertFalse( schedulingManager.isScheduled( TASK_DATAMART_LAST_6_MONTHS ) ); - } } === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CollectionUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CollectionUtils.java 2013-01-14 17:31:23 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/CollectionUtils.java 2012-04-03 22:10:58 +0000 @@ -77,4 +77,9 @@ set1.retainAll( new HashSet( c2 ) ); return set1; } + + public static Collection emptyIfNull( Collection collection ) + { + return collection != null ? collection : new HashSet(); + } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/scheduling/ScheduleTasksAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/scheduling/ScheduleTasksAction.java 2012-04-03 22:01:42 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/scheduling/ScheduleTasksAction.java 2012-04-03 22:10:58 +0000 @@ -40,13 +40,14 @@ import static org.hisp.dhis.system.scheduling.Scheduler.CRON_DAILY_0AM_EXCEPT_SUNDAY; import static org.hisp.dhis.system.scheduling.Scheduler.CRON_WEEKLY_SUNDAY_0AM; import static org.hisp.dhis.system.scheduling.Scheduler.STATUS_RUNNING; +import static org.hisp.dhis.system.util.CollectionUtils.emptyIfNull; -import java.util.HashMap; +import java.util.Collection; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; +import org.hisp.dhis.common.ListMap; import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.scheduling.SchedulingManager; @@ -94,13 +95,6 @@ // ------------------------------------------------------------------------- // Input // ------------------------------------------------------------------------- - - private boolean execute; - - public void setExecute( boolean execute ) - { - this.execute = execute; - } private boolean schedule; @@ -201,11 +195,7 @@ @SuppressWarnings("unchecked") public String execute() { - if ( execute ) - { - schedulingManager.executeTasks(); - } - else if ( schedule ) + if ( schedule ) { systemSettingManager.saveSystemSetting( KEY_SCHEDULED_PERIOD_TYPES, (HashSet) scheduledPeriodTypes ); systemSettingManager.saveSystemSetting( KEY_ORGUNITGROUPSET_AGG_LEVEL, orgUnitGroupSetAggLevel ); @@ -216,16 +206,16 @@ } else { - Map keyCronMap = new HashMap(); - + ListMap cronKeyMap = new ListMap(); + // ------------------------------------------------------------- // Resource tables // ------------------------------------------------------------- if ( STRATEGY_ALL_DAILY.equals( resourceTableStrategy ) ) { - keyCronMap.put( TASK_RESOURCE_TABLE, CRON_DAILY_0AM_EXCEPT_SUNDAY ); - keyCronMap.put( TASK_RESOURCE_TABLE, CRON_WEEKLY_SUNDAY_0AM ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_RESOURCE_TABLE ); + cronKeyMap.putValue( CRON_WEEKLY_SUNDAY_0AM, TASK_RESOURCE_TABLE ); } // ------------------------------------------------------------- @@ -234,13 +224,13 @@ if ( STRATEGY_ALL_DAILY.equals( analyticsStrategy ) ) { - keyCronMap.put( TASK_ANALYTICS_ALL, CRON_DAILY_0AM_EXCEPT_SUNDAY ); - keyCronMap.put( TASK_ANALYTICS_ALL, CRON_WEEKLY_SUNDAY_0AM ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_ANALYTICS_ALL ); + cronKeyMap.putValue( CRON_WEEKLY_SUNDAY_0AM, TASK_ANALYTICS_ALL ); } else if ( STRATEGY_LAST_3_YEARS_DAILY.equals( analyticsStrategy ) ) { - keyCronMap.put( TASK_ANALYTICS_LAST_3_YEARS, CRON_DAILY_0AM_EXCEPT_SUNDAY ); - keyCronMap.put( TASK_ANALYTICS_LAST_3_YEARS, CRON_WEEKLY_SUNDAY_0AM ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_ANALYTICS_LAST_3_YEARS ); + cronKeyMap.putValue( CRON_WEEKLY_SUNDAY_0AM, TASK_ANALYTICS_LAST_3_YEARS ); } // ------------------------------------------------------------- @@ -249,25 +239,27 @@ if ( STRATEGY_LAST_12_DAILY.equals( dataMartStrategy ) ) { - keyCronMap.put( TASK_DATAMART_LAST_12_MONTHS, CRON_DAILY_0AM_EXCEPT_SUNDAY ); - keyCronMap.put( TASK_DATAMART_LAST_12_MONTHS, CRON_WEEKLY_SUNDAY_0AM ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_DATAMART_LAST_12_MONTHS ); + cronKeyMap.putValue( CRON_WEEKLY_SUNDAY_0AM, TASK_DATAMART_LAST_12_MONTHS ); } else if ( STRATEGY_LAST_6_DAILY_6_TO_12_WEEKLY.equals( dataMartStrategy ) ) { - keyCronMap.put( TASK_DATAMART_LAST_6_MONTHS, CRON_DAILY_0AM_EXCEPT_SUNDAY ); - keyCronMap.put( TASK_DATAMART_FROM_6_TO_12_MONTS, CRON_WEEKLY_SUNDAY_0AM ); + cronKeyMap.putValue( CRON_DAILY_0AM_EXCEPT_SUNDAY, TASK_DATAMART_LAST_6_MONTHS ); + cronKeyMap.putValue( CRON_WEEKLY_SUNDAY_0AM, TASK_DATAMART_FROM_6_TO_12_MONTS ); } - schedulingManager.scheduleTasks( keyCronMap ); + schedulingManager.scheduleTasks( cronKeyMap ); } } else { + Collection keys = emptyIfNull( schedulingManager.getCronKeyMap().get( CRON_DAILY_0AM_EXCEPT_SUNDAY ) ); + // ----------------------------------------------------------------- // Resource tables // ----------------------------------------------------------------- - if ( schedulingManager.isScheduled( TASK_RESOURCE_TABLE ) ) + if ( keys.contains( TASK_RESOURCE_TABLE ) ) { resourceTableStrategy = STRATEGY_ALL_DAILY; } @@ -276,11 +268,11 @@ // Analytics // ----------------------------------------------------------------- - if ( schedulingManager.isScheduled( TASK_ANALYTICS_ALL ) ) + if ( keys.contains( TASK_ANALYTICS_ALL ) ) { analyticsStrategy = STRATEGY_ALL_DAILY; } - else if ( schedulingManager.isScheduled( TASK_ANALYTICS_LAST_3_YEARS ) ) + else if ( keys.contains( TASK_ANALYTICS_LAST_3_YEARS ) ) { analyticsStrategy = STRATEGY_LAST_3_YEARS_DAILY; } @@ -289,11 +281,11 @@ // Data mart // ----------------------------------------------------------------- - if ( schedulingManager.isScheduled( TASK_DATAMART_LAST_12_MONTHS ) ) + if ( keys.contains( TASK_DATAMART_LAST_12_MONTHS ) ) { dataMartStrategy = STRATEGY_LAST_12_DAILY; } - else if ( schedulingManager.isScheduled( TASK_DATAMART_LAST_6_MONTHS ) ) + else if ( keys.contains( TASK_DATAMART_LAST_6_MONTHS ) ) { dataMartStrategy = STRATEGY_LAST_6_DAILY_6_TO_12_WEEKLY; } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/scheduling.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/scheduling.js 2012-05-08 15:55:59 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/scheduling.js 2012-04-03 22:10:58 +0000 @@ -4,12 +4,10 @@ if ( $( '#isRunning' ).val() == 'true' ) { $( '.scheduling' ).attr( 'disabled', 'disabled' ); - $( '#executeButton' ).removeAttr( 'disabled' ); } else { $( '.scheduling' ).removeAttr( 'disabled' ); - $( '#executeButton' ).attr( 'disabled', 'disabled' ); } } ); @@ -18,13 +16,3 @@ $( '.scheduling' ).removeAttr( 'disabled' ); $( '#schedulingForm' ).submit(); } - -function executeTasks() -{ - var ok = confirm( i18n_execute_tasks_confirmation ); - - if ( ok ) - { - $.get( 'scheduleTasks.action?execute=true' ); - } -} \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/viewScheduledTasks.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/viewScheduledTasks.vm 2013-03-04 20:41:25 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/viewScheduledTasks.vm 2012-04-03 22:10:58 +0000 @@ -1,6 +1,3 @@ -

$i18n.getString( "scheduling_management" ) #openHelp( "scheduling" )

@@ -17,7 +14,7 @@
@@ -80,7 +77,6 @@ value="$i18n.getString( 'start' )" #end /> - === modified file 'dhis-2/dhis-web/pom.xml' --- dhis-2/dhis-web/pom.xml 2013-01-14 12:08:30 +0000 +++ dhis-2/dhis-web/pom.xml 2012-04-03 22:10:58 +0000 @@ -14,6 +14,9 @@ dhis-web-commons dhis-web-commons-resources + dhis-web-api-mobile + dhis-web-api + dhis-web-api-fred dhis-web-maintenance dhis-web-dataentry dhis-web-importexport @@ -24,13 +27,10 @@ dhis-web-pivot dhis-web-dashboard-integration dhis-web-caseentry - dhis-web-api - dhis-web-api-fred - dhis-web-api-mobile dhis-web-light dhis-web-mobile + dhis-web-sms dhis-web-portal - dhis-web-sms