Search in sources :

Example 6 with ListMap

use of org.hisp.dhis.common.ListMap in project dhis2-core by dhis2.

the class QueryPlannerUtils method getAggregationTypeDataElementMap.

/**
 * Creates a mapping between the aggregation type and data elements for the
 * given data elements and period type.
 *
 * @param dataElements a List of {@see DimensionalItemObject}
 * @param aggregationType an {@see AnalyticsAggregationType}
 * @param periodType a String representing a Period Type (e.g. 201901)
 */
public static ListMap<AnalyticsAggregationType, DimensionalItemObject> getAggregationTypeDataElementMap(List<DimensionalItemObject> dataElements, AnalyticsAggregationType aggregationType, String periodType) {
    PeriodType aggregationPeriodType = PeriodType.getPeriodTypeByName(periodType);
    ListMap<AnalyticsAggregationType, DimensionalItemObject> map = new ListMap<>();
    for (DimensionalItemObject element : dataElements) {
        DataElement de = (DataElement) element;
        AnalyticsAggregationType aggType = ObjectUtils.firstNonNull(aggregationType, AnalyticsAggregationType.fromAggregationType(de.getAggregationType()));
        AnalyticsAggregationType analyticsAggregationType = getAggregationType(aggType, de.getValueType(), aggregationPeriodType, de.getPeriodType());
        map.putValue(analyticsAggregationType, de);
    }
    return map;
}
Also used : PeriodType(org.hisp.dhis.period.PeriodType) DataElement(org.hisp.dhis.dataelement.DataElement) DimensionalItemObject(org.hisp.dhis.common.DimensionalItemObject) ListMap(org.hisp.dhis.common.ListMap) AnalyticsAggregationType(org.hisp.dhis.analytics.AnalyticsAggregationType)

Example 7 with ListMap

use of org.hisp.dhis.common.ListMap in project dhis2-core by dhis2.

the class QueryPlannerUtils method getDataTypeDataElementMap.

/**
 * Creates a mapping between data type and data elements for the given data
 * elements.
 *
 * @param dataElements list of data elements.
 */
public static ListMap<DataType, DimensionalItemObject> getDataTypeDataElementMap(List<DimensionalItemObject> dataElements) {
    ListMap<DataType, DimensionalItemObject> map = new ListMap<>();
    for (DimensionalItemObject element : dataElements) {
        DataElement dataElement = (DataElement) element;
        ValueType valueType = dataElement.getValueType();
        // Both text and date types are recognized as DataType.TEXT
        DataType dataType = (valueType.isText() || valueType.isDate()) ? DataType.TEXT : DataType.NUMERIC;
        map.putValue(dataType, dataElement);
    }
    return map;
}
Also used : DataElement(org.hisp.dhis.dataelement.DataElement) DimensionalItemObject(org.hisp.dhis.common.DimensionalItemObject) ValueType(org.hisp.dhis.common.ValueType) DataType(org.hisp.dhis.analytics.DataType) ListMap(org.hisp.dhis.common.ListMap)

Example 8 with ListMap

use of org.hisp.dhis.common.ListMap in project dhis2-core by dhis2.

the class DefaultQueryPlanner method groupByPeriodType.

// -------------------------------------------------------------------------
// Supportive group by methods
// -------------------------------------------------------------------------
/**
 * If periods appear as dimensions in the given query, groups the query into
 * sub queries based on the period type of the periods. Sets the period type
 * name on each query. If periods appear as filters, replaces the period
 * filter with one filter for each period type. Sets the dimension names and
 * filter names respectively.
 *
 * @param params the {@link DataQueryParams} object.
 * @return a list of {@link DataQueryParams}.
 */
@Override
public List<DataQueryParams> groupByPeriodType(DataQueryParams params) {
    List<DataQueryParams> queries = new ArrayList<>();
    if (params.isSkipPartitioning()) {
        queries.add(params);
    } else if (!params.getPeriods().isEmpty()) {
        ListMap<String, DimensionalItemObject> periodTypePeriodMap = PartitionUtils.getPeriodTypePeriodMap(params.getPeriods());
        for (String periodType : periodTypePeriodMap.keySet()) {
            DataQueryParams query = DataQueryParams.newBuilder(params).addOrSetDimensionOptions(PERIOD_DIM_ID, DimensionType.PERIOD, periodType.toLowerCase(), periodTypePeriodMap.get(periodType)).withPeriodType(periodType).build();
            queries.add(query);
        }
    } else if (!params.getFilterPeriods().isEmpty()) {
        DimensionalObject filter = params.getFilter(PERIOD_DIM_ID);
        ListMap<String, DimensionalItemObject> periodTypePeriodMap = PartitionUtils.getPeriodTypePeriodMap(filter.getItems());
        // Use first period type
        DataQueryParams.Builder query = DataQueryParams.newBuilder(params).removeFilter(PERIOD_DIM_ID).withPeriodType(periodTypePeriodMap.keySet().iterator().next());
        for (String periodType : periodTypePeriodMap.keySet()) {
            query.addFilter(new BaseDimensionalObject(filter.getDimension(), filter.getDimensionType(), periodType.toLowerCase(), filter.getDimensionDisplayName(), periodTypePeriodMap.get(periodType)));
        }
        queries.add(query.build());
    } else {
        queries.add(DataQueryParams.newBuilder(params).build());
        return queries;
    }
    logQuerySplit(queries, "period type");
    return queries;
}
Also used : DataQueryParams(org.hisp.dhis.analytics.DataQueryParams) DimensionalItemObject(org.hisp.dhis.common.DimensionalItemObject) BaseDimensionalObject(org.hisp.dhis.common.BaseDimensionalObject) ArrayList(java.util.ArrayList) ListMap(org.hisp.dhis.common.ListMap) BaseDimensionalObject(org.hisp.dhis.common.BaseDimensionalObject) DimensionalObject(org.hisp.dhis.common.DimensionalObject)

