@Override protected void processElement(final Element<IProcessedElement> element) throws Exception { if (element.getData() instanceof CatalogElement) { chunk.getItems().add((CatalogElement)element.getData()); } else if (element.getData() instanceof WriteStatusRequest) { chunk.getWriteStatusRequests().add((WriteStatusRequest)element.getData()); } final boolean flush = element.getData() instanceof FlushRequest || chunk.getItems().size() >= batchSize; if (flush) { if (target != null) { try { target.process(chunk); } catch (final Exception e) { if (context != null) { context.getListener().notifyEvent("chunkProcessing", new String[]{chunk.getId()}, EventResultCode.ERROR, StackTraceUtil.getStackTrace(e)); } log.error("Exception during processing a chunk " + chunk.getId(), e); } } chunk = new Chunk(UUID.randomUUID().toString(), new LinkedList<CatalogElement>()); } }
@Override protected Chunk doProcessChunk(Chunk data, Map<String, Serializable> context, IProcessListener processListener, ProcessingStats stats) throws Exception { for (WriteStatusRequest ce : data.getWriteStatusRequests()) { String serializedElementStatus = xStream.toXML(ce.getNewStatus()); YaddaObjectID id = new YaddaObjectID(ce.getExtId().getId()); if (!data.getObjectsToWrite().containsKey(ce.getExtId().getId())) { data.getObjectsToWrite().put(ce.getExtId().getId(), new CatalogObject<String>(id)); } CatalogObjectPart<String> elementStatusPart = new CatalogObjectPart<String>( CatalogParamConstants.TYPE_ELEMENT_PROCESSING_STATUS, serializedElementStatus); data.getObjectsToWrite().get(ce.getExtId().getId()).addPart(elementStatusPart); } return data; }