@Override
 public RegistryResponseType documentRepositoryProvideAndRegisterDocumentSetB(
     ProvideAndRegisterDocumentSetRequestType req) {
   log.info("################ documentRepositoryProvideAndRegisterDocumentSetB called!");
   RegistryResponseType rsp;
   XDSDocument[] storedDocs = null;
   URL registryURL = null;
   String[] submUIDAndpatid = getSubmissionUIDandPatID(req.getSubmitObjectsRequest());
   try {
     if (submUIDAndpatid[1] == null)
       throw new XDSException(
           XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Missing patientID!", null);
     String srcID = getSourceID(req);
     registryURL = getRegistryWsdlUrl(srcID);
     String groupID = getFsGroupID(submUIDAndpatid[1]);
     logRequest(req);
     List<ExtrinsicObjectType> extrObjs = checkRequest(req);
     storedDocs = storeDocuments(req, extrObjs, groupID);
     SubmitObjectsRequest submitRequest = req.getSubmitObjectsRequest();
     rsp = dispatchSubmitObjectsRequest(submitRequest, registryURL);
   } catch (Exception x) {
     rsp = factory.createRegistryResponseType();
     if (x instanceof XDSException) {
       XDSUtil.addError(rsp, (XDSException) x);
     } else {
       XDSUtil.addError(
           rsp,
           new XDSException(
               XDSException.XDS_ERR_REPOSITORY_ERROR,
               "Unexpected error in XDS service !: " + x.getMessage(),
               x));
     }
   }
   boolean success = XDSConstants.XDS_B_STATUS_SUCCESS.equals(rsp.getStatus());
   AuditRequestInfo info = new AuditRequestInfo(LogHandler.getInboundSOAPHeader(), wsContext);
   if (storedDocs != null) {
     XDSAudit.logRepositoryPnRExport(
         submUIDAndpatid[0], submUIDAndpatid[1], info, registryURL, success);
   }
   commit(storedDocs, success);
   if (!success) ejbContext.setRollbackOnly();
   XDSAudit.logRepositoryImport(
       submUIDAndpatid[0],
       submUIDAndpatid[1],
       info,
       XDSConstants.XDS_B_STATUS_SUCCESS.equals(rsp.getStatus()));
   log.info("################ documentRepositoryProvideAndRegisterDocumentSetB finished!");
   return rsp;
 }
Example #2
0
 public static Map<String, Document> getDocuments(ProvideAndRegisterDocumentSetRequestType req) {
   List<Document> docs = req.getDocument();
   Map<String, Document> map = new HashMap<String, Document>(docs.size());
   Document doc;
   for (int i = 0, len = docs.size(); i < len; i++) {
     doc = docs.get(i);
     map.put(doc.getId(), doc);
   }
   return map;
 }
 private List<ExtrinsicObjectType> checkRequest(ProvideAndRegisterDocumentSetRequestType req)
     throws XDSException {
   SubmitObjectsRequest sor = req.getSubmitObjectsRequest();
   RegistryPackageType submissionSet =
       InfosetUtil.getRegistryPackage(sor, XDSConstants.UUID_XDSSubmissionSet);
   if (submissionSet == null) {
     log.error("No RegistryPackage id=SubmissionSet found!");
     throw new XDSException(
         XDSException.XDS_ERR_REPOSITORY_ERROR,
         XDSException.XDS_ERR_MISSING_REGISTRY_PACKAGE,
         null);
   } else if (submissionSet.getId() == null || submissionSet.getId().trim().length() == 0) {
     throw new XDSException(
         XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR,
         "Missing XDSSubmissionSet.entryUUID!",
         null);
   }
   List<ExtrinsicObjectType> extrObjs =
       InfosetUtil.getExtrinsicObjects(req.getSubmitObjectsRequest());
   checkPatientIDs(req, submissionSet, extrObjs);
   Map<String, Document> docs = InfosetUtil.getDocuments(req);
   if (extrObjs.size() > docs.size()) {
     log.warn(
         "Missing Documents! Found more ExtrinsicObjects("
             + extrObjs.size()
             + ") than Documents("
             + docs.size()
             + ")!");
     throw new XDSException(XDSException.XDS_ERR_MISSING_DOCUMENT, "", null);
   } else if (extrObjs.size() < docs.size()) {
     log.warn(
         "Missing Document Metadata! Found less ExtrinsicObjects("
             + extrObjs.size()
             + ") than Documents("
             + docs.size()
             + ")!");
     throw new XDSException(XDSException.XDS_ERR_MISSING_DOCUMENT_METADATA, "", null);
   }
   return extrObjs;
 }
 private String getSourceID(ProvideAndRegisterDocumentSetRequestType req) throws XDSException {
   List<JAXBElement<? extends IdentifiableType>> objs =
       req.getSubmitObjectsRequest().getRegistryObjectList().getIdentifiable();
   IdentifiableType obj;
   for (int i = 0, len = objs.size(); i < len; i++) {
     obj = objs.get(i).getValue();
     if (obj instanceof RegistryPackageType) {
       return InfosetUtil.getExternalIdentifierValue(
           XDSConstants.UUID_XDSSubmissionSet_sourceId, (RegistryPackageType) obj);
     }
   }
   throw new XDSException(
       XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Missing XDSSubmissionSet.sourceId!", null);
 }
 private void logRequest(ProvideAndRegisterDocumentSetRequestType req) {
   log.info("###### SubmitObjectRequest:" + req.getSubmitObjectsRequest());
   List<Document> docs = req.getDocument();
   log.info("###### Documents:" + docs);
   if (docs != null) {
     StringBuilder sb = new StringBuilder();
     sb.append("######Number of Documents:").append(docs.size());
     int dumpValLen;
     for (Document d : docs) {
       sb.append("\nDocument ID:" + d.getId())
           .append("       size:")
           .append(d.getValue().length)
           .append("       value:");
       try {
         dumpValLen = Math.min(d.getValue().length, 40);
         sb.append(new String(d.getValue(), 0, dumpValLen));
         if (dumpValLen == 40) sb.append("...");
       } catch (Exception x) {
         log.warn("Failed to convert value in String!", x);
       }
     }
     log.info(sb.toString());
   }
 }
 private String checkPatientIDs(
     ProvideAndRegisterDocumentSetRequestType req,
     RegistryPackageType submissionSet,
     List<ExtrinsicObjectType> extrObjs)
     throws XDSException {
   String submissionPatId =
       InfosetUtil.getExternalIdentifierValue(
           XDSConstants.UUID_XDSSubmissionSet_patientId, submissionSet);
   String docPatId;
   ExtrinsicObjectType eo;
   for (int i = 0, len = extrObjs.size(); i < len; i++) {
     eo = extrObjs.get(i);
     docPatId =
         InfosetUtil.getExternalIdentifierValue(XDSConstants.UUID_XDSDocumentEntry_patientId, eo);
     if (docPatId != null && !docPatId.equals(submissionPatId)) {
       String msg =
           "XDSDocumentEntry.patientId ("
               + docPatId
               + ")and XDSSubmissionSet.patientId ("
               + submissionPatId
               + ") doesn't match! ExtrinsicObject.Id:"
               + eo.getId();
       log.warn(msg);
       throw new XDSException(XDSException.XDS_ERR_PATID_DOESNOT_MATCH, msg, null);
     }
   }
   RegistryPackageType folder =
       InfosetUtil.getRegistryPackage(req.getSubmitObjectsRequest(), XDSConstants.UUID_XDSFolder);
   String folderPatId =
       folder == null
           ? null
           : InfosetUtil.getExternalIdentifierValue(XDSConstants.UUID_XDSFolder_patientId, folder);
   if (folderPatId != null && !folderPatId.equals(submissionPatId)) {
     String msg =
         "XDSFolder.patientId ("
             + folderPatId
             + ")and XDSSubmissionSet.patientId ("
             + submissionPatId
             + ") doesn't match!";
     log.warn(msg);
     throw new XDSException(XDSException.XDS_ERR_PATID_DOESNOT_MATCH, msg, null);
   }
   return submissionPatId;
 }