← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 3847: Adding New functionality for fast DataStatus Generation in India Module: Work in Progress

 

------------------------------------------------------------
revno: 3847
committer: Neeraj <neeraj.hisp@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2011-06-07 11:28:08 +0530
message:
  Adding New functionality for fast DataStatus Generation in India Module: Work in Progress
added:
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/CalculateDataStatusAction.java
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetDataSetsForPeriodTypeAction.java
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodTypesAction.java
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodsForDSMart.java
  local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/dataStatusMartFront.vm
  local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/javascript/dataStatusMart.js
  local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/responseDataSet.vm
modified:
  local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/ds/action/GenerateDataStatusResultAction.java
  local/in/dhis-web-dashboard/src/main/resources/META-INF/dhis/beans.xml
  local/in/dhis-web-dashboard/src/main/resources/org/hisp/dhis/dataanalyser/i18n_module.properties
  local/in/dhis-web-dashboard/src/main/resources/struts.xml
  local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/menu.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 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/ds/action/GenerateDataStatusResultAction.java'
--- local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/ds/action/GenerateDataStatusResultAction.java	2011-05-24 08:25:51 +0000
+++ local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/ds/action/GenerateDataStatusResultAction.java	2011-06-07 05:58:08 +0000
@@ -35,7 +35,7 @@
     // ---------------------------------------------------------------
     // Dependencies
     // ---------------------------------------------------------------
-    
+
     private JdbcTemplate jdbcTemplate;
 
     public void setJdbcTemplate( JdbcTemplate jdbcTemplate )
@@ -95,14 +95,15 @@
     {
         this.displayPropertyHandler = displayPropertyHandler;
     }
-    
-    @SuppressWarnings("unused")
+
+    @SuppressWarnings( "unused" )
     private Comparator<OrganisationUnit> orgUnitComparator;
 
     public void setOrgUnitComparator( Comparator<OrganisationUnit> orgUnitComparator )
     {
         this.orgUnitComparator = orgUnitComparator;
     }
+
     // ---------------------------------------------------------------
     // Output Parameters
     // ---------------------------------------------------------------
@@ -115,7 +116,7 @@
     }
 
     private Map<OrganisationUnit, List<Integer>> ouMapDataElementCount;
-    
+
     public Map<OrganisationUnit, List<Integer>> getOuMapDataElementCount()
     {
         return ouMapDataElementCount;
@@ -155,8 +156,6 @@
     {
         return dataStatusResult;
     }
-    
-
 
     private Map<DataSet, Collection<Period>> dataSetPeriods;
 
@@ -185,7 +184,7 @@
     {
         return maxOULevel;
     }
-    
+
     // ---------------------------------------------------------------
     // Input Parameters
     // ---------------------------------------------------------------
@@ -203,7 +202,7 @@
     {
         this.includeZeros = includeZeros;
     }
-    
+
     public String getIncludeZeros()
     {
         return includeZeros;
@@ -322,17 +321,16 @@
     int orgUnitCount;
 
     private String dataViewName;
-    
+
     private int dataSetMemberCount1;
-    
+
     public int getDataSetMemberCount1()
     {
         return dataSetMemberCount1;
     }
-    
-    
+
     private Integer dataElementCount;
-    
+
     public Integer getDataElementCount()
     {
         return dataElementCount;
@@ -341,18 +339,14 @@
     // ---------------------------------------------------------------
     // Action Implementation
     // ---------------------------------------------------------------
-  //  @SuppressWarnings( { "deprecation", "unchecked" } )
+    // @SuppressWarnings( { "deprecation", "unchecked" } )
     public String execute()
         throws Exception
     {
-        System.out.println("Inside Normal DtaaStatus Reult Action");
         orgUnitCount = 0;
         dataViewName = "";
-        
-        ouMapDataElementCount = new HashMap<OrganisationUnit,List<Integer>>();//Map for DataElement count
-        
-        
-        // Intialization
+
+        ouMapDataElementCount = new HashMap<OrganisationUnit, List<Integer>>();// Map for DataElement count Intialization
         periodNameList = new ArrayList<String>();
         ouMapDataStatusResult = new HashMap<OrganisationUnit, List<Integer>>();
         results = new ArrayList<Integer>();
@@ -381,7 +375,7 @@
         }
         else
         {
-            //System.out.println( "slectedDataSets is not empty" );
+            // System.out.println( "slectedDataSets is not empty" );
         }
         for ( String ds : selectedDataSets )
         {
@@ -397,7 +391,7 @@
         if ( facilityLB.equals( "children" ) )
         {
             selectedOrgUnit = organisationUnitService.getOrganisationUnit( Integer.parseInt( orgUnitListCB.get( 0 ) ) );
-            orgUnitList = getChildOrgUnitTree( selectedOrgUnit );                     
+            orgUnitList = getChildOrgUnitTree( selectedOrgUnit );
         }
         else if ( facilityLB.equals( "immChildren" ) )
         {
@@ -416,7 +410,7 @@
                 orgUnitList.add( o );
                 List<OrganisationUnit> organisationUnits = new ArrayList<OrganisationUnit>( o.getChildren() );
                 Collections.sort( organisationUnits, new OrganisationUnitShortNameComparator() );
-                orgUnitList.addAll( organisationUnits );              
+                orgUnitList.addAll( organisationUnits );
             }
         }
         else
@@ -426,14 +420,14 @@
             while ( orgUnitIterator.hasNext() )
             {
                 o = organisationUnitService.getOrganisationUnit( Integer.parseInt( orgUnitIterator.next() ) );
-                orgUnitList.add( o );                
-                Collections.sort( orgUnitList, new OrganisationUnitShortNameComparator() );               
+                orgUnitList.add( o );
+                Collections.sort( orgUnitList, new OrganisationUnitShortNameComparator() );
                 displayPropertyHandler.handle( orgUnitList );
             }
         }
 
-        //Set<OrganisationUnit> dSetSource = selDataSet.getSources();
-        List<OrganisationUnit> dSetSource = new ArrayList<OrganisationUnit>( selDataSet.getSources());
+        // Set<OrganisationUnit> dSetSource = selDataSet.getSources();
+        List<OrganisationUnit> dSetSource = new ArrayList<OrganisationUnit>( selDataSet.getSources() );
         orgUnitInfo = "-1";
         Iterator<OrganisationUnit> ouIt = orgUnitList.iterator();
         while ( ouIt.hasNext() )
@@ -460,24 +454,25 @@
                 orgUnitInfo += "," + ou.getId();
             }
         }
-       
+
         // Period Related Info
         Period startPeriod = periodService.getPeriod( sDateLB );
         Period endPeriod = periodService.getPeriod( eDateLB );
 
-        PeriodType dataSetPeriodType = selDataSet.getPeriodType(); 
-        periodList = new ArrayList<Period>(periodService.getPeriodsBetweenDates( dataSetPeriodType,
-            startPeriod.getStartDate(), endPeriod.getEndDate() ));
-     
+        PeriodType dataSetPeriodType = selDataSet.getPeriodType();
+        periodList = new ArrayList<Period>( periodService.getPeriodsBetweenDates( dataSetPeriodType, startPeriod
+            .getStartDate(), endPeriod.getEndDate() ) );
+
         periodInfo = "-1";
         for ( Period p : periodList )
             periodInfo += "," + p.getId();
-        
+
         dataViewName = createDataView( orgUnitInfo, deInfo, periodInfo );
-      
+
         String query = "";
-        query = "SELECT COUNT(*) FROM " + dataViewName + " WHERE dataelementid IN (?) AND sourceid IN (?) AND periodid IN (?)";
-        
+        query = "SELECT COUNT(*) FROM " + dataViewName
+            + " WHERE dataelementid IN (?) AND sourceid IN (?) AND periodid IN (?)";
+
         Collection<DataElement> dataElements = new ArrayList<DataElement>();
         dataElements = selDataSet.getDataElements();
 
@@ -486,17 +481,17 @@
         {
             dataSetMemberCount1 += de1.getCategoryCombo().getOptionCombos().size();
         }
-       
-        //System.out.println( "DataSet Member Count :"  + dataSetMemberCount1  );
-        
+
+        // System.out.println( "DataSet Member Count :" + dataSetMemberCount1 );
+
         deInfo = getDEInfo( dataElements );
 
         Iterator<OrganisationUnit> orgUnitListIterator = orgUnitList.iterator();
         OrganisationUnit o;
-        //Set<OrganisationUnit> dso = new HashSet<OrganisationUnit>();
-        List<OrganisationUnit> dso = new ArrayList<OrganisationUnit>( selDataSet.getSources());
+        // Set<OrganisationUnit> dso = new HashSet<OrganisationUnit>();
+        List<OrganisationUnit> dso = new ArrayList<OrganisationUnit>( selDataSet.getSources() );
         Iterator<Period> periodIterator;
