in SdmxStructureParser/src/main/java/org/sdmxsource/sdmx/structureparser/builder/query/v21/DataQueryBuilderV21.java [386:475]
private Set<ComplexDataQuerySelectionGroup> buildComplexDataQueryGroups(DataParametersAndType dataWhere, SdmxBeanRetrievalManager structureRetrievalManager, Set<DataProviderBean> dataProviders) {
Set<ComplexDataQuerySelectionGroup> complexDataQuerySelectionGroups = new HashSet<ComplexDataQuerySelectionGroup>();
Set<ComplexDataQuerySelection> complexSelections = new HashSet<ComplexDataQuerySelection>();
Set<ComplexComponentValue> primaryMeasureValues = new HashSet<ComplexComponentValue>();
ORDERED_OPERATOR dateFromOperator = ORDERED_OPERATOR.EQUAL;
ORDERED_OPERATOR dateToOperator = ORDERED_OPERATOR.EQUAL;
SdmxDate dateFrom = null;
SdmxDate dateTo = null;
//primary measure
if (dataWhere.getPrimaryMeasureValueList() != null && (dataWhere.getPrimaryMeasureValueList().size() > 0)) {
PrimaryMeasureValueType primaryMeasure = dataWhere.getPrimaryMeasureValueList().get(0);
Set<ComplexComponentValue> complexValues = getComplexComponentValues(primaryMeasure, SDMX_STRUCTURE_TYPE.PRIMARY_MEASURE);
for (ComplexComponentValue complexValue : complexValues) {
primaryMeasureValues.add(complexValue);
}
}
//add all
//time dimension
if (dataWhere.getTimeDimensionValueList() != null && dataWhere.getTimeDimensionValueList().size() > 0) {
TimeDimensionValueType timeValue = dataWhere.getTimeDimensionValueList().get(0);
Set<ComplexComponentValue> complexValues = getComplexComponentValues(timeValue, SDMX_STRUCTURE_TYPE.TIME_DIMENSION);
ComplexComponentValue[] complexTimeValues = complexValues.toArray(new ComplexComponentValue[0]);
if (complexValues != null && complexValues.size() > 0) {
if (complexTimeValues[0].getOrderedOperator().equals(ORDERED_OPERATOR.GREATER_THAN) ||
complexTimeValues[0].getOrderedOperator().equals(ORDERED_OPERATOR.GREATER_THAN_OR_EQUAL) ||
complexTimeValues[0].getOrderedOperator().equals(ORDERED_OPERATOR.EQUAL)) {
dateFrom = new SdmxDateImpl(complexTimeValues[0].getValue());
dateFromOperator = complexTimeValues[0].getOrderedOperator();
if (complexValues.size() == 2) {
dateTo = new SdmxDateImpl(complexTimeValues[1].getValue());
dateToOperator = complexTimeValues[1].getOrderedOperator();
}
} else {
dateTo = new SdmxDateImpl(complexTimeValues[0].getValue());
dateToOperator = complexTimeValues[0].getOrderedOperator();
if (complexValues.size() == 2) {
dateFrom = new SdmxDateImpl(complexTimeValues[1].getValue());
dateFromOperator = complexTimeValues[1].getOrderedOperator();
}
}
if (complexValues.size() == 2) {
//interchange dates if not the correct order
if (dateFrom.isLater(dateTo)) {
SdmxDate tempDate = dateTo;
dateTo = dateFrom;
dateFrom = tempDate;
ORDERED_OPERATOR tempOperator = dateToOperator;
dateToOperator = dateFromOperator;
dateFromOperator = tempOperator;
}
//cases when same operator is used
if (dateToOperator.equals(dateFromOperator)) {
if (ORDERED_OPERATOR.GREATER_THAN.equals(dateToOperator) ||
ORDERED_OPERATOR.GREATER_THAN_OR_EQUAL.equals(dateToOperator)) {
//only the greatest date is considered
dateFrom = dateTo;
dateTo = null;
}
if (ORDERED_OPERATOR.LESS_THAN.equals(dateToOperator) ||
ORDERED_OPERATOR.LESS_THAN_OR_EQUAL.equals(dateToOperator)) {
//only the lowest date is considered
dateTo = dateFrom;
dateFrom = null;
}
}
}
}
}
//dimensions
if (dataWhere.getDimensionValueList() != null && dataWhere.getDimensionValueList().size() > 0) {
for (DimensionValueType dimValue : dataWhere.getDimensionValueList()) {
ComplexComponentValue comValue = getComplexComponentValue(dimValue, SDMX_STRUCTURE_TYPE.DIMENSION);
addComponentSelection(complexSelections, dimValue.getID(), comValue);
}
}
//attributes
if (dataWhere.getAttributeValueList() != null && dataWhere.getAttributeValueList().size() > 0) {
for (AttributeValueType attrValue : dataWhere.getAttributeValueList()) {
ComplexComponentValue comValue = getComplexComponentValue(attrValue, SDMX_STRUCTURE_TYPE.DATA_ATTRIBUTE);
addComponentSelection(complexSelections, attrValue.getID(), comValue);
}
}
//DataParametersOrType
processParametersOrType(dataWhere.getOrList(), complexSelections, structureRetrievalManager, dataProviders);
addGroupIfSelectionsExist(complexSelections, dateFrom, dateFromOperator, dateTo, dateToOperator, primaryMeasureValues, complexDataQuerySelectionGroups);
return complexDataQuerySelectionGroups;
}