← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 11889: Resource tables, using web api resource, removed action class variant

 

------------------------------------------------------------
revno: 11889
committer: Lars Helge Øverland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2013-09-03 21:11:14 +0200
message:
  Resource tables, using web api resource, removed action class variant
removed:
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java
modified:
  dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ResourceTableController.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/struts.xml
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/resourceTable.js
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/resourceTableForm.vm


--
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-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-09-01 18:30:05 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java	2013-09-03 19:11:14 +0000
@@ -177,6 +177,7 @@
         log.info( "Data element category option combo table generated" );
         
         sqlViewService.createAllViewTables();
+        log.info( "Sql views created" );
     }
     
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ResourceTableController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ResourceTableController.java	2013-08-23 16:00:30 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ResourceTableController.java	2013-09-03 19:11:14 +0000
@@ -35,7 +35,10 @@
 import org.hisp.dhis.api.utils.ContextUtils;
 import org.hisp.dhis.resourcetable.scheduling.ResourceTableTask;
 import org.hisp.dhis.scheduling.DataMartTask;
+import org.hisp.dhis.scheduling.TaskCategory;
+import org.hisp.dhis.scheduling.TaskId;
 import org.hisp.dhis.system.scheduling.Scheduler;
+import org.hisp.dhis.user.CurrentUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -63,10 +66,17 @@
     @Autowired
     private Scheduler scheduler;
     