-        //dso = selDataSet.getSources();
+        // dso = selDataSet.getSources();
 
         while ( orgUnitListIterator.hasNext() )
         {
@@ -508,26 +503,25 @@
 
             if ( minOULevel > organisationUnitService.getLevelOfOrganisationUnit( o ) )
                 minOULevel = organisationUnitService.getLevelOfOrganisationUnit( o );
-/*
-            List<OrganisationUnit> childOrgUnits = new ArrayList<OrganisationUnit>();
-            
-            if ( !dso.contains( o ) )
-            {
-                childOrgUnits = filterChildOrgUnitsByDataSet( o, dso );
-            }
-            System.out.println( "Size of Child OrgUnit: " + childOrgUnits.size() );
-*/            
+            /*
+             * List<OrganisationUnit> childOrgUnits = new
+             * ArrayList<OrganisationUnit>();
+             * 
+             * if ( !dso.contains( o ) ) { childOrgUnits =
+             * filterChildOrgUnitsByDataSet( o, dso ); } System.out.println(
+             * "Size of Child OrgUnit: " + childOrgUnits.size() );
+             */
             periodIterator = periodList.iterator();
 
             Period p;
 
             double dataStatusPercentatge;
-            
+
             List<Integer> dsResults = new ArrayList<Integer>();
             List<Integer> deCounts = new ArrayList<Integer>();
             while ( periodIterator.hasNext() )
             {
-                System.out.println("Inside period Iterator Loop");
+                System.out.println( "Inside period Iterator Loop" );
                 p = (Period) periodIterator.next();
                 periodInfo = "" + p.getId();
                 dataElementCount = 0;
@@ -539,63 +533,53 @@
                 }
                 else if ( !dso.contains( o ) )
                 {
-                    System.out.println("Dataset : " + selDataSet.getName() + " not assign to " + o.getName() );
-                    /*
-                    if( childOrgUnits == null || childOrgUnits.size() <= 0 )
-                    {
-                        dsResults.add( -2 );
-                        continue;
-                    }
-                    
-                    else*/
-                    //{
-                        /*orgUnitInfo = "-1";
-                        orgUnitCount = 0;
-                        getOrgUnitInfo( o, dso );
-    
-                        if ( includeZeros == null )
-                        {
-                            query = "SELECT COUNT(*) FROM " + dataViewName + " WHERE dataelementid IN (" + deInfo
-                                + ") AND sourceid IN (" + orgUnitInfo + ") AND periodid IN (" + periodInfo
-                                + ") and value <> 0";
-                            
-                        }
-                        else
-                        {
-                            query = "SELECT COUNT(*) FROM " + dataViewName + " WHERE dataelementid IN (" + deInfo
-                                + ") AND sourceid IN (" + orgUnitInfo + ") AND periodid IN (" + periodInfo + ")";
-                        }
-    
-                        System.out.println("Used Query is :::::::" + query );
-                        SqlRowSet sqlResultSet = jdbcTemplate.queryForRowSet( query );
-    
-                        if ( sqlResultSet.next() )
-                        {
-                            try
-                            {
-                                //System.out.println( "Result is : \t" + sqlResultSet.getLong( 1 ) );
-                                dataStatusPercentatge = ((double) sqlResultSet.getInt( 1 ) / (double) (dataSetMemberCount1 * orgUnitCount)) * 100.0;
-                                
-                            }
-                            catch ( Exception e )
-                            {
-                                dataStatusPercentatge = 0.0;
-                            }
-                        }
-                        else
-                            dataStatusPercentatge = 0.0;
-    
-                        if ( dataStatusPercentatge > 100.0 )
-                            dataStatusPercentatge = 100;
-    
-                        dataStatusPercentatge = Math.round( dataStatusPercentatge * Math.pow( 10, 0 ) ) / Math.pow( 10, 0 );
-                        */
-                        //dsResults.add( (int) dataStatusPercentatge );
-                        dsResults.add( -1 );
-                        //dataElementCount = sqlResultSet.getInt( 1 );
-                        deCounts.add( -1 );
-                        continue;
-                    //}
+                    System.out.println( "Dataset : " + selDataSet.getName() + " not assign to " + o.getName() );
+                    /*
+                     * if( childOrgUnits == null || childOrgUnits.size() <= 0 )
+                     * { dsResults.add( -2 ); continue; }
+                     * 
+                     * else
+                     */
+                    // {
+                    /*
+                     * orgUnitInfo = "-1"; orgUnitCount = 0; getOrgUnitInfo( o,
+                     * dso );
+                     * 
+                     * if ( includeZeros == null ) { query =
+                     * "SELECT COUNT(*) FROM " + dataViewName +
+                     * " WHERE dataelementid IN (" + deInfo +
+                     * ") AND sourceid IN (" + orgUnitInfo +
+                     * ") AND periodid IN (" + periodInfo + ") and value <> 0";
+                     * 
+                     * } else { query = "SELECT COUNT(*) FROM " + dataViewName +
+                     * " WHERE dataelementid IN (" + deInfo +
+                     * ") AND sourceid IN (" + orgUnitInfo +
+                     * ") AND periodid IN (" + periodInfo + ")"; }
+                     * 
+                     * System.out.println("Used Query is :::::::" + query );
+                     * SqlRowSet sqlResultSet = jdbcTemplate.queryForRowSet(
+                     * query );
+                     * 
+                     * if ( sqlResultSet.next() ) { try { //System.out.println(
+                     * "Result is : \t" + sqlResultSet.getLong( 1 ) );
+                     * dataStatusPercentatge = ((double) sqlResultSet.getInt( 1
+                     * ) / (double) (dataSetMemberCount1 orgUnitCount)) 100.0;
+                     * 
+                     * } catch ( Exception e ) { dataStatusPercentatge = 0.0; }
+                     * } else dataStatusPercentatge = 0.0;
+                     * 
+                     * if ( dataStatusPercentatge > 100.0 )
+                     * dataStatusPercentatge = 100;
+                     * 
+                     * dataStatusPercentatge = Math.round( dataStatusPercentatge
+                     * Math.pow( 10, 0 ) ) / Math.pow( 10, 0 );
+                     */
+                    // dsResults.add( (int) dataStatusPercentatge );
+                    dsResults.add( -1 );
+                    // dataElementCount = sqlResultSet.getInt( 1 );
+                    deCounts.add( -1 );
+                    continue;
+                    // }
                 }
 
                 orgUnitInfo = "" + o.getId();
@@ -631,12 +615,12 @@
                     dataStatusPercentatge = 0.0;
                     dataElementCount = -1;
                 }
-                
+
                 if ( dataStatusPercentatge > 100.0 )
                     dataStatusPercentatge = 100;
 
-                dataStatusPercentatge = Math.round( dataStatusPercentatge * Math.pow( 10, 0 ) ) / Math.pow( 10, 0 );                
-                
+                dataStatusPercentatge = Math.round( dataStatusPercentatge * Math.pow( 10, 0 ) ) / Math.pow( 10, 0 );
+
                 dsResults.add( (int) dataStatusPercentatge );
                 deCounts.add( dataElementCount );
             }
@@ -652,7 +636,8 @@
             ouLevelNames[i] = "Level" + i;
         }
 
-        List<OrganisationUnitLevel> ouLevels = new ArrayList<OrganisationUnitLevel>( organisationUnitService.getFilledOrganisationUnitLevels() );
+        List<OrganisationUnitLevel> ouLevels = new ArrayList<OrganisationUnitLevel>( organisationUnitService
+            .getFilledOrganisationUnitLevels() );
         for ( OrganisationUnitLevel ouL : ouLevels )
         {
             ouLevelNames[ouL.getLevel()] = ouL.getName();
@@ -674,7 +659,7 @@
         {
             try
             {
-                deleteDataView( dataViewName );               
+                deleteDataView( dataViewName );
             }
             catch ( Exception e )
             {
@@ -683,8 +668,9 @@
         }// finally block end
 
         periodNameList = dashBoardService.getPeriodNamesByPeriodType( dataSetPeriodType, periodList );
-        
-        //System.out.println("OrgUnit Size is :" + ouMapDataStatusResult.size() );
+
+        // System.out.println("OrgUnit Size is :" + ouMapDataStatusResult.size()
+        // );
 
         return SUCCESS;
     }
@@ -707,7 +693,7 @@
     }
 
     public String createDataView( String orgUnitInfo, String deInfo, String periodInfo )
