public String buildDataQuery()

in SdmxQueryBuilder/src/main/java/org/sdmxsource/sdmx/querybuilder/builder/DataQueryBuilderRest.java [54:159]


    public String buildDataQuery(DataQuery query) {
        if (query == null) {
            throw new IllegalArgumentException("DataQueryBuilderRest.buildRestDataQuery DataQuery is required, null was passed");
        }
        DataStructureBean keyFamily = query.getDataStructure();
        StringBuilder sb = new StringBuilder();
        sb.append("data/");

        if (query.getDataflow() != null) {
            DataflowBean dataflow = query.getDataflow();
            sb.append(dataflow.getAgencyId());
            sb.append(",");
            sb.append(dataflow.getId());
            sb.append(",");
            sb.append(dataflow.getVersion());
            sb.append("/");
        } else {
            throw new IllegalArgumentException("A REST query requires a dataflow to be set - no dataflow found for query");
        }
        Map<String, Set<String>> selections = new HashMap<String, Set<String>>();

        Date dateFrom = null;
        Date dateTo = null;

        if (query.hasSelections()) {
            DataQuerySelectionGroup dqsg = query.getSelectionGroups().get(0);
            if (dqsg.getDateFrom() != null) {
                dateFrom = dqsg.getDateFrom().getDate();
            }
            if (dqsg.getDateTo() != null) {
                dateTo = dqsg.getDateTo().getDate();
            }
            for (DataQuerySelection currentSelection : dqsg.getSelections()) {
                selections.put(currentSelection.getComponentId(), currentSelection.getValues());
            }
        }

        if (selections.size() == 0) {
            sb.append("all");
        } else {
            String concatPeriod = "";
            for (DimensionBean dim : keyFamily.getDimensions(SDMX_STRUCTURE_TYPE.DIMENSION)) {
                sb.append(concatPeriod);
                String conceptId = dim.getId();
                if (selections.containsKey(conceptId)) {
                    String concatPlus = "";
                    for (String currentSelection : selections.get(conceptId)) {
                        sb.append(concatPlus);
                        sb.append(currentSelection);
                        concatPlus = "+";
                    }
                }
                concatPeriod = ".";
            }
        }

        String providerAgency = null;
        String providerId = null;
        if (query.getDataProvider() != null) {
            for (DataProviderBean currentProvider : query.getDataProvider()) {
                if (providerAgency != null && !providerAgency.equals(currentProvider.getMaintainableParent().getAgencyId())) {
                    providerAgency = "*";
                } else {
                    providerAgency = currentProvider.getMaintainableParent().getAgencyId();
                }
                if (providerId != null && !providerId.equals(currentProvider.getId())) {
                    providerId = "all";
                } else {
                    providerId = currentProvider.getId();
                }
            }
        }
        if (!"all".equals(providerId) && (providerId != null)) {
            if (!"all".equals(providerAgency) && (providerAgency != null)) {
                sb.append("/" + providerAgency + "," + providerId + "/");
            } else {
                sb.append("/" + providerId + "/");
            }
        } else {
            sb.append("/all/");
        }


        boolean firstAppend = true;
        if (query.getFirstNObservations() != null) {
            appendParam(firstAppend, "firstNObservations", query.getFirstNObservations(), sb);
            firstAppend = false;
        }
        if (query.getLastNObservations() != null) {
            appendParam(firstAppend, "lastNObservations", query.getLastNObservations(), sb);
            firstAppend = false;
        }
        if (query.getDataQueryDetail() != null) {
            appendParam(firstAppend, "detail", query.getDataQueryDetail().getRestParam(), sb);
            firstAppend = false;
        }
        if (dateFrom != null) {
            appendParam(firstAppend, "startPeriod", DateUtil.formatDate(dateFrom), sb);
            firstAppend = false;
        }
        if (dateTo != null) {
            appendParam(firstAppend, "endPeriod", DateUtil.formatDate(dateTo), sb);
            firstAppend = false;
        }
        return sb.toString();
    }