+    @Autowired
+    private CurrentUserService currentUserService;
+    
+    //TODO make tasks prototypes to avoid potential concurrency issues?
+    
     @RequestMapping( value = "/analytics", method = RequestMethod.PUT )
     @PreAuthorize( "hasRole('ALL') or hasRole('F_DATA_MART_ADMIN')" )
     public void analytics( HttpServletResponse response )
     {
+        analyticsTableTask.setTaskId( new TaskId( TaskCategory.DATAMART, currentUserService.getCurrentUser() ) );
+        
         scheduler.executeTask( analyticsTableTask );
         
         ContextUtils.okResponse( response, "Initiated analytics table update" );
@@ -76,6 +86,8 @@
     @PreAuthorize( "hasRole('ALL') or hasRole('F_DATA_MART_ADMIN')" )
     public void data( HttpServletResponse response )
     {
+        dataMartTask.setTaskId( new TaskId( TaskCategory.DATAMART, currentUserService.getCurrentUser() ) );
+        
         scheduler.executeTask( dataMartTask );
         
         ContextUtils.okResponse( response, "Initiated data mart update" );
@@ -85,6 +97,8 @@
     @PreAuthorize( "hasRole('ALL') or hasRole('F_PERFORM_MAINTENANCE')" )
     public void resourceTables( HttpServletResponse response )
     {
+        resourceTableTask.setTaskId( new TaskId( TaskCategory.RESOURCETABLE_UPDATE, currentUserService.getCurrentUser() ) );
+        
         scheduler.executeTask( resourceTableTask );
         
         ContextUtils.okResponse( response, "Initiated resource table update" );

=== removed directory 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable'
=== removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java	2013-08-23 16:05:01 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/resourcetable/GenerateResourceTableAction.java	1970-01-01 00:00:00 +0000
@@ -1,212 +0,0 @@
-package org.hisp.dhis.dataadmin.action.resourcetable;
-
-/*
- * Copyright (c) 2004-2013, 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.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hisp.dhis.resourcetable.ResourceTableService;
-import org.hisp.dhis.sqlview.SqlViewService;
-import org.hisp.dhis.user.CurrentUserService;
-
-/**
- * @author Lars Helge Overland
- * @version $Id$
- */
-public class GenerateResourceTableAction
-    implements Action
-{
-    private static final Log log = LogFactory.getLog( GenerateResourceTableAction.class );
-
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private SqlViewService sqlViewService;
-
-    public void setSqlViewService( SqlViewService sqlViewService )
-    {
-        this.sqlViewService = sqlViewService;
-    }
-
-    private ResourceTableService resourceTableService;
-
-    public void setResourceTableService( ResourceTableService resourceTableService )
-    {
-        this.resourceTableService = resourceTableService;
-    }
-
-    private CurrentUserService currentUserService;
-
-    public void setCurrentUserService( CurrentUserService currentUserService )
-    {
-        this.currentUserService = currentUserService;
-    }
-
-    // -------------------------------------------------------------------------
-    // Input & Output
-    // -------------------------------------------------------------------------
-
-    private boolean organisationUnit;
-
-    public void setOrganisationUnit( boolean organisationUnit )
-    {
-        this.organisationUnit = organisationUnit;
-    }
-
-    private boolean dataElementGroupSetStructure;
-
-    public void setDataElementGroupSetStructure( boolean dataElementGroupSetStructure )
-    {
-        this.dataElementGroupSetStructure = dataElementGroupSetStructure;
-    }
-
-    private boolean indicatorGroupSetStructure;
-
-    public void setIndicatorGroupSetStructure( boolean indicatorGroupSetStructure )
-    {
-        this.indicatorGroupSetStructure = indicatorGroupSetStructure;
-    }
-
-    private boolean organisationUnitGroupSetStructure;
-
-    public void setOrganisationUnitGroupSetStructure( boolean organisationUnitGroupSetStructure )
-    {
-        this.organisationUnitGroupSetStructure = organisationUnitGroupSetStructure;
-    }
-
-    private boolean categoryStructure;
-
-    public void setCategoryStructure( boolean categoryStructure )
-    {
-        this.categoryStructure = categoryStructure;
-    }
-
-    private boolean categoryOptionComboName;
-
-    public void setCategoryOptionComboName( boolean categoryOptionComboName )
-    {
-        this.categoryOptionComboName = categoryOptionComboName;
-    }
-
-    private boolean dataElementStructure;
-
-    public void setDataElementStructure( boolean dataElementStructure )
-    {
-        this.dataElementStructure = dataElementStructure;
-    }
-
-    private boolean periodStructure;
-
-    public void setPeriodStructure( boolean periodStructure )
-    {
-        this.periodStructure = periodStructure;
-    }
-    
-    private boolean dataElementCategoryOptionCombo;
-
-    public void setDataElementCategoryOptionCombo( boolean dataElementCategoryOptionCombo )
-    {
-        this.dataElementCategoryOptionCombo = dataElementCategoryOptionCombo;
-    }
-
-    private String message;
-
-    public String getMessage()
-    {
-        return message;
-    }
-
-    // -------------------------------------------------------------------------
-    // Action implementation
-    // -------------------------------------------------------------------------
-
-    public String execute()
-        throws Exception
-    {
-        sqlViewService.dropAllSqlViewTables();
-
-        log.info( "'" + currentUserService.getCurrentUsername() + "': Dropped all sql views" );
-
-        if ( organisationUnit )
-        {
-            resourceTableService.generateOrganisationUnitStructures();
-        }
-
-        if ( dataElementGroupSetStructure )
-        {
-            resourceTableService.generateDataElementGroupSetTable();
-        }
-
-        if ( indicatorGroupSetStructure )
-        {
-            resourceTableService.generateIndicatorGroupSetTable();
-        }
-
-        if ( organisationUnitGroupSetStructure )
-        {
-            resourceTableService.generateOrganisationUnitGroupSetTable();
-        }
-
-        if ( categoryStructure )
-        {
-            resourceTableService.generateCategoryTable();
-        }
-
-        if ( categoryOptionComboName )
-        {
-            resourceTableService.generateCategoryOptionComboNames();
-        }
-
-        if ( dataElementStructure )
-        {
-            resourceTableService.generateDataElementTable();
-        }
-
-        if ( periodStructure )
-        {
-            resourceTableService.generatePeriodTable();
-        }
-        
-        if ( dataElementCategoryOptionCombo )
-        {
-            resourceTableService.generateDataElementCategoryOptionComboTable();
-        }
-
-        log.info( "'" + currentUserService.getCurrentUsername() + "': Generated resource tables" );
-
-        sqlViewService.createAllViewTables();
-
-        log.info( "'" + currentUserService.getCurrentUsername() + "': Created all views" );
-
-        message = "Generated resource tables";
-
-        return SUCCESS;
-    }
-}

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/META-INF/dhis/beans.xml	2013-07-22 11:47:18 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/META-INF/dhis/beans.xml	2013-09-03 19:11:14 +0000
@@ -17,16 +17,6 @@
     <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
   </bean>
 
-  <!-- Resource table -->
-
-  <bean id="org.hisp.dhis.dataadmin.action.resourcetable.GenerateResourceTableAction"
-      class="org.hisp.dhis.dataadmin.action.resourcetable.GenerateResourceTableAction"
-      scope="prototype">
-    <property name="resourceTableService" ref="org.hisp.dhis.resourcetable.ResourceTableService" />
-    <property name="sqlViewService" ref="org.hisp.dhis.sqlview.SqlViewService" />    
-    <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
-  </bean>
-
   <!-- Cache -->
 
   <bean id="org.hisp.dhis.dataadmin.action.cache.ShowCacheAction"

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/struts.xml	2013-07-25 09:37:43 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/struts.xml	2013-09-03 19:11:14 +0000
@@ -44,11 +44,6 @@
 	  <param name="requiredAuthorities">F_PERFORM_MAINTENANCE</param>
     </action>
 
-    <action name="generateResourceTable" class="org.hisp.dhis.dataadmin.action.resourcetable.GenerateResourceTableAction">
-      <result name="success" type="velocity-xml">/dhis-web-maintenance-dataadmin/responseSuccess.vm</result>
-	  <param name="requiredAuthorities">F_PERFORM_MAINTENANCE</param>
-    </action>
-
     <!-- Cache -->
 
     <action name="showCache" class="org.hisp.dhis.dataadmin.action.cache.ShowCacheAction">

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/resourceTable.js'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/resourceTable.js	2013-05-27 11:07:26 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/javascript/resourceTable.js	2013-09-03 19:11:14 +0000
@@ -1,62 +1,16 @@
-
-var selected = false;
-
-function generateResourceTable()
-{
-    var organisationUnit = document.getElementById( "organisationUnit" ).checked;
-    var dataElementGroupSetStructure = document.getElementById( "dataElementGroupSetStructure" ).checked;
-    var indicatorGroupSetStructure = document.getElementById( "indicatorGroupSetStructure" ).checked;
-    var organisationUnitGroupSetStructure = document.getElementById( "organisationUnitGroupSetStructure" ).checked;
-    var categoryStructure = document.getElementById( "categoryStructure" ).checked;
-    var categoryOptionComboName = document.getElementById( "categoryOptionComboName" ).checked;
-    var dataElementStructure = document.getElementById( "dataElementStructure" ).checked;
-    var periodStructure = document.getElementById( "periodStructure" ).checked;
-    var dataElementCategoryOptionCombo = document.getElementById( "dataElementCategoryOptionCombo" ).checked;
-    
-    if ( organisationUnit || dataElementGroupSetStructure || indicatorGroupSetStructure || organisationUnitGroupSetStructure || 
-    		categoryStructure || categoryOptionComboName || dataElementStructure || periodStructure || dataElementCategoryOptionCombo )
-    {
-        setWaitMessage( i18n_generating_resource_tables );
-            
-        var params = {
-        	organisationUnit: organisationUnit,
-            dataElementGroupSetStructure: dataElementGroupSetStructure,
-            indicatorGroupSetStructure: indicatorGroupSetStructure,
-            organisationUnitGroupSetStructure: organisationUnitGroupSetStructure,
-            categoryStructure: categoryStructure,
-            categoryOptionComboName: categoryOptionComboName,
-            dataElementStructure: dataElementStructure,
-            periodStructure: periodStructure,
-            dataElementCategoryOptionCombo: dataElementCategoryOptionCombo
-        };
-            
-		$.ajax({
-			   type: "post",
-			   url: "generateResourceTable.action",
-			   data: params,
-			   dataType: "xml",
-			   success: function(result){
-					setMessage( i18n_resource_tables_generated );
-			   }
-			});
-    }
-    else
-    {
-        setMessage( i18n_select_options );
-    }
-}
-
-function toggleAll()
-{	
-	selected = !selected;
-	
-	document.getElementById( "organisationUnit" ).checked = selected;
-	document.getElementById( "dataElementGroupSetStructure" ).checked = selected;
-	document.getElementById( "indicatorGroupSetStructure" ).checked = selected;
-	document.getElementById( "organisationUnitGroupSetStructure" ).checked = selected;
-	document.getElementById( "categoryStructure" ).checked = selected;
-	document.getElementById( "categoryOptionComboName" ).checked = selected;
-	document.getElementById( "dataElementStructure" ).checked = selected;	
-	document.getElementById( "periodStructure" ).checked = selected;
-	document.getElementById( "dataElementCategoryOptionCombo" ).checked = selected;
-}
+
+function generateResourceTable()
+{
+	$( "#notificationTable" ).show().prepend( "<tr><td>" + _loading_bar_html + "</td></tr>" );
+	$.ajax( {
+		url: "../api/resourceTables",
+		type: "put",
+		success: pingNotificationsTimeout 
+	} );
+}
+
+function pingNotificationsTimeout()
+{
+	pingNotifications( "RESOURCETABLE_UPDATE", "notificationTable" );
+	setTimeout( "pingNotificationsTimeout()", 2500 );
+}

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/resourceTableForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/resourceTableForm.vm	2013-05-27 11:07:26 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/resourceTableForm.vm	2013-09-03 19:11:14 +0000
@@ -5,61 +5,38 @@
 	var i18n_select_options = '$encoder.jsEscape( $i18n.getString( "select_options" ), "'" )';
 </script>
 
+<style type="text/css">
+ul.resourceTables
+{
+  list-style-type: none;
+}
+
+ul.resourceTables li
+{
+  padding-top: 3px;
+  padding-bottom: 3px;
+}
+</style>
+
 <h3>$i18n.getString( "resource_table" ) #openHelp( "resourceTables" )</h3>
 
-<p>
-    <input type="checkbox" name="resourceTableCheckBox" id="organisationUnit"/>
-    <label for="organisationUnit">$i18n.getString( "organisation_unit_structure" ) <span style="color:#606060">(_orgunitstructure)</span></label>
-</p>
-
-<p>
-	<input type="checkbox" name="resourceTableCheckBox" id="dataElementGroupSetStructure"/>
-	<label for="dataElementGroupSetStructure">$i18n.getString( "data_element_group_set_structure" ) <span style="color:#606060">(_dataelementgroupsetstructure)</span></label>
-</p>
-
-<p>
-    <input type="checkbox" name="resourceTableCheckBox" id="indicatorGroupSetStructure"/>
-    <label for="indicatorGroupSetStructure">$i18n.getString( "indicator_group_set_structure" ) <span style="color:#606060">(_indicatorgroupsetstructure)</span></label>
-</p>
-
-<p>
-    <input type="checkbox" name="resourceTableCheckBox" id="organisationUnitGroupSetStructure"/>
-    <label for="organisationUnitGroupSetStructure">$i18n.getString( "organisation_unit_group_set_structure" ) <span style="color:#606060">(_organisationunitgroupsetstructure)</span></label>
-</p>
-
-<p>
-	<input type="checkbox" name="resourceTableCheckBox" id="categoryStructure"/>
-	<label for="categoryStructure">$i18n.getString( "category_structure" ) <span style="color:#606060">(_categorystructure)</span></label>
-</p>
-
-<p>
-    <input type="checkbox" name="resourceTableCheckBox" id="categoryOptionComboName"/>
-    <label for="categoryOptionComboName">$i18n.getString( "data_element_category_option_combo_name" ) <span style="color:#606060">(_categoryoptioncomboname)</span></label>
-</p>
-
-<p>
-    <input type="checkbox" name="resourceTableCheckBox" id="dataElementStructure"/>
-    <label for="dataElementStructure">$i18n.getString( "data_element_structure" ) <span style="color:#606060">(_dataelementstructure)</span></label>
-</p>
-
-<p>
-    <input type="checkbox" name="resourceTableCheckBox" id="periodStructure"/>
-    <label for="periodStructure">$i18n.getString( "period_structure" ) <span style="color:#606060">(_periodstructure)</span></label>
-</p>
-
-<p>
-	<input type="checkbox" name="resourceTableCheckBox" id="dataElementCategoryOptionCombo"/>
-	<label for="dataElementCategoryOptionCombo">$i18n.getString( "data_element_category_option_combo" ) <span style="color:#606060">(_dataelementcategoryoptioncombo)</span></label>
-</p>
-
-<table>
-	<tr>
-		<td>
-			<input type="button" value='$i18n.getString( "select_all" )' id="selectAllButton" onclick="toggleAll()" style="width:100px"/>
-		    <input type="button" value='$i18n.getString( "generate_resource_tables" )' onclick="generateResourceTable()" style="width:150px"/> 
-		</td>
-	</tr>
-
+<ul class="resourceTables">
+<li>$i18n.getString( "organisation_unit_structure" ) <span style="color:#606060">(_orgunitstructure)</span></li>
+<li>$i18n.getString( "data_element_group_set_structure" ) <span style="color:#606060">(_dataelementgroupsetstructure)</span></li>
+<li>$i18n.getString( "indicator_group_set_structure" ) <span style="color:#606060">(_indicatorgroupsetstructure)</span></li>
+<li>$i18n.getString( "organisation_unit_group_set_structure" ) <span style="color:#606060">(_organisationunitgroupsetstructure)</span></li>
+<li>$i18n.getString( "category_structure" ) <span style="color:#606060">(_categorystructure)</span></li>
+<li>$i18n.getString( "data_element_category_option_combo_name" ) <span style="color:#606060">(_categoryoptioncomboname)</span></li>
+<li>$i18n.getString( "data_element_structure" ) <span style="color:#606060">(_dataelementstructure)</span></li>
+<li>$i18n.getString( "period_structure" ) <span style="color:#606060">(_periodstructure)</span></li>
+<li>$i18n.getString( "data_element_category_option_combo" ) <span style="color:#606060">(_dataelementcategoryoptioncombo)</span></li>
+</ul>
+
+<p><input type="button" value='$i18n.getString( "generate_resource_tables" )' onclick="generateResourceTable()" style="width:150px"/></p>
+
+<div>
+<table id="notificationTable" class="notificationTable" style="display:none">
+<col width="140">
+<col width="360">
 </table>
-
-<span id="message"></span>
+</div>