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