1
package org.hisp.dhis.dashboard.ga.action.charts;
4
* Copyright (c) 2004-2007, University of Oslo
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are met:
9
* * Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
* * Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
* * Neither the name of the HISP project nor the names of its contributors may
15
* be used to endorse or promote products derived from this software without
16
* specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
import java.sql.Connection;
32
import java.sql.PreparedStatement;
33
import java.sql.ResultSet;
34
import java.util.ArrayList;
35
import java.util.Collection;
36
import java.util.Collections;
37
import java.util.Comparator;
38
import java.util.HashMap;
39
import java.util.Iterator;
40
import java.util.List;
43
import javax.servlet.http.HttpServletRequest;
44
import javax.servlet.http.HttpSession;
45
import javax.xml.parsers.DocumentBuilder;
46
import javax.xml.parsers.DocumentBuilderFactory;
48
import org.hisp.dhis.aggregation.AggregationService;
49
import org.hisp.dhis.jdbc.StatementManager;
50
import org.hisp.dhis.dashboard.util.DBConnection;
51
import org.hisp.dhis.dashboard.util.DashBoardService;
52
import org.hisp.dhis.dashboard.util.SurveyData;
53
import org.hisp.dhis.dataelement.DataElement;
54
import org.hisp.dhis.dataelement.DataElementCategoryCombo;
55
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
56
import org.hisp.dhis.dataelement.DataElementCategoryOptionComboService;
57
import org.hisp.dhis.dataelement.DataElementGroup;
58
import org.hisp.dhis.dataelement.DataElementService;
59
import org.hisp.dhis.indicator.Indicator;
60
import org.hisp.dhis.indicator.IndicatorService;
61
import org.hisp.dhis.options.displayproperty.DisplayPropertyHandler;
62
import org.hisp.dhis.organisationunit.OrganisationUnit;
63
import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
64
import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
65
import org.hisp.dhis.organisationunit.OrganisationUnitService;
66
import org.hisp.dhis.organisationunit.comparator.OrganisationUnitShortNameComparator;
67
import org.hisp.dhis.period.Period;
68
import org.hisp.dhis.period.PeriodStore;
69
import org.hisp.dhis.period.PeriodType;
70
import org.hisp.dhis.target.Target;
71
import org.hisp.dhis.target.TargetService;
72
import org.w3c.dom.Document;
73
import org.w3c.dom.Element;
74
import org.w3c.dom.NodeList;
75
import org.xml.sax.SAXException;
76
import org.xml.sax.SAXParseException;
78
import com.opensymphony.webwork.ServletActionContext;
79
import com.opensymphony.xwork.Action;
80
import com.opensymphony.xwork.ActionContext;
82
public class GenerateChartDataAction
88
private TargetService targetService;
90
public void setTargetService( TargetService targetService )
92
this.targetService = targetService;
95
private DataElementCategoryOptionComboService dataElementCategoryOptionComboService;
97
public void setDataElementCategoryOptionComboService(
98
DataElementCategoryOptionComboService dataElementCategoryOptionComboService )
100
this.dataElementCategoryOptionComboService = dataElementCategoryOptionComboService;
103
private OrganisationUnitService organisationUnitService;
105
public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
107
this.organisationUnitService = organisationUnitService;
110
private PeriodStore periodStore;
112
public void setPeriodStore( PeriodStore periodStore )
114
this.periodStore = periodStore;
117
private IndicatorService indicatorService;
119
public void setIndicatorService( IndicatorService indicatorService )
121
this.indicatorService = indicatorService;
124
private DataElementService dataElementService;
126
public void setDataElementService( DataElementService dataElementService )
128
this.dataElementService = dataElementService;
131
private DashBoardService dashBoardService;
133
public void setDashBoardService( DashBoardService dashBoardService )
135
this.dashBoardService = dashBoardService;
138
private AggregationService aggregationService;
140
public void setAggregationService( AggregationService aggregationService )
142
this.aggregationService = aggregationService;
145
private StatementManager statementManager;
147
public void setStatementManager( StatementManager statementManager )
149
this.statementManager = statementManager;
152
private OrganisationUnitGroupService organisationUnitGroupService;
154
public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService )
156
this.organisationUnitGroupService = organisationUnitGroupService;
159
// -------------------------------------------------------------------------
161
// -------------------------------------------------------------------------
163
private Comparator<DataElement> dataElementComparator;
165
public void setDataElementComparator( Comparator<DataElement> dataElementComparator )
167
this.dataElementComparator = dataElementComparator;
170
private Comparator<Indicator> indicatorComparator;
172
public void setIndicatorComparator( Comparator<Indicator> indicatorComparator )
174
this.indicatorComparator = indicatorComparator;
177
// -------------------------------------------------------------------------
178
// DisplayPropertyHandler
179
// -------------------------------------------------------------------------
181
private DisplayPropertyHandler displayPropertyHandler;
183
public void setDisplayPropertyHandler( DisplayPropertyHandler displayPropertyHandler )
185
this.displayPropertyHandler = displayPropertyHandler;
188
// --------------------------------------------------------------------------
190
// --------------------------------------------------------------------------
191
private HttpSession session;
193
public HttpSession getSession()
199
private Period startPeriod;
201
private Period endPeriod;
203
private OrganisationUnit selectedOrgUnit;
205
private OrganisationUnitGroup selectedOrgUnitGroup;
207
private List<Period> selectedPeriodList;
209
private Map<String, Double> targetValues;
211
private List<Double> targetList;
213
public List<Double> getTargetList()
218
private List<DataElementCategoryOptionCombo> selectedOptionComboList;
220
private List<Object> selectedServiceList;
222
public List<Object> getSelectedServiceList()
224
return selectedServiceList;
227
private String[] series1;
229
public String[] getSeries1()
234
private String[] categories1;
236
public String[] getCategories1()
241
private String[] series2;
243
public String[] getSeries2()
248
private String[] categories2;
250
public String[] getCategories2()
255
String chartTitle = "Service : ";
257
public String getChartTitle()
264
public String getXAxis_Title()
271
public String getYAxis_Title()
276
List<String> numeratorDEList;
278
public List<String> getNumeratorDEList()
280
return numeratorDEList;
283
List<String> denominatorDEList;
285
public List<String> getDenominatorDEList()
287
return denominatorDEList;
292
public Double[][] getData1()
299
public Double[][] getData2()
304
List<List<String>> dataList;
306
public List<List<String>> getDataList()
311
List<List<String>> numList;
312
List<List<String>> denList;
316
List<String> xseriesList;
318
public List<String> getXseriesList()
323
List<String> yseriesList;
325
public List<String> getYseriesList()
330
Map<Indicator, List<Target>> indicatorTargetList;
332
public Map<Indicator, List<Target>> getIndicatorTargetList()
334
return indicatorTargetList;
337
Map<Indicator, List<SurveyData>> indicatorSurveyList;
340
/* Input Parameters */
341
private String ougSetCB;
343
public void setOugSetCB( String ougSetCB )
345
this.ougSetCB = ougSetCB;
348
private String deSelection;
350
public void setDeSelection( String deSelection )
352
this.deSelection = deSelection;
355
private List<String> selectedDataElements;
357
public void setSelectedDataElements( List<String> selectedDataElements )
359
this.selectedDataElements = selectedDataElements;
362
private List<String> selectedIndicators;
364
public void setSelectedIndicators( List<String> selectedIndicators )
366
this.selectedIndicators = selectedIndicators;
371
public void setSDateLB( int dateLB )
378
public void setEDateLB( int dateLB )
383
private String riRadio;
385
public void setRiRadio( String riRadio )
387
this.riRadio = riRadio;
390
public String getRiRadio()
395
private String categoryLB;
397
public String getCategoryLB()
402
public void setCategoryLB( String categoryLB )
404
this.categoryLB = categoryLB;
407
private String selectedButton;
409
public String getSelectedButton()
411
return selectedButton;
414
public void setSelectedButton( String selectedButton )
416
this.selectedButton = selectedButton;
419
private List<String> orgUnitListCB;
421
public void setOrgUnitListCB( List<String> orgUnitListCB )
423
this.orgUnitListCB = orgUnitListCB;
426
private String facilityLB;
428
public void setFacilityLB( String facilityLB )
430
this.facilityLB = facilityLB;
433
public List<List<String>> getNumList()
438
public List<List<String>> getDenList()
443
public Map<Indicator, List<SurveyData>> getIndicatorSurveyList()
445
return indicatorSurveyList;
448
public String execute()
451
statementManager.initialise();
453
indicatorTargetList = new HashMap<Indicator, List<Target>>();
454
indicatorSurveyList = new HashMap<Indicator, List<SurveyData>>();
455
dataList = new ArrayList<List<String>>();
456
numList = new ArrayList<List<String>>();
457
denList = new ArrayList<List<String>>();
458
targetList = new ArrayList<Double>();
459
selectedOptionComboList = new ArrayList<DataElementCategoryOptionCombo>();
461
// OrgUnit Related Info
462
if ( ougSetCB == null )
464
selectedOrgUnit = new OrganisationUnit();
465
selectedOrgUnit = organisationUnitService.getOrganisationUnit( Integer.parseInt( orgUnitListCB.get( 0 ) ) );
469
selectedOrgUnitGroup = new OrganisationUnitGroup();
470
selectedOrgUnitGroup = organisationUnitGroupService.getOrganisationUnitGroup( Integer
471
.parseInt( orgUnitListCB.get( 0 ) ) );
474
// Service Related Info
476
numeratorDEList = new ArrayList<String>();
477
denominatorDEList = new ArrayList<String>();
478
// selectedServiceList = new ArrayList<Object>();
479
xseriesList = new ArrayList<String>();
480
yseriesList = new ArrayList<String>();
482
List<Indicator> li1 = new ArrayList<Indicator>();
484
if ( riRadio.equals( "indicatorsRadio" ) )
486
Iterator indicatorIterator = selectedIndicators.iterator();
487
while ( indicatorIterator.hasNext() )
489
int serviceID = Integer.parseInt( (String) indicatorIterator.next() );
490
Indicator indicator = indicatorService.getIndicator( serviceID );
491
// selectedServiceList.add( indicator );
492
li1.add( indicator );
493
chartTitle += indicator.getName() + ", ";
495
// numeratorDEList.add( getIndicatorDataElements(
496
// indicator.getNumerator() ) );
497
// denominatorDEList.add( getIndicatorDataElements(
498
// indicator.getDenominator() ) );
499
numeratorDEList.add( indicator.getNumeratorDescription() );
500
denominatorDEList.add( indicator.getDenominatorDescription() );
503
Collections.sort( li1, indicatorComparator );
504
selectedServiceList = new ArrayList<Object>( li1 );
508
List<DataElement> li2 = new ArrayList<DataElement>();
509
if ( deSelection == null )
511
System.out.println( "deOptionValue is null" );
516
System.out.println( "deOptionValue : " + deSelection );
518
if ( deSelection.equalsIgnoreCase( "optioncombo" ) )
520
Iterator deIterator = selectedDataElements.iterator();
521
while ( deIterator.hasNext() )
523
String serviceId = (String) deIterator.next();
524
String partsOfServiceId[] = serviceId.split( ":" );
525
int dataElementId = Integer.parseInt( partsOfServiceId[0] );
526
DataElement dataElement = dataElementService.getDataElement( dataElementId );
527
// selectedServiceList.add( dataElement );
528
li2.add( dataElement );
529
int optionComboId = Integer.parseInt( partsOfServiceId[1] );
530
DataElementCategoryOptionCombo decoc = dataElementCategoryOptionComboService
531
.getDataElementCategoryOptionCombo( optionComboId );
532
selectedOptionComboList.add( decoc );
533
chartTitle += dataElement.getName() + " : "
534
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) + ", ";
539
Iterator deIterator = selectedDataElements.iterator();
540
while ( deIterator.hasNext() )
542
int serviceID = Integer.parseInt( (String) deIterator.next() );
543
DataElement dataElement = dataElementService.getDataElement( serviceID );
544
// selectedServiceList.add( dataElement );
545
li2.add( dataElement );
546
chartTitle += dataElement.getName() + ", ";
549
Collections.sort( li2, dataElementComparator );
550
selectedServiceList = new ArrayList<Object>( li2 );
554
targetValues = new HashMap<String, Double>();
556
* if(riRadio.equals( "indicatorsRadio" )) { getTargetValues(); }
559
/* Hack to Intialize Indicator Targets to Zeros */
560
if ( riRadio.equals( "indicatorsRadio" ) )
562
Iterator serviceIterator = selectedServiceList.iterator();
563
while ( serviceIterator.hasNext() )
565
Indicator indicator = (Indicator) serviceIterator.next();
566
targetValues.put( "" + indicator.getId(), new Double( 0.0 ) );
567
targetList.add( targetValues.get( "" + indicator.getId() ) );
571
// Period Related Info
572
startPeriod = periodStore.getPeriod( sDateLB );
573
endPeriod = periodStore.getPeriod( eDateLB );
575
int monthlyPeriodTypeId = 0;
576
Collection periodTypes = periodStore.getAllPeriodTypes();
577
PeriodType monthlyPeriodType = null;
578
Iterator iter = periodTypes.iterator();
579
while ( iter.hasNext() )
581
PeriodType periodType = (PeriodType) iter.next();
582
if ( periodType.getName().toLowerCase().trim().equals( "monthly" ) )
584
monthlyPeriodType = periodType;
588
if ( monthlyPeriodType != null )
590
// System.out.println( "Monthly Period id : " +
591
// monthlyPeriodType.getId() );
592
monthlyPeriodTypeId = monthlyPeriodType.getId();
595
* else { System.out.println( "Monthly Period Type is NULL" ); }
598
selectedPeriodList = dashBoardService.getMonthlyPeriods( startPeriod.getStartDate(), endPeriod.getEndDate() );
600
if ( categoryLB.equals( "facility" ) && facilityLB.equals( "random" ) )
602
chartTitle += "\n OrganisationUnit : --- \nPeriod : " + startPeriod.getStartDate() + " To "
603
+ endPeriod.getEndDate();
607
if ( ougSetCB == null )
609
chartTitle += "\n OrganisationUnit : " + selectedOrgUnit.getShortName() + "\nPeriod : "
610
+ startPeriod.getStartDate() + " To " + endPeriod.getEndDate();
614
chartTitle += "\n OrganisationUnit : --- \nPeriod : "
615
+ startPeriod.getStartDate() + " To " + endPeriod.getEndDate();
619
if ( categoryLB.equals( "period" ) )
621
data1 = getServiceValuesByPeriod();
622
xAxis_Title = "Time Line";
626
data1 = getServiceValuesByFacility();
627
xAxis_Title = "Facilities";
630
if ( riRadio.equals( "indicatorsRadio" ) )
632
yAxis_Title = "Percentage/Rate";
636
yAxis_Title = "Value";
640
while ( count1 != categories1.length )
642
xseriesList.add( categories1[count1] );
646
// if(selectedButton.equals("ViewSummary")) return "ViewSummary";
648
ActionContext ctx = ActionContext.getContext();
649
HttpServletRequest req = (HttpServletRequest) ctx.get( ServletActionContext.HTTP_REQUEST );
651
session = req.getSession();
652
session.setAttribute( "data1", data1 );
653
session.setAttribute( "data2", data2 );
654
session.setAttribute( "series1", series1 );
655
session.setAttribute( "categories1", categories1 );
656
session.setAttribute( "series2", series2 );
657
session.setAttribute( "categories2", categories2 );
658
session.setAttribute( "chartTitle", chartTitle );
659
session.setAttribute( "xAxisTitle", xAxis_Title );
660
session.setAttribute( "yAxisTitle", yAxis_Title );
662
statementManager.destroy();
668
* Returns the values for selected services by period wise for ex:- the
669
* periods are jan-2006,feb-2006,mar-2006 and the services are service1 and
670
* service2 then it returns the values for service1 -
671
* jan2006,feb2006,mar2006 and service2 - jan2006,feb2006,mar2006 for the
674
public Double[][] getServiceValuesByPeriod()
676
Double[][] serviceValues = new Double[selectedServiceList.size()][selectedPeriodList.size()];
677
data2 = new Double[selectedServiceList.size()][selectedPeriodList.size()];
679
int countForServiceList = 0;
680
int countForPeriodList = 0;
682
Indicator ind = new Indicator();
683
DataElement dElement = new DataElement();
684
DataElementCategoryOptionCombo decoc = new DataElementCategoryOptionCombo();
685
Period p = new Period();
688
* if ( selectedServiceList == null ) System.out.println( "Service List
689
* is empty" ); if ( selectedPeriodList == null ) System.out.println(
690
* "Period List is Empty" );
692
series1 = new String[selectedServiceList.size()];
693
series2 = new String[selectedServiceList.size()];
694
categories1 = new String[selectedPeriodList.size()];
695
categories2 = new String[selectedPeriodList.size()];
696
Iterator serviceListIterator = selectedServiceList.iterator();
697
while ( serviceListIterator.hasNext() )
699
List<String> numValues = new ArrayList<String>();
700
List<String> denValues = new ArrayList<String>();
701
List<String> dataValues = new ArrayList<String>();
702
List<Target> targetList = new ArrayList<Target>();
703
List<SurveyData> surveyList = new ArrayList<SurveyData>();
705
if ( riRadio.equals( "indicatorsRadio" ) )
707
ind = (Indicator) serviceListIterator.next();
708
// System.out.println( ind.getName() );
709
series1[countForServiceList] = ind.getName();
710
series2[countForServiceList] = ind.getName() + "(Target)";
711
yseriesList.add( ind.getName() );
713
List<Period> tempPeriodList = new ArrayList<Period>( periodStore.getIntersectingPeriods( startPeriod
714
.getStartDate(), endPeriod.getEndDate() ) );
715
Iterator tempPeriodListIterator = tempPeriodList.iterator();
716
while ( tempPeriodListIterator.hasNext() )
718
Period tempPeriod = (Period) tempPeriodListIterator.next();
719
if ( ougSetCB == null )
721
List<Target> tempTarget = new ArrayList<Target>( targetService.getTargets( ind, tempPeriod,
723
List<SurveyData> tempSurvey = new ArrayList<SurveyData>( getSurveyList(ind, selectedOrgUnit));
724
surveyList = new ArrayList<SurveyData>();
725
if ( tempTarget != null )
726
targetList.addAll( tempTarget );
727
if(tempSurvey !=null && tempSurvey.size() > 0)
728
surveyList.addAll( tempSurvey );
732
List<Target> tempTarget = new ArrayList<Target>( targetService.getTargets( ind, tempPeriod,
733
selectedOrgUnitGroup.getMembers().iterator().next() ) );
734
if ( tempTarget != null )
735
targetList.addAll( tempTarget );
736
List<SurveyData> tempSurvey = new ArrayList<SurveyData>( getSurveyList(ind, selectedOrgUnitGroup.getMembers().iterator().next()));
737
surveyList = new ArrayList<SurveyData>();
738
if(tempSurvey !=null && tempSurvey.size() > 0)
739
surveyList.addAll( tempSurvey );
743
indicatorTargetList.put( ind, targetList );
744
indicatorSurveyList.put( ind, surveyList );
748
dElement = (DataElement) serviceListIterator.next();
749
if ( deSelection.equalsIgnoreCase( "optioncombo" ) )
751
decoc = selectedOptionComboList.get( countForServiceList );
752
/*if ( dElement.getAlternativeName() != null )
754
series1[countForServiceList] = dElement.getAlternativeName() + " : "
755
+ dataElementCategoryOptionComboService.getOptionNames( decoc );
756
series2[countForServiceList] = dElement.getAlternativeName() + " : "
757
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) + " (Target)";
761
series1[countForServiceList] = dElement.getName() + " : "
762
+ dataElementCategoryOptionComboService.getOptionNames( decoc );
763
series2[countForServiceList] = dElement.getName() + " : "
764
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) + " (Target)";
766
yseriesList.add( dElement.getName() + " : "
767
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) );
772
if ( dElement.getAlternativeName() != null )
774
series1[countForServiceList] = dElement.getAlternativeName();
775
series2[countForServiceList] = dElement.getAlternativeName() + " (Target)";
779
series1[countForServiceList] = dElement.getName();
780
series2[countForServiceList] = dElement.getName() + " (Target)";
782
yseriesList.add( dElement.getName() );
785
Iterator periodListIterator = selectedPeriodList.iterator();
786
countForPeriodList = 0;
787
while ( periodListIterator.hasNext() )
792
p = (Period) periodListIterator.next();
794
* if ( p == null ) System.out.println( "In Period While Loop :
795
* but it is Empty" ); else System.out.println( "In Period While
796
* Loop : but it is not Empty" );
798
if ( riRadio.equals( "indicatorsRadio" ) )
801
if ( ougSetCB == null )
803
serviceValues[countForServiceList][countForPeriodList] = aggregationService
804
.getAggregatedIndicatorValue( ind, p.getStartDate(), p.getEndDate(), selectedOrgUnit );
805
numVal = aggregationService.getAggregatedNumeratorValue( ind, p.getStartDate(), p.getEndDate(), selectedOrgUnit );
806
denVal = aggregationService.getAggregatedDenominatorValue( ind, p.getStartDate(), p.getEndDate(), selectedOrgUnit );
810
double aggValue = 0.0;
811
List<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>( selectedOrgUnitGroup
813
Iterator<OrganisationUnit> orgUnitsIterator = orgUnits.iterator();
814
while ( orgUnitsIterator.hasNext() )
816
OrganisationUnit ou = (OrganisationUnit) orgUnitsIterator.next();
817
double tempd = aggregationService.getAggregatedIndicatorValue( ind, p.getStartDate(), p
819
double tempnum = aggregationService.getAggregatedNumeratorValue( ind, p.getStartDate(), p
821
double tempden = aggregationService.getAggregatedDenominatorValue( ind, p.getStartDate(), p
823
if(tempd == -1) tempd = 0.0;
824
if(tempnum == -1) tempnum = 0.0;
825
if(tempden == -1) tempden = 0.0;
831
serviceValues[countForServiceList][countForPeriodList] = aggValue / orgUnits.size();
832
numVal /= orgUnits.size();
833
denVal /= orgUnits.size();
838
if ( deSelection.equalsIgnoreCase( "optioncombo" ) )
840
if ( ougSetCB == null )
842
serviceValues[countForServiceList][countForPeriodList] = aggregationService
843
.getAggregatedDataValue( dElement, decoc, p.getStartDate(), p.getEndDate(),
848
double aggValue = 0.0;
849
List<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>( selectedOrgUnitGroup
851
Iterator<OrganisationUnit> orgUnitsIterator = orgUnits.iterator();
852
while ( orgUnitsIterator.hasNext() )
854
OrganisationUnit ou = (OrganisationUnit) orgUnitsIterator.next();
855
double tempd = aggregationService.getAggregatedDataValue( dElement, decoc, p
856
.getStartDate(), p.getEndDate(), ou );
861
serviceValues[countForServiceList][countForPeriodList] = aggValue;
866
double aggDataValue = 0.0;
867
serviceValues[countForServiceList][countForPeriodList] = 0.0;
868
DataElementCategoryCombo dataElementCategoryCombo = dElement.getCategoryCombo();
870
List<DataElementCategoryOptionCombo> optionCombos = new ArrayList<DataElementCategoryOptionCombo>(
871
dataElementCategoryCombo.getOptionCombos() );
873
Iterator<DataElementCategoryOptionCombo> optionComboIterator = optionCombos.iterator();
874
while ( optionComboIterator.hasNext() )
876
DataElementCategoryOptionCombo decoc1 = (DataElementCategoryOptionCombo) optionComboIterator
879
if ( ougSetCB == null )
881
aggDataValue = aggregationService.getAggregatedDataValue( dElement, decoc1, p
882
.getStartDate(), p.getEndDate(), selectedOrgUnit );
886
List<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>( selectedOrgUnitGroup
888
Iterator<OrganisationUnit> orgUnitsIterator = orgUnits.iterator();
889
while ( orgUnitsIterator.hasNext() )
891
OrganisationUnit ou = (OrganisationUnit) orgUnitsIterator.next();
892
double tempd = aggregationService.getAggregatedDataValue( dElement, decoc1, p
893
.getStartDate(), p.getEndDate(), ou );
896
aggDataValue += tempd;
899
if ( aggDataValue == -1 )
901
serviceValues[countForServiceList][countForPeriodList] += aggDataValue;
905
serviceValues[countForServiceList][countForPeriodList] = Math
906
.round( serviceValues[countForServiceList][countForPeriodList] * Math.pow( 10, 2 ) )
908
numVal = Math.round( numVal * Math.pow( 10, 2 ) ) / Math.pow( 10, 2 );
909
denVal = Math.round( denVal * Math.pow( 10, 2 ) ) / Math.pow( 10, 2 );
911
if ( serviceValues[countForServiceList][countForPeriodList] == -1 )
912
serviceValues[countForServiceList][countForPeriodList] = 0.0;
913
categories1[countForPeriodList] = p.getStartDate().toString();
914
categories2[countForPeriodList] = p.getStartDate().toString();
916
if ( riRadio.equals( "indicatorsRadio" ) )
917
data2[countForServiceList][countForPeriodList] = (targetValues.get( "" + ind.getId() ))
920
data2[countForServiceList][countForPeriodList] = 0.0;
922
if ( riRadio.equals( "dataElementsRadio" ) )
924
if ( dElement.getType().equalsIgnoreCase( "int" ) )
925
dataValues.add( "" + serviceValues[countForServiceList][countForPeriodList] );
927
dataValues.add( " " );
931
dataValues.add( "" + serviceValues[countForServiceList][countForPeriodList] );
932
numValues.add(""+ numVal);
933
denValues.add(""+ denVal);
936
countForPeriodList++;
937
}// periodList loop end
938
dataList.add( dataValues );
939
numList.add( numValues );
940
denList.add( denValues );
941
countForServiceList++;
942
} // serviceList loop end
943
return serviceValues;
944
}// getServiceValues method end
947
* Returns the period aggregated values for the children of selected orgunit
948
* and list of selected services for ex:- PeriodList is
949
* jan2006,feb2006,mar2006 ServiceList is service1 and service2 then it
950
* returns the period aggregated values for service1 - child1, child2,
951
* child3 service2 - child2, child2, child3 for the selected orgunit
953
public Double[][] getServiceValuesByFacility()
956
int countForServiceList = 0;
957
int countForChildOrgUnitList = 0;
958
// int noOfPeriods = selectedPeriodList.size();
961
Indicator ind = new Indicator();
962
DataElement dElement = new DataElement();
963
DataElementCategoryOptionCombo decoc = new DataElementCategoryOptionCombo();
965
List<Object> childOrgUnitList = new ArrayList<Object>();
966
if ( facilityLB.equals( "children" ) )
968
if ( ougSetCB == null )
970
childOrgUnitList = new ArrayList<Object>( dashBoardService.getAllChildren( selectedOrgUnit ) );
974
//childOrgUnitList = new ArrayList<Object>( selectedOrgUnitGroup.getMembers() );
975
childOrgUnitList = new ArrayList<Object>();
976
Iterator orgUnitGroupIte = orgUnitListCB.iterator();
977
while ( orgUnitGroupIte.hasNext() )
979
OrganisationUnitGroup oug = organisationUnitGroupService.getOrganisationUnitGroup( Integer
980
.parseInt( (String) orgUnitGroupIte.next() ) );
981
List<OrganisationUnit> tempOUList = new ArrayList<OrganisationUnit>(oug.getMembers());
982
Collections.sort( tempOUList, new OrganisationUnitShortNameComparator() );
983
childOrgUnitList.addAll( tempOUList );
989
if ( ougSetCB == null )
991
Iterator orgUnitIterator = orgUnitListCB.iterator();
992
while ( orgUnitIterator.hasNext() )
994
OrganisationUnit o = organisationUnitService.getOrganisationUnit( Integer
995
.parseInt( (String) orgUnitIterator.next() ) );
996
childOrgUnitList.add( o );
1001
Iterator orgUnitGroupIte = orgUnitListCB.iterator();
1002
while ( orgUnitGroupIte.hasNext() )
1004
OrganisationUnitGroup oug = organisationUnitGroupService.getOrganisationUnitGroup( Integer
1005
.parseInt( (String) orgUnitGroupIte.next() ) );
1006
childOrgUnitList.add( oug );
1010
Iterator serviceListIterator = selectedServiceList.iterator();
1011
Double[][] serviceValues = new Double[selectedServiceList.size()][childOrgUnitList.size()];
1013
data2 = new Double[selectedServiceList.size()][childOrgUnitList.size()];
1014
series1 = new String[selectedServiceList.size()];
1015
series2 = new String[selectedServiceList.size()];
1016
categories1 = new String[childOrgUnitList.size()];
1017
categories2 = new String[childOrgUnitList.size()];
1018
while ( serviceListIterator.hasNext() )
1020
int noOfChildren = 1;
1022
List<String> numValues = new ArrayList<String>();
1023
List<String> denValues = new ArrayList<String>();
1024
List<String> dataValues = new ArrayList<String>();
1025
List<Target> targetList = new ArrayList<Target>();
1026
List<SurveyData> surveyList = new ArrayList<SurveyData>();
1027
if ( riRadio.equals( "indicatorsRadio" ) )
1029
ind = (Indicator) serviceListIterator.next();
1030
// System.out.println( ind.getName() );
1031
series1[countForServiceList] = ind.getName();
1032
series2[countForServiceList] = ind.getName() + "(Target)";
1033
yseriesList.add( ind.getName() );
1035
List<Period> tempPeriodList = new ArrayList<Period>( periodStore.getIntersectingPeriods( startPeriod
1036
.getStartDate(), endPeriod.getEndDate() ) );
1037
Iterator tempPeriodListIterator = tempPeriodList.iterator();
1038
while ( tempPeriodListIterator.hasNext() )
1040
Period tempPeriod = (Period) tempPeriodListIterator.next();
1041
if ( ougSetCB == null )
1043
if ( facilityLB.equals( "children" ) )
1045
List<Target> tempTarget = new ArrayList<Target>( targetService.getTargets( ind, tempPeriod,
1046
selectedOrgUnit ) );
1047
if ( tempTarget != null )
1048
targetList.addAll( tempTarget );
1049
List<SurveyData> tempSurvey = new ArrayList<SurveyData>( getSurveyList(ind, selectedOrgUnit));
1050
surveyList = new ArrayList<SurveyData>();
1051
if(tempSurvey !=null && tempSurvey.size() > 0)
1052
surveyList.addAll( tempSurvey );
1056
List<Target> tempTarget = new ArrayList<Target>( targetService.getTargets( ind, tempPeriod,
1057
(OrganisationUnit) childOrgUnitList.iterator().next() ) );
1058
if ( tempTarget != null )
1059
targetList.addAll( tempTarget );
1060
List<SurveyData> tempSurvey = new ArrayList<SurveyData>( getSurveyList(ind, (OrganisationUnit) childOrgUnitList.iterator().next()));
1061
surveyList = new ArrayList<SurveyData>();
1062
if(tempSurvey !=null && tempSurvey.size() > 0)
1063
surveyList.addAll( tempSurvey );
1068
if ( facilityLB.equals( "children" ) )
1070
List<Target> tempTarget = new ArrayList<Target>( targetService.getTargets( ind, tempPeriod,
1071
selectedOrgUnitGroup.getMembers().iterator().next() ) );
1072
if ( tempTarget != null )
1073
targetList.addAll( tempTarget );
1075
List<SurveyData> tempSurvey = new ArrayList<SurveyData>( getSurveyList(ind, selectedOrgUnitGroup.getMembers().iterator().next()));
1076
surveyList = new ArrayList<SurveyData>();
1077
if(tempSurvey !=null && tempSurvey.size() > 0)
1078
surveyList.addAll( tempSurvey );
1083
OrganisationUnitGroup oug = (OrganisationUnitGroup) childOrgUnitList.iterator().next();
1084
List<Target> tempTarget = new ArrayList<Target>( targetService.getTargets( ind, tempPeriod,
1085
oug.getMembers().iterator().next() ) );
1086
if ( tempTarget != null )
1087
targetList.addAll( tempTarget );
1089
List<SurveyData> tempSurvey = new ArrayList<SurveyData>( getSurveyList(ind, oug.getMembers().iterator().next()));
1090
surveyList = new ArrayList<SurveyData>();
1091
if(tempSurvey !=null && tempSurvey.size() > 0)
1092
surveyList.addAll( tempSurvey );
1098
indicatorTargetList.put( ind, targetList );
1099
indicatorSurveyList.put( ind, surveyList );
1105
dElement = (DataElement) serviceListIterator.next();
1107
if ( deSelection.equalsIgnoreCase( "optioncombo" ) )
1109
decoc = selectedOptionComboList.get( countForServiceList );
1110
/*if ( dElement.getAlternativeName() != null )
1112
series1[countForServiceList] = dElement.getAlternativeName() + " : "
1113
+ dataElementCategoryOptionComboService.getOptionNames( decoc );
1114
series2[countForServiceList] = dElement.getAlternativeName() + " : "
1115
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) + " (Target)";
1119
series1[countForServiceList] = dElement.getName() + " : "
1120
+ dataElementCategoryOptionComboService.getOptionNames( decoc );
1121
series2[countForServiceList] = dElement.getName() + " : "
1122
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) + " (Target)";
1124
yseriesList.add( dElement.getName() + " : "
1125
+ dataElementCategoryOptionComboService.getOptionNames( decoc ) );
1129
/*if ( dElement.getAlternativeName() != null )
1131
series1[countForServiceList] = dElement.getAlternativeName();
1132
series2[countForServiceList] = dElement.getAlternativeName() + "(Target)";
1136
series1[countForServiceList] = dElement.getName();
1137
series2[countForServiceList] = dElement.getName() + "(Target)";
1139
yseriesList.add( dElement.getName() );
1143
double numVal = 0.0;
1144
double denVal = 0.0;
1145
Iterator childOrgUnitListIterator = childOrgUnitList.iterator();
1146
countForChildOrgUnitList = 0;
1147
while ( childOrgUnitListIterator.hasNext() )
1149
OrganisationUnit childOrgUnit = new OrganisationUnit();
1150
OrganisationUnitGroup childOrgUnitGroup = new OrganisationUnitGroup();
1152
if ( ougSetCB == null || facilityLB.equals( "children" ) )
1154
childOrgUnit = (OrganisationUnit) childOrgUnitListIterator.next();
1158
childOrgUnitGroup = (OrganisationUnitGroup) childOrgUnitListIterator.next();
1161
if ( riRadio.equals( "indicatorsRadio" ) )
1164
* if ( ind.getIndicatorType().getFactor() == 1200 ) { //
1165
* TODO } else noOfPeriods = 1;
1167
if ( ougSetCB == null || facilityLB.equals( "children" ) )
1169
serviceValues[countForServiceList][countForChildOrgUnitList] = aggregationService
1170
.getAggregatedIndicatorValue( ind, startPeriod.getStartDate(), endPeriod.getEndDate(),
1173
numVal = aggregationService.getAggregatedNumeratorValue( ind, startPeriod.getStartDate(), endPeriod.getEndDate(),
1174
childOrgUnit )/ noOfPeriods;
1175
denVal = aggregationService.getAggregatedDenominatorValue( ind, startPeriod.getStartDate(), endPeriod.getEndDate(),
1176
childOrgUnit )/ noOfPeriods;
1181
double aggValue = 0.0;
1182
List<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>( childOrgUnitGroup
1184
Iterator<OrganisationUnit> orgUnitsIterator = orgUnits.iterator();
1185
while ( orgUnitsIterator.hasNext() )
1187
OrganisationUnit ou = (OrganisationUnit) orgUnitsIterator.next();
1188
double tempd = aggregationService.getAggregatedIndicatorValue( ind, startPeriod
1189
.getStartDate(), endPeriod.getEndDate(), ou );
1190
double tempnum = aggregationService.getAggregatedNumeratorValue( ind, startPeriod
1191
.getStartDate(), endPeriod.getEndDate(), ou );
1192
double tempden = aggregationService.getAggregatedDenominatorValue( ind, startPeriod
1193
.getStartDate(), endPeriod.getEndDate(), ou );
1194
if ( tempd == -1 ) tempd = 0.0;
1195
if( tempnum == -1 ) tempnum = 0.0;
1196
if( tempden == -1 ) tempden = 0.0;
1201
serviceValues[countForServiceList][countForChildOrgUnitList] = aggValue / noOfPeriods;
1202
serviceValues[countForServiceList][countForChildOrgUnitList] /= orgUnits.size();
1203
numVal /= noOfPeriods;
1204
numVal /= orgUnits.size();
1205
denVal /= noOfPeriods;
1206
denVal /= orgUnits.size();
1212
DataElementGroup deg = dataElementService.getDataElementGroupByName( "Annual State Baseline data (%)" );
1213
if(deg != null && deg.getMembers().contains( dElement ))
1215
if ( facilityLB.equals( "children" ) )
1221
if ( ougSetCB == null )
1223
noOfChildren = dashBoardService.getAllChildren( (OrganisationUnit) childOrgUnit ).size();
1227
noOfChildren = childOrgUnitGroup.getMembers().size();
1232
if ( deSelection.equalsIgnoreCase( "optioncombo" ) )
1234
if ( ougSetCB == null || facilityLB.equals( "children" ) )
1236
serviceValues[countForServiceList][countForChildOrgUnitList] = aggregationService
1237
.getAggregatedDataValue( dElement, decoc, startPeriod.getStartDate(), endPeriod
1238
.getEndDate(), childOrgUnit );
1242
double aggValue = 0.0;
1243
List<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>( childOrgUnitGroup
1245
Iterator<OrganisationUnit> orgUnitsIterator = orgUnits.iterator();
1246
while ( orgUnitsIterator.hasNext() )
1248
OrganisationUnit ou = (OrganisationUnit) orgUnitsIterator.next();
1249
double tempd = aggregationService.getAggregatedDataValue( dElement, decoc, startPeriod
1250
.getStartDate(), endPeriod.getEndDate(), ou );
1255
serviceValues[countForServiceList][countForChildOrgUnitList] = aggValue;
1260
double aggDataValue = 0.0;
1261
serviceValues[countForServiceList][countForChildOrgUnitList] = 0.0;
1263
DataElementCategoryCombo dataElementCategoryCombo = dElement.getCategoryCombo();
1265
List<DataElementCategoryOptionCombo> optionCombos = new ArrayList<DataElementCategoryOptionCombo>(
1266
dataElementCategoryCombo.getOptionCombos() );
1268
Iterator<DataElementCategoryOptionCombo> optionComboIterator = optionCombos.iterator();
1269
while ( optionComboIterator.hasNext() )
1271
DataElementCategoryOptionCombo decoc1 = (DataElementCategoryOptionCombo) optionComboIterator
1273
if ( ougSetCB == null || facilityLB.equals( "children" ) )
1275
aggDataValue = aggregationService.getAggregatedDataValue( dElement, decoc1, startPeriod
1276
.getStartDate(), endPeriod.getEndDate(), childOrgUnit );
1280
List<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>( childOrgUnitGroup
1282
Iterator<OrganisationUnit> orgUnitsIterator = orgUnits.iterator();
1283
while ( orgUnitsIterator.hasNext() )
1285
OrganisationUnit ou = (OrganisationUnit) orgUnitsIterator.next();
1286
double tempd = aggregationService.getAggregatedDataValue( dElement, decoc1,
1287
startPeriod.getStartDate(), endPeriod.getEndDate(), ou );
1290
aggDataValue += tempd;
1293
if ( aggDataValue == -1 )
1295
serviceValues[countForServiceList][countForChildOrgUnitList] += aggDataValue;
1299
serviceValues[countForServiceList][countForChildOrgUnitList] /= noOfChildren;
1300
serviceValues[countForServiceList][countForChildOrgUnitList] = Math
1301
.round( serviceValues[countForServiceList][countForChildOrgUnitList] * Math.pow( 10, 2 ) )
1302
/ Math.pow( 10, 2 );
1304
numVal = Math.round( numVal * Math.pow( 10, 2 ) ) / Math.pow( 10, 2 );
1305
denVal = Math.round( denVal * Math.pow( 10, 2 ) ) / Math.pow( 10, 2 );
1307
if ( serviceValues[countForServiceList][countForChildOrgUnitList] == -1 )
1308
serviceValues[countForServiceList][countForChildOrgUnitList] = 0.0;
1309
if ( ougSetCB == null || facilityLB.equals( "children" ) )
1311
categories1[countForChildOrgUnitList] = childOrgUnit.getShortName();
1312
categories2[countForChildOrgUnitList] = childOrgUnit.getShortName();
1316
categories1[countForChildOrgUnitList] = childOrgUnitGroup.getName();
1317
categories2[countForChildOrgUnitList] = childOrgUnitGroup.getName();
1319
if ( riRadio.equals( "indicatorsRadio" ) )
1320
data2[countForServiceList][countForChildOrgUnitList] = (targetValues.get( "" + ind.getId() ))
1323
data2[countForServiceList][countForChildOrgUnitList] = 0.0;
1325
if ( riRadio.equals( "dataElementsRadio" ) )
1327
if ( dElement.getType().equalsIgnoreCase( "int" ) )
1328
dataValues.add( "" + serviceValues[countForServiceList][countForChildOrgUnitList] );
1330
dataValues.add( " " );
1334
dataValues.add( "" + serviceValues[countForServiceList][countForChildOrgUnitList] );
1335
numValues.add( ""+numVal );
1336
denValues.add( ""+denVal );
1338
countForChildOrgUnitList++;
1339
}// childOrgUnitList loop end
1340
dataList.add( dataValues );
1341
numList.add( numValues );
1342
denList.add( denValues );
1343
countForServiceList++;
1344
} // serviceList loop end
1345
return serviceValues;
1346
}// getServiceValuesByFacility end
1349
* Returns a String which contains all the DataElement Names of Numerator or
1352
public String getIndicatorDataElements( String tempSD )
1354
char[] tempCD = tempSD.toCharArray();
1355
String deNames = "";
1360
for ( int i = 0; i < tempCD.length; i++ )
1362
if ( tempCD[i] == '[' )
1367
else if ( tempCD[i] == ']' )
1370
int itemp = Integer.parseInt( temp1 );
1371
DataElement de = dataElementService.getDataElement( itemp );
1372
/*if ( de.getAlternativeName() != null )
1374
deNames += de.getAlternativeName() + ",<br>";
1378
deNames += de.getName() + ",<br>";
1382
else if ( flag == 1 )
1386
catch ( Exception e )
1392
}// end function getIndicatorDataElements
1395
* Assigns the Indicator Target values in the list.
1397
public void getTargetValues()
1399
Connection con = null;
1400
PreparedStatement pst = null;
1401
ResultSet rs = null;
1405
DBConnection dbc = new DBConnection();
1406
con = dbc.openConnection();
1408
String query = "SELECT target FROM indicator WHERE indicatorid = ?";
1409
pst = con.prepareStatement( query );
1410
Iterator serviceIterator = selectedServiceList.iterator();
1411
while ( serviceIterator.hasNext() )
1413
Indicator indicator = (Indicator) serviceIterator.next();
1414
pst.setInt( 1, indicator.getId() );
1415
rs = pst.executeQuery();
1418
targetValues.put( "" + indicator.getId(), new Double( rs.getDouble( 1 ) ) );
1422
targetValues.put( "" + indicator.getId(), new Double( 0.0 ) );
1424
targetList.add( targetValues.get( "" + indicator.getId() ) );
1425
// System.out.println( " Target Value For Indiactor " +
1426
// indicator.getName() + " is : "
1427
// + targetValues.get( "" + indicator.getId() ) );
1430
catch ( Exception e )
1432
System.out.println( "Exception while getting Target Values : " + e.getMessage() );
1445
catch ( Exception e )
1447
System.out.println( "Exception while closing connection : " + e.getMessage() );
1449
}// finally block end
1451
} // getTargetValues end
1454
private List<SurveyData> getSurveyList(Indicator ind, OrganisationUnit selectedOrgUnit)
1456
List<SurveyData> resultList = new ArrayList<SurveyData>();
1458
String path = System.getProperty( "user.home" ) + File.separator + "dhis" + File.separator + "db"
1459
+ File.separator + "surveyDataMapping.xml";
1462
String newpath = System.getenv( "USER_HOME" );
1463
if ( newpath != null )
1465
path = newpath + File.separator + "dhis" + File.separator + "db" + File.separator + "surveyDataMapping.xml";
1468
catch ( NullPointerException npe )
1470
// do nothing, but we might be using this somewhere without
1471
// USER_HOME set, which will throw a NPE
1476
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
1477
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
1478
Document doc = docBuilder.parse( new File( path ) );
1481
// System.out.println( "There is no DECodes related XML file in
1482
// the user home" );
1486
NodeList listOfSurveys = doc.getElementsByTagName( "survey" );
1487
int totalSurveys = listOfSurveys.getLength();
1489
for ( int s = 0; s < totalSurveys; s++ )
1491
Element surveyElement = (Element) listOfSurveys.item( s );
1492
int indId = Integer.parseInt(surveyElement.getAttribute( "indicatorid" ));
1493
int ouId = Integer.parseInt(surveyElement.getAttribute( "orgunitid" ));
1494
String dlhs = surveyElement.getAttribute( "dlhs" );
1495
String nfhs = surveyElement.getAttribute( "nfhs" );
1496
if(indId == ind.getId() && ouId==selectedOrgUnit.getId())
1498
if(dlhs.equalsIgnoreCase( "na" ))
1504
SurveyData sd = new SurveyData("DLHS", dlhs);
1505
resultList.add( sd );
1507
if(nfhs.equalsIgnoreCase( "na" ))
1513
SurveyData sd = new SurveyData("NFHS", nfhs);
1514
resultList.add( sd );
1517
}// end of for loop with s var
1519
catch ( SAXParseException err )
1521
System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
1522
System.out.println( " " + err.getMessage() );
1524
catch ( SAXException e )
1526
Exception x = e.getException();
1527
((x == null) ? e : x).printStackTrace();
1529
catch ( Throwable t )
1531
t.printStackTrace();