Example 9 with ListMap

use of org.hisp.dhis.common.ListMap in project dhis2-core by dhis2.

the class DefaultDataSetReportService method getDefaultDataSetReport.

private List<Grid> getDefaultDataSetReport(DataSet dataSet, List<Period> periods, OrganisationUnit unit, Set<String> filters, boolean selectedUnitOnly) {
    ListMap<CategoryCombo, DataElement> map = new ListMap<>();
    for (DataSetElement element : dataSet.getDataSetElements()) {
        map.putValue(element.getResolvedCategoryCombo(), element.getDataElement());
    }
    DataSet tmpDataSet = new DataSet(dataSet.getName(), dataSet.getShortName(), dataSet.getPeriodType());
    tmpDataSet.setDataSetElements(dataSet.getDataSetElements());
    for (CategoryCombo categoryCombo : map.keySet()) {
        List<DataElement> dataElements = map.get(categoryCombo);
        String name = categoryCombo.isDefault() ? dataSet.getName() : categoryCombo.getName();
        Section section = new Section(name, dataSet, dataElements, null);
        tmpDataSet.getSections().add(section);
    }
    return getSectionDataSetReport(tmpDataSet, periods, unit, filters, selectedUnitOnly);
}
Also used : DataElement(org.hisp.dhis.dataelement.DataElement) CategoryCombo(org.hisp.dhis.category.CategoryCombo) DataSet(org.hisp.dhis.dataset.DataSet) DataSetElement(org.hisp.dhis.dataset.DataSetElement) Section(org.hisp.dhis.dataset.Section) ListMap(org.hisp.dhis.common.ListMap)

Example 10 with ListMap

use of org.hisp.dhis.common.ListMap in project dhis2-core by dhis2.

the class DataQueryParams method getDataPeriodAggregationPeriodMap.

/**
 * Creates a mapping between the data periods, based on the data period type
 * for this query, and the aggregation periods for this query.
 */
public ListMap<DimensionalItemObject, DimensionalItemObject> getDataPeriodAggregationPeriodMap() {
    ListMap<DimensionalItemObject, DimensionalItemObject> map = new ListMap<>();
    if (dataPeriodType != null) {
        for (DimensionalItemObject aggregatePeriod : getDimensionOrFilterItems(PERIOD_DIM_ID)) {
            Period dataPeriod = dataPeriodType.createPeriod(((Period) aggregatePeriod).getStartDate());
            map.putValue(dataPeriod, aggregatePeriod);
            if (((Period) aggregatePeriod).getPeriodType().spansMultipleCalendarYears()) {
                // When dealing with a period that spans multiple years, add
                // a second aggregated year
                // corresponding to the second part of the financial year so
                // that the query will count both years.
                Period endYear = dataPeriodType.createPeriod(((Period) aggregatePeriod).getEndDate());
                map.putValue(endYear, aggregatePeriod);
            }
        }
    }
    return map;
}
Also used : DimensionalItemObject(org.hisp.dhis.common.DimensionalItemObject) Period(org.hisp.dhis.period.Period) ListMap(org.hisp.dhis.common.ListMap)

Aggregations

ListMap (org.hisp.dhis.common.ListMap)22 DimensionalItemObject (org.hisp.dhis.common.DimensionalItemObject)14 DataElement (org.hisp.dhis.dataelement.DataElement)8 Period (org.hisp.dhis.period.Period)7 PeriodType (org.hisp.dhis.period.PeriodType)7 ArrayList (java.util.ArrayList)6 HashMap (java.util.HashMap)5 DataQueryParams (org.hisp.dhis.analytics.DataQueryParams)5 AnalyticsAggregationType (org.hisp.dhis.analytics.AnalyticsAggregationType)3 HashSet (java.util.HashSet)2 List (java.util.List)2 Map (java.util.Map)2 AllArgsConstructor (lombok.AllArgsConstructor)2 StringUtils (org.apache.commons.lang3.StringUtils)2 AggregationType (org.hisp.dhis.analytics.AggregationType)2 DataType (org.hisp.dhis.analytics.DataType)2 CategoryCombo (org.hisp.dhis.category.CategoryCombo)2 CategoryOption (org.hisp.dhis.category.CategoryOption)2 CategoryService (org.hisp.dhis.category.CategoryService)2 BaseDimensionalObject (org.hisp.dhis.common.BaseDimensionalObject)2