@Override public org.dcm4che3.net.service.BasicCStoreSCUResp cstore( final java.util.List<ArchiveInstanceLocator> instances, final Association storeas, final int priority) { ArrayList<ArchiveInstanceLocator> localyAvailable = (ArrayList<ArchiveInstanceLocator>) filterLocalOrExternalMatches(instances, true); ArrayList<ArchiveInstanceLocator> externallyAvailable = (ArrayList<ArchiveInstanceLocator>) filterLocalOrExternalMatches(instances, false); BasicCStoreSCUResp responseForLocalyAvailable = null; if (!localyAvailable.isEmpty()) responseForLocalyAvailable = super.cstore(localyAvailable, storeas, priority); // initialize remaining response BasicCStoreSCUResp finalResponse = extendResponse(responseForLocalyAvailable); if (!externallyAvailable.isEmpty()) { FetchForwardCallBack moveCallBack = new FetchForwardCallBack() { @Override public void onFetch( Collection<ArchiveInstanceLocator> instances, BasicCStoreSCUResp resp) { pushInstances((ArrayList<ArchiveInstanceLocator>) instances, storeas, priority); } }; FetchForwardCallBack wadoCallBack = new FetchForwardCallBack() { @Override public void onFetch( Collection<ArchiveInstanceLocator> instances, BasicCStoreSCUResp resp) { pushInstances((ArrayList<ArchiveInstanceLocator>) instances, storeas, priority); } }; finalResponse = service .getFetchForwardService() .fetchForward( instances.size(), finalResponse, externallyAvailable, storeas, priority, wadoCallBack, moveCallBack); if (failed.size() > 0) { if (failed.size() == nr_instances) status = Status.UnableToPerformSubOperations; else status = Status.OneOrMoreFailures; } else { status = Status.Success; } setChanged(); notifyObservers(); } return finalResponse; }