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