in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/uri/util/UriUtil.java [48:118]
public static URI getUri(List<Segment> segments, Map<String, String> queryOptions,
Map<String, String> customQueryOptions, Map<String, Object> functionImportParameters) { //NOPMD - suppressed
final StringBuilder segmentsBuilder = new StringBuilder();
if (segments.size() == 1 && segments.get(0).getType() == SegmentType.INITIAL
&& customQueryOptions.isEmpty()
&& queryOptions.isEmpty() && functionImportParameters.isEmpty()) {
segmentsBuilder.append(segments.get(0).getValue());
if (segmentsBuilder.charAt(segmentsBuilder.length() - 1) != '/') {
segmentsBuilder.append('/');
}
return URI.create(segmentsBuilder.toString());
}
for (Segment seg : segments) {
if (segmentsBuilder.length() > 0 && seg.getType() != SegmentType.KEY &&
seg.getType() != SegmentType.NAVIGATION_TO_MANY_WITH_KEY &&
seg.getType() != SegmentType.FUNCTIONIMPORT_WITH_KEY &&
segmentsBuilder.charAt(segmentsBuilder.length() - 1) != '/') {
segmentsBuilder.append('/');
}
segmentsBuilder.append(seg.getValue());
}
try {
if (!queryOptions.isEmpty()) {
appendQuerySegmentDelimiter(true, true, segmentsBuilder);
int i = 0;
for (Map.Entry<String, String> option : queryOptions.entrySet()) {
//Appends a system query option to uri builder
i++;
appendQuerySegments(QueryOption.valueOf(option.getKey()).getValue(), option.getValue(),
segmentsBuilder, true);
if (i < queryOptions.size()) {
segmentsBuilder.append("&");
}
}
}
if (!customQueryOptions.isEmpty()) {
appendQuerySegmentDelimiter(queryOptions.isEmpty(), true, segmentsBuilder);
int i = 0;
for (Map.Entry<String, String> option : customQueryOptions.entrySet()) {
//Appends a custom query option to uri builder
i++;
appendQuerySegments(option.getKey(), option.getValue(),
segmentsBuilder, false);
if (i < customQueryOptions.size()) {
segmentsBuilder.append("&");
}
}
}
if (!functionImportParameters.isEmpty()) {
appendQuerySegmentDelimiter(queryOptions.isEmpty(), customQueryOptions.isEmpty(), segmentsBuilder);
int i = 0;
for (Map.Entry<String, Object> funcParam : functionImportParameters.entrySet()) {
//Appends a function import URI with parameters to uri builder
i++;
appendQuerySegments(funcParam.getKey(), funcParam.getValue(),
segmentsBuilder, false);
if (i < functionImportParameters.size()) {
segmentsBuilder.append("&");
}
}
}
return URI.create(segmentsBuilder.toString());
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Could not build valid URI", e);
}
}