private <T> String processData(
     final CrestApiProcessor<T> processor, final CrestContainer<T> container, final String data) {
   String next = null;
   try {
     final JsonFactory parserFactory = new JsonFactory();
     final JsonParser jsonParser = parserFactory.createParser(data);
     jsonParser.nextToken();
     while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
       final String fieldname = jsonParser.getCurrentName();
       jsonParser.nextToken();
       switch (fieldname) {
         case "totalCount":
           container.setTotalCount(jsonParser.getIntValue());
           break;
         case "pageCount":
           container.setPageCount(jsonParser.getIntValue());
           break;
         case "items":
           processItems(processor, container, jsonParser);
           break;
         case "next":
           next = processNext(jsonParser);
           break;
         default:
           break;
       }
     }
   } catch (final IOException e) {
     if (LOGGER.isWarnEnabled()) {
       LOGGER.warn("Problems while parsing json data: " + e.getMessage(), e);
     }
   }
   return next;
 }
 private <T> void processItems(
     final CrestApiProcessor<T> processor,
     final CrestContainer<T> container,
     final JsonParser jsonParser)
     throws IOException {
   if (jsonParser.isExpectedStartArrayToken()) {
     while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
       container.addEntry(processor.parseEntry((JsonNode) mapper.readTree(jsonParser)));
     }
   }
 }
 public <T> CrestContainer<T> downloadAndProcessContainerData(
     final CrestApiProcessor<T> processor) {
   CrestContainer<T> container = null;
   try {
     String data = accessor.getData(processor.getPath());
     if (StringUtils.isNotBlank(data)) {
       container = new CrestContainer<T>();
       String next = processData(processor, container, data);
       while (next != null) {
         data = accessor.getDataPage(next);
         next = processData(processor, container, data);
       }
       container.setTimestamp(System.currentTimeMillis());
     } else if (LOGGER.isWarnEnabled()) {
       LOGGER.warn("No data to parse for " + processor.getClass().getSimpleName());
     }
   } catch (final IOException e) {
     if (LOGGER.isErrorEnabled()) {
       LOGGER.error("Could not download data", e);
     }
   }
   return container;
 }