-    {      
+    {
         String dataViewName = "_ds_" + UUID.randomUUID().toString();
         dataViewName = dataViewName.replaceAll( "-", "" );
 
@@ -715,14 +701,14 @@
 
         try
         {
-            @SuppressWarnings("unused")
+            @SuppressWarnings( "unused" )
             int sqlResult = jdbcTemplate.update( query );
 
             System.out.println( "View " + dataViewName + " dropped Successfully (if exists) " );
-            
+
             query = "CREATE view " + dataViewName + " AS "
-            + " SELECT sourceid,dataelementid,periodid,value FROM datavalue " + " WHERE dataelementid in ("
-            + deInfo + ") AND " + " sourceid in (" + orgUnitInfo + ") AND " + " periodid in (" + periodInfo + ")";
+                + " SELECT sourceid,dataelementid,periodid,value FROM datavalue " + " WHERE dataelementid in ("
+                + deInfo + ") AND " + " sourceid in (" + orgUnitInfo + ") AND " + " periodid in (" + periodInfo + ")";
 
             sqlResult = jdbcTemplate.update( query );
 
@@ -736,7 +722,7 @@
         finally
         {
             try
-            {              
+            {
             }
             catch ( Exception e )
             {
@@ -753,9 +739,9 @@
         String query = "DROP VIEW IF EXISTS " + dataViewName;
 
         try
-        {           
-            @SuppressWarnings("unused")
-			int sqlResult = jdbcTemplate.update( query );
+        {
+            @SuppressWarnings( "unused" )
+            int sqlResult = jdbcTemplate.update( query );
             System.out.println( "View " + dataViewName + " dropped Successfully" );
         } // try block end
         catch ( Exception e )
@@ -807,25 +793,17 @@
             getOrgUnitInfo( child );
         }
     }
-/*
-    private void getOrgUnitInfo( OrganisationUnit organisationUnit, List<OrganisationUnit> dso )
-    {
-        Collection<OrganisationUnit> children = organisationUnit.getChildren();
 
-        Iterator<OrganisationUnit> childIterator = children.iterator();
-        OrganisationUnit child;
-        while ( childIterator.hasNext() )
-        {
-            child = childIterator.next();
-            if ( dso.contains( child ) )
-            {
-                orgUnitInfo += "," + child.getId();
-                orgUnitCount++;
-            }
-            getOrgUnitInfo( child, dso );
-        }
-    }
-*/
+    /*
+     * private void getOrgUnitInfo( OrganisationUnit organisationUnit,
+     * List<OrganisationUnit> dso ) { Collection<OrganisationUnit> children =
+     * organisationUnit.getChildren();
+     * 
+     * Iterator<OrganisationUnit> childIterator = children.iterator();
+     * OrganisationUnit child; while ( childIterator.hasNext() ) { child =
+     * childIterator.next(); if ( dso.contains( child ) ) { orgUnitInfo += "," +
+     * child.getId(); orgUnitCount++; } getOrgUnitInfo( child, dso ); } }
+     */
     private String getDEInfo( Collection<DataElement> dataElements )
     {
         StringBuffer deInfo = new StringBuffer( "-1" );
@@ -836,12 +814,14 @@
         }
         return deInfo.toString();
     }
-/*    
-    private List<OrganisationUnit> filterChildOrgUnitsByDataSet( OrganisationUnit selectedOrganisationUnit, List<OrganisationUnit> dso )
-    {
-        List<OrganisationUnit> filteredOrganisationUnits = new ArrayList<OrganisationUnit>( organisationUnitService.getOrganisationUnitWithChildren( selectedOrganisationUnit.getId() ) );
-        filteredOrganisationUnits.retainAll( dso );
-        return filteredOrganisationUnits;
-    }    
-*/    
+    /*
+     * private List<OrganisationUnit> filterChildOrgUnitsByDataSet(
+     * OrganisationUnit selectedOrganisationUnit, List<OrganisationUnit> dso ) {
+     * List<OrganisationUnit> filteredOrganisationUnits = new
+     * ArrayList<OrganisationUnit>(
+     * organisationUnitService.getOrganisationUnitWithChildren(
+     * selectedOrganisationUnit.getId() ) );
+     * filteredOrganisationUnits.retainAll( dso ); return
+     * filteredOrganisationUnits; }
+     */
 }// class end

=== added directory 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart'
=== added directory 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action'
=== added file 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/CalculateDataStatusAction.java'
--- local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/CalculateDataStatusAction.java	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/CalculateDataStatusAction.java	2011-06-07 05:58:08 +0000
@@ -0,0 +1,106 @@
+package org.hisp.dhis.dataanalyser.dsMart.action;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.dataset.DataSetService;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.oust.manager.SelectionTreeManager;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.user.CurrentUserService;
+
+import com.opensymphony.xwork2.Action;
+
+public class CalculateDataStatusAction
+    implements Action
+{
+
+    Collection<Period> periods = new ArrayList<Period>();
+
+    Collection<DataSet> dataSets = new ArrayList<DataSet>();
+
+    //--------------------------------------------------------------------------
+    // Dependencies
+    //--------------------------------------------------------------------------
+
+    private SelectionTreeManager selectionTreeManager;
+
+    public void setSelectionTreeManager( SelectionTreeManager selectionTreeManager )
+    {
+        this.selectionTreeManager = selectionTreeManager;
+    }
+
+    private PeriodService periodService;
+
+    public void setPeriodService( PeriodService periodService )
+    {
+        this.periodService = periodService;
+    }
+
+    private DataSetService dataSetService;
+
+    public void setDataSetService( DataSetService dataSetService )
+    {
+        this.dataSetService = dataSetService;
+    }
+
+    private CurrentUserService currentUserService;
+
+    public void setCurrentUserService( CurrentUserService currentUserService )
+    {
+        this.currentUserService = currentUserService;
+    }
+
+    //--------------------------------------------------------------------------
+    // Input/Output
+    //--------------------------------------------------------------------------
+
+    private Collection<Integer> selectedPeriods = new ArrayList<Integer>();
+
+    public void setSelectedPeriods( Collection<Integer> selectedPeriods )
+    {
+        this.selectedPeriods = selectedPeriods;
+    }
+
+    private Collection<String> selectedDatasets = new ArrayList<String>();
+
+    public void setSelectedDatasets( Collection<String> selectedDatasets )
+    {
+        this.selectedDatasets = selectedDatasets;
+    }
+
+    String deInfo;
+    
+    private DataSet selDataSet;
+
+    //--------------------------------------------------------------------------
+    // Action Implementation
+    //--------------------------------------------------------------------------
+
+    public String execute()
+    {
+        
+        for ( Integer periodId : selectedPeriods )
+        {
+            periods.add( periodService.getPeriod( periodId.intValue() ) );
+        }
+
+        for ( String ds : selectedDatasets )
+        {
+            DataSet dSet = dataSetService.getDataSet( Integer.parseInt( ds ) );
+            selDataSet = dSet;
+            for ( DataElement de : dSet.getDataElements() )
+                deInfo += "," + de.getId();
+        }
+
+        String currentUserName = currentUserService.getCurrentUsername();
+
+        Collection<OrganisationUnit> selectedOrganisationUnits = selectionTreeManager.getSelectedOrganisationUnits();
+        
+        return SUCCESS;
+    }
+
+}

=== added file 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetDataSetsForPeriodTypeAction.java'
--- local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetDataSetsForPeriodTypeAction.java	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetDataSetsForPeriodTypeAction.java	2011-06-07 05:58:08 +0000
@@ -0,0 +1,64 @@
+package org.hisp.dhis.dataanalyser.dsMart.action;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.dataset.DataSetService;
+import org.hisp.dhis.period.PeriodService;
+
+import com.opensymphony.xwork2.Action;
+
+public class GetDataSetsForPeriodTypeAction
+implements Action
+{
+ // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private DataSetService dataSetService;
+
+    public void setDataSetService( DataSetService dataSetService )
+    {
+        this.dataSetService = dataSetService;
+    }
+
+    private PeriodService periodService;
+
+    public void setPeriodService( PeriodService periodService )
+    {
+        this.periodService = periodService;
+    }
+
+    // -------------------------------------------------------------------------
+    // Input/output
+    // -------------------------------------------------------------------------
+
+    private String periodType;
+
+    public void setPeriodType( String periodType )
+    {
+        this.periodType = periodType;
+    }
+
+    private Collection<DataSet> dataSets = new ArrayList<DataSet>();
+
+    public Collection<DataSet> getDataSets()
+    {
+        return dataSets;
+    }
+
+    // -------------------------------------------------------------------------
+    // Action implementation
+    // -------------------------------------------------------------------------
+
+    public String execute()
+    {
+        if ( periodType != null && !periodType.isEmpty() )
+        {
+            dataSets = dataSetService.getAssignedDataSetsByPeriodType( periodService.getPeriodTypeByName( periodType ) );
+        }
+        return SUCCESS;
+    }
+
+}

=== added file 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodTypesAction.java'
--- local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodTypesAction.java	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodTypesAction.java	2011-06-07 05:58:08 +0000
@@ -0,0 +1,56 @@
+package org.hisp.dhis.dataanalyser.dsMart.action;
+
+import java.util.Collection;
+
+import org.hisp.dhis.oust.manager.SelectionTreeManager;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.period.PeriodType;
+
+import com.opensymphony.xwork2.Action;
+
+public class GetPeriodTypesAction
+    implements Action
+{
+
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private PeriodService periodService;
+
+    public void setPeriodService( PeriodService periodService )
+    {
+        this.periodService = periodService;
+    }
+
+    private SelectionTreeManager selectionTreeManager;
+
+    public void setSelectionTreeManager( SelectionTreeManager selectionTreeManager )
+    {
+        this.selectionTreeManager = selectionTreeManager;
+    }
+
+    // -------------------------------------------------------------------------
+    // Input/output
+    // -------------------------------------------------------------------------
+
+    private Collection<PeriodType> periodTypes;
+
+    public Collection<PeriodType> getPeriodTypes()
+    {
+        return periodTypes;
+    }
+
+    // -------------------------------------------------------------------------
+    // Action implementation
+    // -------------------------------------------------------------------------
+
+    public String execute()
+    {
+        periodTypes = periodService.getAllPeriodTypes();
+
+        selectionTreeManager.clearSelectedOrganisationUnits();
+
+        return SUCCESS;
+    }
+}

=== added file 'local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodsForDSMart.java'
--- local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodsForDSMart.java	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/java/org/hisp/dhis/dataanalyser/dsMart/action/GetPeriodsForDSMart.java	2011-06-07 05:58:08 +0000
@@ -0,0 +1,101 @@
+package org.hisp.dhis.dataanalyser.dsMart.action;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import org.hisp.dhis.i18n.I18nFormat;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.period.PeriodType;
+import org.hisp.dhis.period.comparator.PeriodComparator;
+
+import com.opensymphony.xwork2.Action;
+
+public class GetPeriodsForDSMart
+    implements Action
+{
+
+    private final static String ALL = "ALL";
+
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private PeriodService periodService;
+
+    public void setPeriodService( PeriodService periodService )
+    {
+        this.periodService = periodService;
+    }
+
+    private I18nFormat format;
+
+    public void setFormat( I18nFormat format )
+    {
+        this.format = format;
+    }
+
+    // -------------------------------------------------------------------------
+    // Input & output
+    // -------------------------------------------------------------------------
+
+    private String name;
+
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
+    private List<Period> periods = new ArrayList<Period>();
+
+    public List<Period> getPeriods()
+    {
+        return periods;
+    }
+
+    // -------------------------------------------------------------------------
+    // Action implementation
+    // -------------------------------------------------------------------------
+
+    public String execute()
+        throws Exception
+    {
+        if ( name == null || name.equals( ALL ) )
+        {
+            Collection<PeriodType> periodTypes = periodService.getAllPeriodTypes();
+
+            for ( PeriodType type : periodTypes )
+            {
+                periods.addAll( periodService.getPeriodsByPeriodType( type ) );
+            }
+        }
+        else
+        {
+            PeriodType periodType = periodService.getPeriodTypeByName( name );
+
+            ArrayList<Period> allPeriodsOfSelectedPeriodType = new ArrayList<Period>( periodService
+                .getPeriodsByPeriodType( periodType ) );
+
+            for ( Period p : allPeriodsOfSelectedPeriodType )
+            {
+                if ( !(p.getStartDate().compareTo( new Date() ) > 0) )
+                {
+                    periods.add( p );
+                }
+            }
+        }
+
+        for ( Period period : periods )
+        {
+            period.setName( format.formatPeriod( period ) );
+        }
+
+        Collections.sort( periods, new PeriodComparator() );
+
+        return SUCCESS;
+    }
+
+}

=== modified file 'local/in/dhis-web-dashboard/src/main/resources/META-INF/dhis/beans.xml'
--- local/in/dhis-web-dashboard/src/main/resources/META-INF/dhis/beans.xml	2011-05-27 11:25:15 +0000
+++ local/in/dhis-web-dashboard/src/main/resources/META-INF/dhis/beans.xml	2011-06-07 05:58:08 +0000
@@ -540,6 +540,32 @@
         scope="prototype">
         <property name="configurationService" ref="org.hisp.dhis.config.ConfigurationService" />
     </bean> 
+	
+	<!-- View Comment Related Stuff -->
+	
+	<bean id="org.hisp.dhis.dataanalyser.vc.action.ViewCommentFormAction"
+    	class="org.hisp.dhis.dataanalyser.vc.action.ViewCommentFormAction" 
+		scope="prototype">
+		<property name="selectionTreeManager">
+		  <ref bean="org.hisp.dhis.oust.manager.SelectionTreeManager"/>
+		</property>
+		<property name="currentUserService">
+		  <ref bean="org.hisp.dhis.user.CurrentUserService"/>
+		</property>
+		<property name="selectionManager">
+		  <ref bean="org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager"/>
+	    </property>    
+    </bean>
+	
+	<bean id="org.hisp.dhis.dataanalyser.vc.action.ValidateViewCommentsAction"
+		class="org.hisp.dhis.dataanalyser.vc.action.ValidateViewCommentsAction"
+		scope="prototype">
+		<property name="selectionTreeManager">
+		  <ref bean="org.hisp.dhis.oust.manager.SelectionTreeManager"/>
+	    </property>
+	</bean>
+	
+	
 		
 	
 	<!-- DataStatus -->
@@ -1287,4 +1313,26 @@
 		scope="prototype">
     </bean>
 	
+	<!--DataStatus Mart module Stuff -->
+	
+	<bean id="org.hisp.dhis.dataanalyser.dsMart.action.GetPeriodTypesAction"
+		class="org.hisp.dhis.dataanalyser.dsMart.action.GetPeriodTypesAction"
+		scope="prototype">
+		<property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+		<property name="selectionTreeManager" ref="org.hisp.dhis.oust.manager.SelectionTreeManager" />
+	</bean>
+	
+	<bean id="org.hisp.dhis.dataanalyser.dsMart.action.GetPeriodsForDSMart"
+		class="org.hisp.dhis.dataanalyser.dsMart.action.GetPeriodsForDSMart"
+		scope="prototype">
+		<property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+	</bean>
+	
+	<bean id="org.hisp.dhis.dataanalyser.dsMart.action.GetDataSetsForPeriodTypeAction"
+        class="org.hisp.dhis.dataanalyser.dsMart.action.GetDataSetsForPeriodTypeAction"
+        scope="prototype">
+        <property name="dataSetService" ref="org.hisp.dhis.dataset.DataSetService" />
+        <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+    </bean>
+	
 </beans>
\ No newline at end of file

=== modified file 'local/in/dhis-web-dashboard/src/main/resources/org/hisp/dhis/dataanalyser/i18n_module.properties'
--- local/in/dhis-web-dashboard/src/main/resources/org/hisp/dhis/dataanalyser/i18n_module.properties	2011-05-18 11:12:17 +0000
+++ local/in/dhis-web-dashboard/src/main/resources/org/hisp/dhis/dataanalyser/i18n_module.properties	2011-06-07 05:58:08 +0000
@@ -65,6 +65,16 @@
 ta_generatereport = Generate Report
 ta_selected_servicelist = Selected DataElement/Indicator List :  
 
+#-------View Chart---------------------------#
+
+vc  = View Comments
+vc_comments = Comments
+vc_start_date = Start Date
+vc_end_date = End Date
+vc_get_report_as_pdf = Download As PDF
+vc_get_report_as_xls = Download As Excel
+vc_get_report_as_csv = Download As CSV
+vc_done = Done
 
 #-------DataStatus---------------------------#
 
@@ -85,6 +95,7 @@
 ds_dataentry_dataelement_group_status_mobile = Mobile Data Entry Status by Data Element Groups
 ds_dataelement_group_mobile = Mobile Data Element Group
 ds_lastupdated_status_mobile = Last Updated Status For Mobile DataSet
+ds_mart = Data Status Mart
 
 #-------DataStatusOrganisationUnitGroupWise---------------------------#
 
@@ -127,3 +138,13 @@
 ds_periodtype = Period Type
 select_periodtype = Select Period Type
 
+#---------DataStatus Mart-------------------#
+
+calculate = Calculate
+available_periods = Available Periods
+selected_periods = Selected Periods
+available_datasets = Available Datasets
+selected_datasets = Selected Datasets
+
+
+

=== modified file 'local/in/dhis-web-dashboard/src/main/resources/struts.xml'
--- local/in/dhis-web-dashboard/src/main/resources/struts.xml	2011-05-27 11:25:15 +0000
+++ local/in/dhis-web-dashboard/src/main/resources/struts.xml	2011-06-07 05:58:08 +0000
@@ -15,139 +15,154 @@
 			<param name="menu">/dhis-web-dashboard/menu.vm</param>
 		</action>
 		
-<!-- GraphicalAnalyser  DataElements -->
-		 <action name="graphicalAnalyserDataElement"
-            class="org.hisp.dhis.dataanalyser.ga.action.GenerateGraphicalAnalyserDataElementsFormAction">
-            <result name="success" type="velocity">/main.vm</result>
-            <param name="page">/dhis-web-dashboard/graphicalAnalysisDataElementFront.vm</param>
-            <param name="menu">/dhis-web-dashboard/menuWithTreeForGADataElement.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,
-				javascript/db.js,
-				javascript/ga.js,
-				javascript/hashtable.js,
-				javascript/date.js,
-				javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>
+		<!-- GraphicalAnalyser  DataElements -->
+		<action name="graphicalAnalyserDataElement"
+			class="org.hisp.dhis.dataanalyser.ga.action.GenerateGraphicalAnalyserDataElementsFormAction">
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisDataElementFront.vm</param>
+			<param name="menu">
+				/dhis-web-dashboard/menuWithTreeForGADataElement.vm</param>
+			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,
+				javascript/db.js, javascript/ga.js, javascript/hashtable.js,
+				javascript/date.js, javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
 		
-		      
 		<action name="generateChartDataElement"
-            class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateChartDataElementAction">
-			<result name="success" type="velocity">/popup.vm</result>      
-			 <param name="page">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</param>    
-           <!--<result name="success" type="velocity">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</result>-->
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateChartDataElementAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</param>
+			
+			<!--<result name="success" type="velocity">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</result>-->
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
 		<!-- for Chart data -->
-	   <action name="generateChart1"
-            class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateChartAction1">
-            <result name="success" type="chart">
-                <param name="width">700</param>
-                <param name="height">500</param>
-            </result>
-        </action>
+		<action name="generateChart1"
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateChartAction1">
+			<result name="success" type="chart">
+				<param name="width">700</param>
+				<param name="height">500</param>
+			</result>
+		</action>
 		
-		<!-- sorting DataElement data -->        
-        <action name="getSortedDataElement"
-            class="org.hisp.dhis.dataanalyser.action.GetSortedDataElementAction">
-            <result name="success" type="velocity-xml">/dhis-web-dashboard/responseSortedData.vm</result>
-            <!--<interceptor-ref name="transactionStack"/>-->
-            <param name="onExceptionReturn">plainTextError</param>
-        </action>
+		<!-- sorting DataElement data -->
+		<action name="getSortedDataElement"
+			class="org.hisp.dhis.dataanalyser.action.GetSortedDataElementAction">
+			<result name="success" type="velocity-xml">
+				/dhis-web-dashboard/responseSortedData.vm</result>
+			<!--<interceptor-ref name="transactionStack"/>-->
+			<param name="onExceptionReturn">plainTextError</param>
+		</action>
 		<!-- Export Data Elements to Excel -->
-        <action name="exportDataElementsToExcel"
-            class="org.hisp.dhis.dataanalyser.action.ExportDataElementToExcelAction">
-            <result name="success" type="stream">
-                <param name="contentType">application/vnd.ms-excel</param>
-                <param name="inputName">inputStream</param>
-                <param name="contentDisposition">filename="${fileName}"</param>
-                <param name="bufferSize">1024</param>
-            </result>
-        </action>
+		<action name="exportDataElementsToExcel"
+			class="org.hisp.dhis.dataanalyser.action.ExportDataElementToExcelAction">
+			<result name="success" type="stream">
+				<param name="contentType">application/vnd.ms-excel</param>
+				<param name="inputName">inputStream</param>
+				<param name="contentDisposition">filename="${fileName}"</param>
+				<param name="bufferSize">1024</param>
+			</result>
+		</action>
 		<!-- DrillDown periodToOrgUnit Child/GroupMember dataElements -->
-		<action name="generatedrillDownPeriodToOrgChildChartDataElement" class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownPeriodToOrgChildChartDataElementResultAction">
+		<action name="generatedrillDownPeriodToOrgChildChartDataElement"
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownPeriodToOrgChildChartDataElementResultAction">
 			<result name="success" type="velocity">/popup.vm</result>
-			<param name="page">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</param>
-			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
 		<!-- DrillDown OrgUnitToPeriod Child/GroupMember dataElements -->
-		<action name="generatedrillDownOurUnitToPeriodChartDataElement" class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownOrgUnitToPeriodChartDataElementResultAction">
-			<result name="success" type="velocity">/popup.vm</result>
-            <param name="page">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-		</action>
-		
-		
-		
-		
-		
-		
-		
-<!-- GraphicalAnalyser  DataElements end   --> 	
+		<action name="generatedrillDownOurUnitToPeriodChartDataElement"
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownOrgUnitToPeriodChartDataElementResultAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		
+		<!-- GraphicalAnalyser  DataElements end   -->
+		
+		<!-- GraphicalAnalyser  Indicators -->
+		<action name="graphicalAnalyserIndicator"
+			class="org.hisp.dhis.dataanalyser.ga.action.IndicatorwiseGAFormAction">
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisIndicatorFront.vm</param>
+			<param name="menu">
+				/dhis-web-dashboard/menuWithTreeForGAIndicator.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,javascript/db.js,javascript/ga.js,javascript/hashtable.js,javascript/date.js,javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		
+		<action name="generateChartIndicator"
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateChartIndicatorAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisIndicatorResult.vm</param>
 			
-<!-- GraphicalAnalyser  Indicators -->
-         <action name="graphicalAnalyserIndicator"
-            class="org.hisp.dhis.dataanalyser.ga.action.IndicatorwiseGAFormAction">
-            <result name="success" type="velocity">/main.vm</result>
-            <param name="page">/dhis-web-dashboard/graphicalAnalysisIndicatorFront.vm</param>
-            <param name="menu">/dhis-web-dashboard/menuWithTreeForGAIndicator.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,javascript/db.js,javascript/ga.js,javascript/hashtable.js,javascript/date.js,javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-         </action> 
-		
-		 <action name="generateChartIndicator"
-            class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateChartIndicatorAction">
-            <result name="success" type="velocity">/popup.vm</result>      
-             <param name="page">/dhis-web-dashboard/graphicalAnalysisIndicatorResult.vm</param>    
-           <!--<result name="success" type="velocity">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</result>-->
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>
-<!-- sorting Indiacator data -->		
+			<!--<result name="success" type="velocity">/dhis-web-dashboard/graphicalAnalysisDataElementResult.vm</result>-->
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		<!-- sorting Indiacator data -->
 		<action name="getSortedIndicatorData"
-            class="org.hisp.dhis.dataanalyser.action.GetSortedIndicatorDataAction">
-            <result name="success" type="velocity-xml">/dhis-web-dashboard/responseSortedData.vm</result>
-            <!--<interceptor-ref name="transactionStack"/>-->
-            <param name="onExceptionReturn">plainTextError</param>
-        </action>
-<!-- Export Indicator data to Excel -->
-        <action name="exportIndicatorToExcel"
-            class="org.hisp.dhis.dataanalyser.action.ExportIndicatorToExcelAction">
-            <result name="success" type="stream">
-                <param name="contentType">application/vnd.ms-excel</param>
-                <param name="inputName">inputStream</param>
-                <param name="contentDisposition">filename="${fileName}"</param>
-                <param name="bufferSize">1024</param>
-            </result>
-        </action>
-<!-- DrillDown periodToOrgUnit Child/GroupMember Indicator -->
-        <action name="generateDrillDownPeriodToOrgChildChartIndicator" class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownPeriodToOrgChildChartIndicatorResultAction">
-            <result name="success" type="velocity">/popup.vm</result>
-            <param name="page">/dhis-web-dashboard/graphicalAnalysisIndicatorResult.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>
-		
-<!-- DrillDown OrgUnitToPeriod Child/GroupMember Indicator -->
-        <action name="generatedrillDownOugUnitToPeriodChartIndicator" class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownOrgUnitToPeriodChartIndicatorResultAction">
-            <result name="success" type="velocity">/popup.vm</result>
-            <param name="page">/dhis-web-dashboard/graphicalAnalysisIndicatorResult.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>		
-<!-- GraphicalAnalyser  Indicators end	-->	
-				
+			class="org.hisp.dhis.dataanalyser.action.GetSortedIndicatorDataAction">
+			<result name="success" type="velocity-xml">
+				/dhis-web-dashboard/responseSortedData.vm</result>
+			<!--<interceptor-ref name="transactionStack"/>-->
+			<param name="onExceptionReturn">plainTextError</param>
+		</action>
+		<!-- Export Indicator data to Excel -->
+		<action name="exportIndicatorToExcel"
+			class="org.hisp.dhis.dataanalyser.action.ExportIndicatorToExcelAction">
+			<result name="success" type="stream">
+				<param name="contentType">application/vnd.ms-excel</param>
+				<param name="inputName">inputStream</param>
+				<param name="contentDisposition">filename="${fileName}"</param>
+				<param name="bufferSize">1024</param>
+			</result>
+		</action>
+		<!-- DrillDown periodToOrgUnit Child/GroupMember Indicator -->
+		<action name="generateDrillDownPeriodToOrgChildChartIndicator"
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownPeriodToOrgChildChartIndicatorResultAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisIndicatorResult.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		
+		<!-- DrillDown OrgUnitToPeriod Child/GroupMember Indicator -->
+		<action name="generatedrillDownOugUnitToPeriodChartIndicator"
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownOrgUnitToPeriodChartIndicatorResultAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/graphicalAnalysisIndicatorResult.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js,javascript/gadataelement.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		<!-- GraphicalAnalyser  Indicators end	-->
+		
 		<!-- GraphicalAnalyser Module Stuff -->
 		
 		<action name="graphicalAnalyser"
@@ -201,14 +216,14 @@
 		</action>
 		
 		<action name="drillDownResult"
-            class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownResultAction">
-            <result name="success" type="stream">
-                <param name="contentType">application/vnd.ms-excel</param>
-                <param name="inputName">inputStream</param>
-                <param name="contentDisposition">filename="${fileName}"</param>
-                <param name="bufferSize">1024</param>
-            </result>
-        </action>
+			class="org.hisp.dhis.dataanalyser.ga.action.charts.GenerateDrillDownResultAction">
+			<result name="success" type="stream">
+				<param name="contentType">application/vnd.ms-excel</param>
+				<param name="inputName">inputStream</param>
+				<param name="contentDisposition">filename="${fileName}"</param>
+				<param name="bufferSize">1024</param>
+			</result>
+		</action>
 		
 		<!-- AnnualAnalyser Module Stuff -->
 		
@@ -225,27 +240,28 @@
 		
 		<action name="generateAnnualData"
 			class="org.hisp.dhis.dataanalyser.aa.action.GenerateAnnualAnalysisDataAction">
-			<result name="success" type="velocity">/popup.vm</result>  
-			<param name="page">/dhis-web-dashboard/annualAnalysisResult.vm</param>
-			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,javascript/ga.js,javascript/hashtable.js</param>
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/annualAnalysisResult.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,javascript/ga.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
 		
-<!-- Export Annual data to Excel -->
-        <action name="exportAnnualDataToExcel"
-            class="org.hisp.dhis.dataanalyser.action.ExportAnnualDataToExcelAction">
-            <result name="success" type="stream">
-                <param name="contentType">application/vnd.ms-excel</param>
-                <param name="inputName">inputStream</param>
-                <param name="contentDisposition">filename="${fileName}"</param>
-                <param name="bufferSize">1024</param>
-            </result>
-        </action>       
-		
+		<!-- Export Annual data to Excel -->
+		<action name="exportAnnualDataToExcel"
+			class="org.hisp.dhis.dataanalyser.action.ExportAnnualDataToExcelAction">
+			<result name="success" type="stream">
+				<param name="contentType">application/vnd.ms-excel</param>
+				<param name="inputName">inputStream</param>
+				<param name="contentDisposition">filename="${fileName}"</param>
+				<param name="bufferSize">1024</param>
+			</result>
+		</action>
 		
 		<!-- Motion Chart -->
-
+		
 		<action name="motionChartForm"
 			class="org.hisp.dhis.dataanalyser.mchart.action.MotionChartFormAction">
 			<result name="success" type="velocity">/main.vm</result>
@@ -256,12 +272,13 @@
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
-					
+		
 		<action name="generateMotionChart"
 			class="org.hisp.dhis.dataanalyser.mchart.action.MotionChartResultAction">
-			<result name="success" type="velocity">/dhis-web-dashboard/motionChartResult.vm</result>
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/motionChartResult.vm</result>
 		</action>
-			
+		
 		<!-- SurveyAnalyser Module Stuff -->
 		
 		<action name="surveyAnalyser"
@@ -269,49 +286,50 @@
 			<result name="success" type="velocity">/main.vm</result>
 			<param name="page">/dhis-web-dashboard/surveyAnalysisFront.vm</param>
 			<param name="menu">/dhis-web-dashboard/menuWithTreeForSA.vm</param>
-			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/db.js,javascript/aa.js,javascript/hashtable.js,javascript/date.js</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/db.js,javascript/aa.js,javascript/hashtable.js,javascript/date.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
 		
-<!--		<action name="viewSurveyAnalysisResult"
-			class="org.hisp.dhis.dataanalyser.sa.action.GenerateSurveyAnalysisDataAction">
-			<result name="success" type="velocity">
-				/dhis-web-dashboard/surveyAnalysisResult.vm</result>
-			<param name="javascripts">
-				../dhis-web-commons/ouwt/ouwt.js,javascript/ga.js,javascript/hashtable.js</param>
-			<param name="stylesheets">css/StylesForTags.css</param>
+		<!--		<action name="viewSurveyAnalysisResult"
+		class="org.hisp.dhis.dataanalyser.sa.action.GenerateSurveyAnalysisDataAction">
+		<result name="success" type="velocity">
+		/dhis-web-dashboard/surveyAnalysisResult.vm</result>
+		<param name="javascripts">
+		../dhis-web-commons/ouwt/ouwt.js,javascript/ga.js,javascript/hashtable.js</param>
+		<param name="stylesheets">css/StylesForTags.css</param>
 		</action>-->
 		
-	   <action name="generateChartSurvey"
-            class="org.hisp.dhis.dataanalyser.sa.action.GenerateChartSurveyAction">
-		    <result name="success" type="velocity">/popup.vm</result>
-            <param name="page">/dhis-web-dashboard/surveyAnalysisResult.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-        </action>
-		
-		
-		
-<!--		<action name="viewSurveyAnalysisResult"
-            class="org.hisp.dhis.dataanalyser.sa.action.GenerateChartSurveyAction">
-            <result name="success" type="velocity">/dhis-web-dashboard/surveyAnalysisResult.vm</result>
-            <param name="javascripts">
-                ../dhis-web-commons/ouwt/ouwt.js,javascript/ga.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-        </action>
-	-->    	
+		<action name="generateChartSurvey"
+			class="org.hisp.dhis.dataanalyser.sa.action.GenerateChartSurveyAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/surveyAnalysisResult.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ga.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
+		
+		<!--		<action name="viewSurveyAnalysisResult"
+		class="org.hisp.dhis.dataanalyser.sa.action.GenerateChartSurveyAction">
+		<result name="success" type="velocity">/dhis-web-dashboard/surveyAnalysisResult.vm</result>
+		<param name="javascripts">
+		../dhis-web-commons/ouwt/ouwt.js,javascript/ga.js,javascript/hashtable.js</param>
+		<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
+		-->
 		
 		<!-- Export Survey data to Excel -->
-        <action name="exportSurveyDataToExcel"
-            class="org.hisp.dhis.dataanalyser.action.ExportSurveyDataToExcelAction">
-            <result name="success" type="stream">
-                <param name="contentType">application/vnd.ms-excel</param>
-                <param name="inputName">inputStream</param>
-                <param name="contentDisposition">filename="${fileName}"</param>
-                <param name="bufferSize">1024</param>
-            </result>
-        </action>       
+		<action name="exportSurveyDataToExcel"
+			class="org.hisp.dhis.dataanalyser.action.ExportSurveyDataToExcelAction">
+			<result name="success" type="stream">
+				<param name="contentType">application/vnd.ms-excel</param>
+				<param name="inputName">inputStream</param>
+				<param name="contentDisposition">filename="${fileName}"</param>
+				<param name="bufferSize">1024</param>
+			</result>
+		</action>
 		
 		<!-- Target Analyser Module Stuff -->
 		
@@ -319,8 +337,10 @@
 			class="org.hisp.dhis.dataanalyser.tr.action.GenerateTargetAnalysisFormAction">
 			<result name="success" type="velocity">/main.vm</result>
 			<param name="page">/dhis-web-dashboard/targetAnalysisFront.vm</param>
-			<param name="menu">/dhis-web-dashboard/menuWithTreeForTarget.vm</param>
-			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ta.js,javascript/db.js,javascript/tr.js,javascript/hashtable.js,javascript/date.js</param>
+			<param name="menu">
+				/dhis-web-dashboard/menuWithTreeForTarget.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ta.js,javascript/db.js,javascript/tr.js,javascript/hashtable.js,javascript/date.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
@@ -333,22 +353,49 @@
 		</action>
 		
 		<action name="generateChartDeTarget"
-            class="org.hisp.dhis.dataanalyser.tr.action.GenerateTargetAnalysisDataAction">
-            <result name="success" type="velocity">/popup.vm</result>
-            <param name="page">/dhis-web-dashboard/deTargetAnalysisResult.vm</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-        </action>
-
-        <action name="exportTargetDataToExcel"
-            class="org.hisp.dhis.dataanalyser.action.ExportTargetDataToExcelAction">
-            <result name="success" type="stream">
-                <param name="contentType">application/vnd.ms-excel</param>
-                <param name="inputName">inputStream</param>
-                <param name="contentDisposition">filename="${fileName}"</param>
-                <param name="bufferSize">1024</param>
-            </result>
-        </action>       
-		
+			class="org.hisp.dhis.dataanalyser.tr.action.GenerateTargetAnalysisDataAction">
+			<result name="success" type="velocity">/popup.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/deTargetAnalysisResult.vm</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
+		
+		<action name="exportTargetDataToExcel"
+			class="org.hisp.dhis.dataanalyser.action.ExportTargetDataToExcelAction">
+			<result name="success" type="stream">
+				<param name="contentType">application/vnd.ms-excel</param>
+				<param name="inputName">inputStream</param>
+				<param name="contentDisposition">filename="${fileName}"</param>
+				<param name="bufferSize">1024</param>
+			</result>
+		</action>
+		
+		<!-- View Comments Module Stuff -->
+		
+		<action name="viewCommentForm"
+			class="org.hisp.dhis.dataanalyser.vc.action.ViewCommentFormAction">
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">/dhis-web-dashboard/viewCommentFront.vm</param>
+			<param name="menu">/dhis-web-dashboard/menu.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/oust/oust.js,../dhis-web-commons/ouwt/ouwt.js,javascript/vc.js</param>
+		</action>
+		
+		<action name="viewCommentResult"
+			class="org.hisp.dhis.dataanalyser.vc.action.ViewCommentResultAction">
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">/dhis-web-dashboard/viewCommentResult.vm</param>
+			<param name="menu">/dhis-web-dashboard/menu.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/oust/oust.js,../dhis-web-commons/ouwt/ouwt.js,javascript/vc.js</param>
+		</action>
+		
+		<action name="exportValidationResult"
+			class="org.hisp.dhis.validationrule.action.ExportValidationResultAction">
+			<result name="csv" type="gridCsvResult"/>
+			<result name="xls" type="gridXlsResult"/>
+			<result name="pdf" type="gridPdfResult"/>
+		</action>
 		
 		<!-- DataStatus Module Stuff -->
 		
@@ -357,7 +404,8 @@
 			<result name="success" type="velocity">/main.vm</result>
 			<param name="page">/dhis-web-dashboard/dataStatusFront.vm</param>
 			<param name="menu">/dhis-web-dashboard/menuWithTreeForDS.vm</param>
-			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
@@ -366,109 +414,129 @@
 			class="org.hisp.dhis.dataanalyser.ds.action.GenerateDataStatusResultAction">
 			<result name="success" type="velocity">/popup.vm</result>
 			<param name="page">/dhis-web-dashboard/dataStatusResult.vm</param>
-			<param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 		</action>
 		
-	  <!-- Null report for DataEntry Status -->
-	   <action name="nullReportResult"
+		<!-- Null report for DataEntry Status -->
+		<action name="nullReportResult"
 			class="org.hisp.dhis.dataanalyser.ds.action.GenerateNullReportResultAction">
-			<result name="success" type="velocity">/content.vm</result>   
-			<param name="page">/dhis-web-dashboard/nullReportDataEntryStatusResult.vm</param>
-			<param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
+			<result name="success" type="velocity">/content.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/nullReportDataEntryStatusResult.vm</param>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
-	   </action>		
-			
-		
-		
-		
+		</action>
 		
 		<!-- DataStatus Data Set Wise -->
 		<action name="dataStatusDataSetWiseForm"
 			class="org.hisp.dhis.dataanalyser.ds.action.GenerateDataStatusDataSetWiseFormAction">
 			<result name="success" type="velocity">/main.vm</result>
-			<param name="page">/dhis-web-dashboard/dataStatusDataSetWiseFront.vm</param>
-			<param name="menu">/dhis-web-dashboard/menuWithTreeForDSDataSetWise.vm</param>
-			<param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
+			<param name="page">
+				/dhis-web-dashboard/dataStatusDataSetWiseFront.vm</param>
+			<param name="menu">
+				/dhis-web-dashboard/menuWithTreeForDSDataSetWise.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 			<interceptor-ref name="organisationUnitTreeStack"/>
 		</action>
 		
 		<action name="dataStatusDataSetWiseResult"
 			class="org.hisp.dhis.dataanalyser.ds.action.GenerateDataStatusDataSetWiseResultAction">
-			<result name="success" type="velocity">/dhis-web-dashboard/dataStatusDataSetWiseResult.vm</result>
-			<param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/dataStatusDataSetWiseResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
-		</action>		
+		</action>
 		
 		<action name="getPeriodsForDataSetWise"
 			class="org.hisp.dhis.dataanalyser.ds.action.GetPeriodsForDataSetWiseAction">
-			<result name="success" type="velocity-xml">/dhis-web-dashboard/responsePeriodForDataSetWise.vm</result>
+			<result name="success" type="velocity-xml">
+				/dhis-web-dashboard/responsePeriodForDataSetWise.vm</result>
 			<param name="onExceptionReturn">plainTextError</param>
-		</action>				
-
+		</action>
+		
 		<!-- DataStatus For Mobile start-->
 		
-        <action name="dataStatusMobileForm"
-            class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateDataStatusMobileFormAction">
-            <result name="success" type="velocity">/main.vm</result>
-            <param name="page">/dhis-web-dashboard/dataStatusMobileFront.vm</param>
-            <param name="menu">/dhis-web-dashboard/menuWithTreeForDSMobile.vm</param>
-            <param name="javascripts">../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>
-				
+		<action name="dataStatusMobileForm"
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateDataStatusMobileFormAction">
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/dataStatusMobileFront.vm</param>
+			<param name="menu">
+				/dhis-web-dashboard/menuWithTreeForDSMobile.vm</param>
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		
 		<!-- for Mobile Validation Status -->
-       <action name="validationMobileStatusResult"
-            class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateValidationMobileStatusResultAction">
-            <result name="success" type="velocity">/dhis-web-dashboard/validationMobileSatusResult.vm</result>
-            <param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-       </action>
+		<action name="validationMobileStatusResult"
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateValidationMobileStatusResultAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/validationMobileSatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
 		
 		<!--  for Mobile summary data status -->
-       <action name="summaryMobileStatusResult"
-            class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateSummaryMobileDataStatusResultAction">        
-            <result name="success" type="velocity">/dhis-web-dashboard/summaryMobileSatusResult.vm</result>
-            <param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-       </action>		
+		<action name="summaryMobileStatusResult"
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateSummaryMobileDataStatusResultAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/summaryMobileSatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
 		
 		<!--  for Mobile  dataStatus result -->
-       <action name="mobileDataStatusResult"
-            class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateMobileDataStatusResultAction">
-            <result name="success" type="velocity">/dhis-web-dashboard/mobileDataStatusResult.vm</result>
-            <param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-       </action>
+		<action name="mobileDataStatusResult"
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateMobileDataStatusResultAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/mobileDataStatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
 		
 		<action name="percentageDataStatusResult"
-            class="org.hisp.dhis.dataanalyser.ds.mobile.action.GeneratePercentageDataStatusResultAction">
-            <result name="success" type="velocity">/dhis-web-dashboard/percentageWiseDataStatusResult.vm</result>
-            <param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-       </action>
-		
-	 <!--  for Mobile Group wise data status -->			
-	  <action name="groupWiseMobileDataStatusResult"
-		   class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateGroupWiseMobileDataStatusResultAction">
-	       <result name="success" type="velocity">/dhis-web-dashboard/groupWiseMobileDataStatusResult.vm</result>
-	       <param name="javascripts">javascript/ds.js,javascript/hashtable.js,javascript/date.js</param>
-	       <param name="stylesheets">css/StylesForTags.css</param>
-     </action>
-		
-     <!-- for Mobile Last Updated Status -->    
-     <action name="lastUpdatedMobileDataSetResult"
-            class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateLastUpdatedMobileDataSetResultAction">
-            <result name="success" type="velocity">/dhis-web-dashboard/lastUpdatedMobileDataSetSatusResult.vm</result>
-            <param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-    </action>						
-        <!-- DataStatus For Mobile end  -->	
-			
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GeneratePercentageDataStatusResultAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/percentageWiseDataStatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
+		
+		<!--  for Mobile Group wise data status -->
+		<action name="groupWiseMobileDataStatusResult"
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateGroupWiseMobileDataStatusResultAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/groupWiseMobileDataStatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js,javascript/date.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
+		
+		<!-- for Mobile Last Updated Status -->
+		<action name="lastUpdatedMobileDataSetResult"
+			class="org.hisp.dhis.dataanalyser.ds.mobile.action.GenerateLastUpdatedMobileDataSetResultAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/lastUpdatedMobileDataSetSatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+		</action>
+		<!-- DataStatus For Mobile end  -->
+		
 		<action name="summaryStatusResult"
-			class="org.hisp.dhis.dataanalyser.ds.action.GenerateSummaryDataStatusResultAction">		
+			class="org.hisp.dhis.dataanalyser.ds.action.GenerateSummaryDataStatusResultAction">
 			<result name="success" type="velocity">
 				/dhis-web-dashboard/summarySatusResult.vm</result>
 			<param name="javascripts">
@@ -484,14 +552,16 @@
 				javascript/ds.js,javascript/hashtable.js,javascript/date.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 		</action>
-
-        <action name="validationStatusResult"
+		
+		<action name="validationStatusResult"
 			class="org.hisp.dhis.dataanalyser.ds.action.GenerateValidationStatusResultAction">
-			<result name="success" type="velocity">/dhis-web-dashboard/validationSatusResult.vm</result>
-			<param name="javascripts">javascript/ds.js,javascript/hashtable.js</param>
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/validationSatusResult.vm</result>
+			<param name="javascripts">
+				javascript/ds.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
 		</action>
-
+		
 		<action name="lastUpdatedDataSetResult"
 			class="org.hisp.dhis.dataanalyser.ds.action.GenerateLastUpdatedDataSetResultAction">
 			<result name="success" type="velocity">
@@ -506,7 +576,8 @@
 			<result name="success" type="stream">
 				<param name="contentType">application/vnd.ms-excel</param>
 				<param name="inputName">inputStream</param>
-				<param name="contentDisposition">attachment;filename="${fileName}"</param>
+				<param name="contentDisposition">
+					attachment;filename="${fileName}"</param>
 				<param name="bufferSize">1024</param>
 			</result>
 		</action>
@@ -529,7 +600,8 @@
 			<result name="success" type="velocity">/main.vm</result>
 			<param name="page">
 				/dhis-web-dashboard/dataStatusOrgnisationunitGroupSetWiseFront.vm</param>
-			<param name="menu">/dhis-web-dashboard/menuWithTreeForOrgUnitGroupWiseDS.vm</param>
+			<param name="menu">
+				/dhis-web-dashboard/menuWithTreeForOrgUnitGroupWiseDS.vm</param>
 			<param name="javascripts">
 				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ds.js,javascript/db.js,javascript/date.js,javascript/hashtable.js</param>
 			<param name="stylesheets">css/StylesForTags.css</param>
@@ -590,18 +662,18 @@
 		</action>
 		<!--
 		<action name="exportNullReporterToExcel"
-			class="org.hisp.dhis.dataanalyser.nr.action.ExportToExcelAction">
-			<result name="success" type="stream">
-				<param name="contentType">application/vnd.ms-excel</param>
-				<param name="inputName">inputStream</param>
-				<param name="contentDisposition">
-					attachment;filename="${fileName}"</param>
-				<param name="bufferSize">1024</param>
-			</result>
+		class="org.hisp.dhis.dataanalyser.nr.action.ExportToExcelAction">
+		<result name="success" type="stream">
+		<param name="contentType">application/vnd.ms-excel</param>
+		<param name="inputName">inputStream</param>
+		<param name="contentDisposition">
+		attachment;filename="${fileName}"</param>
+		<param name="bufferSize">1024</param>
+		</result>
 		</action>
-      -->
+		-->
 		
-    <action name="exportNullReporterToExcel"
+		<action name="exportNullReporterToExcel"
 			class="org.hisp.dhis.dataanalyser.nr.action.ExportToExcelAction">
 			<result name="success" type="stream">
 				<param name="contentType">application/vnd.ms-excel</param>
@@ -610,61 +682,61 @@
 				<param name="bufferSize">1024</param>
 			</result>
 		</action>
-    
+		
 		<!-- Maintenance 
 		<action name="maintenanceForm"
-			class="org.hisp.dhis.dataanalyser.maintenance.action.InConfigurationsFormAction">
-			<result name="success" type="velocity">/main.vm</result>
-			<param name="page">
-				/dhis-web-dashboard/mysqlPathConfuration.vm</param>
-			<param name="menu">/dhis-web-dashboard/menu.vm</param>
-			<param name="javascripts">
-				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
-			<param name="stylesheets">css/StylesForTags.css</param>
+		class="org.hisp.dhis.dataanalyser.maintenance.action.InConfigurationsFormAction">
+		<result name="success" type="velocity">/main.vm</result>
+		<param name="page">
+		/dhis-web-dashboard/mysqlPathConfuration.vm</param>
+		<param name="menu">/dhis-web-dashboard/menu.vm</param>
+		<param name="javascripts">
+		../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
+		<param name="stylesheets">css/StylesForTags.css</param>
 		</action>
 		
 		<action name="maintenanceResult"
-			class="org.hisp.dhis.dataanalyser.maintenance.action.InConfigurationsResultAction">
-			<result name="success" type="velocity">/main.vm</result>
-			<param name="page">/dhis-web-dashboard/welcome.vm</param>
-			<param name="menu">/dhis-web-dashboard/menu.vm</param>
-			<param name="javascripts">
-				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
-			<param name="stylesheets">css/StylesForTags.css</param>
+		class="org.hisp.dhis.dataanalyser.maintenance.action.InConfigurationsResultAction">
+		<result name="success" type="velocity">/main.vm</result>
+		<param name="page">/dhis-web-dashboard/welcome.vm</param>
+		<param name="menu">/dhis-web-dashboard/menu.vm</param>
+		<param name="javascripts">
+		../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
+		<param name="stylesheets">css/StylesForTags.css</param>
 		</action>
 		
 		<action name="takeMysqlBackupForm"
-			class="org.hisp.dhis.dataanalyser.action.dataanalyserHomePageAction">
-			<result name="success" type="velocity">/main.vm</result>
-			<param name="page">/dhis-web-dashboard/takeMysqlBackupForm.vm</param>
-			<param name="menu">/dhis-web-dashboard/menu.vm</param>
-			<param name="javascripts">
-				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
-			<param name="stylesheets">css/StylesForTags.css</param>
+		class="org.hisp.dhis.dataanalyser.action.dataanalyserHomePageAction">
+		<result name="success" type="velocity">/main.vm</result>
+		<param name="page">/dhis-web-dashboard/takeMysqlBackupForm.vm</param>
+		<param name="menu">/dhis-web-dashboard/menu.vm</param>
+		<param name="javascripts">
+		../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
+		<param name="stylesheets">css/StylesForTags.css</param>
 		</action>
 		
 		<action name="takeMysqlBackupResult"
-			class="org.hisp.dhis.dataanalyser.maintenance.action.TakeMySqlBackupAction">
-			<result name="success" type="velocity">/main.vm</result>
-			<param name="page">
-				/dhis-web-dashboard/takeMysqlBackupResult.vm</param>
-			<param name="menu">/dhis-web-dashboard/menu.vm</param>
-			<param name="javascripts">
-				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
-			<param name="stylesheets">css/StylesForTags.css</param>
-			<param name="requiredAuthorities">F_DASHBOARD_DOWNLOAD_BACKUP</param>
+		class="org.hisp.dhis.dataanalyser.maintenance.action.TakeMySqlBackupAction">
+		<result name="success" type="velocity">/main.vm</result>
+		<param name="page">
+		/dhis-web-dashboard/takeMysqlBackupResult.vm</param>
+		<param name="menu">/dhis-web-dashboard/menu.vm</param>
+		<param name="javascripts">
+		../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js</param>
+		<param name="stylesheets">css/StylesForTags.css</param>
+		<param name="requiredAuthorities">F_DASHBOARD_DOWNLOAD_BACKUP</param>
 		</action>
 		
 		<action name="streamMySQLBackup"
-			class="org.hisp.dhis.dataanalyser.maintenance.action.StreamMySqlBackupAction">
-			<result name="success" type="stream">
-				<param name="contentType">application/vnd.ms-excel</param>
-				<param name="inputName">inputStream</param>
-				<param name="contentDisposition">filename="${fileName}"</param>
-				<param name="bufferSize">1024</param>
-			</result>
+		class="org.hisp.dhis.dataanalyser.maintenance.action.StreamMySqlBackupAction">
+		<result name="success" type="stream">
+		<param name="contentType">application/vnd.ms-excel</param>
+		<param name="inputName">inputStream</param>
+		<param name="contentDisposition">filename="${fileName}"</param>
+		<param name="bufferSize">1024</param>
+		</result>
 		</action>
-			-->
+		-->
 		
 		<!-- DashBoard Matrix
 		
@@ -689,24 +761,25 @@
 		<!-- TabularAnalysis Module Stuff -->
 		
 		<action name="tabularAnalysisForm"
-            class="org.hisp.dhis.dataanalyser.ta.action.GenerateTabularAnalysisFormAction">
-            <result name="success" type="velocity">/main.vm</result>
-            <param name="page">/dhis-web-dashboard/tabularAnalysisFront.vm</param>
-            <param name="menu">/dhis-web-dashboard/menuWithTreeForTA.vm</param>
-            <param name="javascripts">
-                ../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ta.js,javascript/hashtable.js</param>
-            <param name="stylesheets">css/StylesForTags.css</param>
-            <interceptor-ref name="organisationUnitTreeStack"/>
-        </action>
-		
-		<!--
-		<action name="tabularAnalysisResult"
-			class="org.hisp.dhis.dataanalyser.ta.action.GenerateTabularAnalysisResultAction">
-			<result name="success" type="velocity">
-				/dhis-web-dashboard/tabularAnalysisResult.vm</result>
+			class="org.hisp.dhis.dataanalyser.ta.action.GenerateTabularAnalysisFormAction">
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">
+				/dhis-web-dashboard/tabularAnalysisFront.vm</param>
 			<param name="menu">/dhis-web-dashboard/menuWithTreeForTA.vm</param>
-		</action>
-			-->
+			<param name="javascripts">
+				../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/lists/lists.js,javascript/ta.js,javascript/hashtable.js</param>
+			<param name="stylesheets">css/StylesForTags.css</param>
+			<interceptor-ref name="organisationUnitTreeStack"/>
+		</action>
+		
+		<!--
+		<action name="tabularAnalysisResult"
+		class="org.hisp.dhis.dataanalyser.ta.action.GenerateTabularAnalysisResultAction">
+		<result name="success" type="velocity">
+		/dhis-web-dashboard/tabularAnalysisResult.vm</result>
+		<param name="menu">/dhis-web-dashboard/menuWithTreeForTA.vm</param>
+		</action>
+		-->
 		
 		<action name="tabularAnalysisResult"
 			class="org.hisp.dhis.dataanalyser.ta.action.GenerateTabularAnalysisResultAction">
@@ -724,12 +797,12 @@
 		
 		<!-- Getting Weekly Period -->
 		<action name="getWeeklyPeriod"
-            class="org.hisp.dhis.dataanalyser.action.GetWeeklyPeriodAction">
-            <result name="success" type="velocity-xml">/dhis-web-dashboard/responseWeeklyPeriods.vm</result>
-            <!--<interceptor-ref name="transactionStack"/>-->
-            <param name="onExceptionReturn">plainTextError</param>
-        </action>
-		
+			class="org.hisp.dhis.dataanalyser.action.GetWeeklyPeriodAction">
+			<result name="success" type="velocity-xml">
+				/dhis-web-dashboard/responseWeeklyPeriods.vm</result>
+			<!--<interceptor-ref name="transactionStack"/>-->
+			<param name="onExceptionReturn">plainTextError</param>
+		</action>
 		
 		<action name="getDataElements"
 			class="org.hisp.dhis.dataanalyser.action.GetDataElementsAction">
@@ -738,13 +811,14 @@
 			<!--<interceptor-ref name="transactionStack"/>-->
 			<param name="onExceptionReturn">plainTextError</param>
 		</action>
-
-        <action name="getDataElementsForTA"
-            class="org.hisp.dhis.dataanalyser.action.GetDataElementsForTabularAnalysisAction">
-            <result name="success" type="velocity-xml">/dhis-web-dashboard/responseDataElement.vm</result>
-            <param name="onExceptionReturn">plainTextError</param>
-        </action>
-				
+		
+		<action name="getDataElementsForTA"
+			class="org.hisp.dhis.dataanalyser.action.GetDataElementsForTabularAnalysisAction">
+			<result name="success" type="velocity-xml">
+				/dhis-web-dashboard/responseDataElement.vm</result>
+			<param name="onExceptionReturn">plainTextError</param>
+		</action>
+		
 		<action name="getOrgUnitDetails"
 			class="org.hisp.dhis.dataanalyser.action.GetOrgUnitsAction">
 			<result name="success" type="velocity-xml">
@@ -823,5 +897,32 @@
 			</result>
 		</action>
 		
+		<!-- DataStatus Mart Module Stuff -->
+		<action name="dataStatusMartForm"
+			class="org.hisp.dhis.dataanalyser.dsMart.action.GetPeriodTypesAction">
+			<interceptor-ref name="organisationUnitTreeStack"/>
+			<result name="success" type="velocity">/main.vm</result>
+			<param name="page">/dhis-web-dashboard/dataStatusMartFront.vm</param>
+			<param name="menu">/dhis-web-dashboard/menu.vm</param>
+			<param name="javascripts">../dhis-web-commons/oust/oust.js,
+				javascript/dataStatusMart.js</param>
+		</action>
+		
+		<action name="getPeriodsDSMart"
+			class="org.hisp.dhis.dataanalyser.dsMart.action.GetPeriodsForDSMart">
+			<result name="success" type="velocity">
+				/dhis-web-commons/ajax/xmlPeriods.vm</result>
+			<param name="onExceptionReturn">plainTextError</param>
+		</action>
+		
+		<action name="getDataSetsForPeriodType"
+			class="org.hisp.dhis.dataanalyser.dsMart.action.GetDataSetsForPeriodTypeAction">
+			<result name="success" type="velocity">
+				/dhis-web-dashboard/responseDataSet.vm</result>
+			<param name="onExceptionReturn">plainTextError</param>
+			
+		</action>
+		
+		
 	</package>
 </struts>
\ No newline at end of file

=== added file 'local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/dataStatusMartFront.vm'
--- local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/dataStatusMartFront.vm	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/dataStatusMartFront.vm	2011-06-07 05:58:08 +0000
@@ -0,0 +1,78 @@
+<h3>$i18n.getString( "data_locking_form" ) #openHelp( "dataLocking" )</h3>
+	
+<form id="dataStatusMartForm" name="dataStatusMartForm" action="calculateDataStatus.action" method="POST">
+	<input type="hidden" id="selectForDataStatusMart" name="selectForDataStatusMart"/>
+	<table>
+		<tr>
+			<td valign="top">
+				<table valign="top">
+					<tr><th>$i18n.getString( "period_type" )</th></tr>
+					<tr>
+						<td>
+							<select id="periodTypeId" name="periodTypeId" style="min-width:325px" onchange="getPeriods()">
+								<option value="">[ $i18n.getString( "select_period_type" ) ]</option>
+								#foreach ( $periodType in $periodTypes )
+								  <option value="$periodType.name"#if( $currentPeriodTypeId == $type.name ) selected="selected"#end>$periodType.name</option>
+								#end
+							</select>
+						</td>
+					</tr>
+					
+					<tr><td>&nbsp;</td></tr>
+					
+					<tr><th>$i18n.getString( "available_periods" )</th><td></td><th>$i18n.getString( "selected_periods" )</th></tr>
+					
+					<tr>	
+						<td>	
+							<select id="availablePeriods" name="availablePeriods" multiple="multiple" style="min-width:325px;height:11.25em" disabled="true" ondblclick="moveSelectedById( this.id, 'selectedPeriods' )">
+							</select>
+						</td>
+						<td style="text-align:center">			
+							<input type="button" value="&gt;" title="$i18n.getString('move_selected')" style="width:50px" onclick="moveSelectedById( 'availablePeriods', 'selectedPeriods' )" /><br/>
+							<input type="button" value="&lt;" title="$i18n.getString('remove_selected')" style="width:50px" onclick="moveSelectedById( 'selectedPeriods', 'availablePeriods' )" /><br/>
+							<input type="button" value="&gt;&gt;" title="$i18n.getString('move_all')" style="width:50px" onclick="moveAllById( 'availablePeriods', 'selectedPeriods' )"/><br/>
+							<input type="button" value="&lt;&lt;" title="$i18n.getString('remove_all')" style="width:50px" onclick="moveAllById( 'selectedPeriods', 'availablePeriods' )"/>			
+						</td>	
+						<td>
+							<select id="selectedPeriods" name="selectedPeriods" size="2" multiple="multiple" style="min-width:325px;height:11.25em" ondblclick="moveSelectedById( this.id, 'availablePeriods' )"></select>
+						</td>
+					</tr>
+						
+					<tr><td>&nbsp;</td></tr>
+					
+					<tr><th>$i18n.getString( "available_datasets" )</th><td></td><th>$i18n.getString( "selected_datasets" )</th></tr>
+					<tr>
+						<td>
+							<select id="availableDataSets" name="availableDataSets" multiple="multiple" style="min-width:325px;height:12.5em" ondblclick="moveSelectedById( this.id, 'selectedDataSets' )" disabled="true"></select>				
+						</td>
+						<td style="text-align:center">			
+							<input type="button" value="&gt;" title="$i18n.getString('move_selected')" style="width:50px" onclick="moveSelectedById( 'availableDataSets', 'selectedDataSets' )" /><br/>
+							<input type="button" value="&lt;" title="$i18n.getString('remove_selected')" style="width:50px" onclick="moveSelectedById( 'selectedDataSets', 'availableDataSets' )" /><br/>
+							<input type="button" value="&gt;&gt;" title="$i18n.getString('move_all')" style="width:50px" onclick="moveAllById( 'availableDataSets', 'selectedDataSets' )"/><br/>
+							<input type="button" value="&lt;&lt;" title="$i18n.getString('remove_all')" style="width:50px" onclick="moveAllById( 'selectedDataSets', 'availableDataSets' )"/>			
+						</td>	
+						<td>
+							<select id="selectedDataSets" name="selectedDataSets" size="2" multiple="multiple" style="min-width:325px;height:11.25em" ondblclick="moveSelectedById( this.id, 'availableDataSets' )"></select>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+	<table>
+		<tr>
+			<td>#organisationUnitSelectionTree( true, true, false )</td>										
+		</tr>
+		<tr></tr>
+		<tr>
+			<td>
+				<input type="submit" id="lock" name="lock" value="$i18n.getString( 'calculate' )" style="width:10em" disabled="true" />
+				###if( $auth.hasAccess( "dhis-web-maintenance-dataadmin", "collectiveDataLockingForUnlocking") )
+					##<input type="submit" id="unlock" name="unlock" onclick="setClickedButtonElementValue( false )" value="$i18n.getString( 'unlock' )" style="width:10em" disabled="true"/>
+			##	#end	
+			</td>
+		</tr>
+	</table>
+</form>
+
+<span id="message"></span>

=== added file 'local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/javascript/dataStatusMart.js'
--- local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/javascript/dataStatusMart.js	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/javascript/dataStatusMart.js	2011-06-07 05:58:08 +0000
@@ -0,0 +1,73 @@
+function getPeriods()
+{
+	var periodTypeList = byId("periodTypeId");
+	var periodTypeId = periodTypeList.options[periodTypeList.selectedIndex].value;
+
+	if (periodTypeId != null) {
+		var url = "getPeriodsDSMart.action?name=" + periodTypeId;
+		$.ajax( {
+			url :url,
+			cache :false,
+			success : function(response) {
+				dom = parseXML(response);
+				$('#availablePeriods >option').remove();
+				$(dom).find('period').each(
+						function() {
+							$('#availablePeriods').append(
+									"<option value="
+											+ $(this).find('id').text() + ">"
+											+ $(this).find('name').text()
+											+ "</option>");
+						});
+			}
+
+		});
+	}
+	
+	enable("lock");
+	enable("unlock");
+	enable("availablePeriods");
+	
+	getDataSets();
+
+}
+
+function parseXML(xml) {
+
+	if (window.ActiveXObject && window.GetObject) {
+		var dom = new ActiveXObject('Microsoft.XMLDOM');
+		dom.loadXML(xml);
+		return dom;
+	}
+	if (window.DOMParser)
+		return new DOMParser().parseFromString(xml, 'text/xml');
+	
+	throw new Error('No XML parser available');
+}
+
+function getDataSets() {
+
+	var periodTypeList = byId("periodTypeId");
+	var periodType = periodTypeList.options[periodTypeList.selectedIndex].value;
+
+	if (periodType != null) {
+		var url = "getDataSetsForPeriodType.action?periodType=" + periodType;
+		$.ajax( {
+			url :url,
+			cache :false,
+			success : function(response) {
+			$('#availableDataSets >option').remove();
+			$(response).find('dataSet').each(
+					function() {
+						$('#availableDataSets').append(
+								"<option value=" + $(this).find('id').text()
+										+ ">" + $(this).find('name').text()
+										+ "</option>");
+					});
+			enable("availableDataSets");
+			$('#selectedPeriods >option').remove();
+			$('#selectedDataSets >option').remove();
+		}
+		});
+	}
+}

=== modified file 'local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/menu.vm'
--- local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/menu.vm	2011-05-18 11:12:17 +0000
+++ local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/menu.vm	2011-06-07 05:58:08 +0000
@@ -11,9 +11,11 @@
 		        <li><a href="targetAnalyser.action">$i18n.getString( "target" )</a></li>
 		      <!--  <li><a href="motionChartForm.action">MotionChart</a></li> -->
 		   	</ul>
-		<li><a href="tabularAnalysisForm.action">$i18n.getString( "ta" )</a></li>   	
+		<li><a href="tabularAnalysisForm.action">$i18n.getString( "ta" )</a></li>
+		<li><a href="viewCommentForm.action">$i18n.getString( "vc" )</a></li>
 		<li>$i18n.getString( "ds_datastatus" )</li>
 			<ul>				
+		   		<li><a href="dataStatusMartForm.action">$i18n.getString( "ds_mart" )</a></li>
 		   		<li><a href="dataStatusForm.action">$i18n.getString( "ds_regular" )</a></li>
 		   		<li><a href="dataStatusMobileForm.action">$i18n.getString( "ds_mobile" )</a></li>
 				<li><a href="dataStatusOrgnisationunitGroupSetWiseForm.action">$i18n.getString( "orgunit_group_ds" )</a></li>

=== added file 'local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/responseDataSet.vm'
--- local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/responseDataSet.vm	1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-dashboard/src/main/webapp/dhis-web-dashboard/responseDataSet.vm	2011-06-07 05:58:08 +0000
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dataSets>
+		#foreach ( $dataSet in $dataSets )
+		<dataSet>
+			<id>$dataSet.id</id>
+			<name>$encoder.xmlEncode( $dataSet.name )</name>
+			<locked>$dataSet.locked</locked>
+		</dataSet>
+		#end
+</dataSets>