public static URI getUri()

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