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;
}
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;
}
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;
}
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);
}
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;
}
Aggregations