private static <T extends SyntaxElement> T addLocation(
     final int[] startAndLine, final T ele, final int end) {
   if (ele != null) {
     ele.setStart(startAndLine[0]);
     ele.setLine(startAndLine[1]);
     ele.setEnd(end);
   }
   return ele;
 }
  private <T extends JaxbVideos> T populateJaxbVideos(
      final T jaxbVideos, final List<Video> videos) {
    jaxbVideos.setStart(0);
    jaxbVideos.setLimit(videos.size());
    jaxbVideos.setTotal(videos.size() * 2);
    for (final Video video : videos) {
      jaxbVideos.addVideo(new JaxbVideo(video));
    }

    return jaxbVideos;
  }
  /**
   * Get all active rivers
   *
   * @return
   */
  public List<T> get() {
    if (logger.isDebugEnabled()) logger.debug("get()");
    List<T> rivers = new ArrayList<T>();

    SearchRequestBuilder srb = new SearchRequestBuilder(client);

    try {
      srb.setIndices(SMDSearchProperties.ES_META_INDEX);
      srb.setTypes(SMDSearchProperties.ES_META_RIVERS);

      SearchResponse response = srb.execute().actionGet();

      if (response.getHits().totalHits() > 0) {

        for (int i = 0; i < response.getHits().hits().length; i++) {
          T river = buildInstance();

          SearchHit hit = response.getHits().hits()[i];

          // We only manage rivers for type getHelper().type()
          river = getHelper().toRiver(river, hit.sourceAsMap());

          if (river.getType().equals(getHelper().type())) {
            // For each river, we check if the river is started or not
            river.setStart(riverService.checkState(river));
            rivers.add(river);
          }
        }
      }

    } catch (IndexMissingException e) {
      // That's a common use case. We started with an empty index
    }

    if (logger.isDebugEnabled()) logger.debug("/get()={}", rivers);
    return rivers;
  }