@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;
 }
示例#2
0
 protected void addFromToMatch(
     BooleanBuilder builder,
     StoredQueryParam fromParam,
     StoredQueryParam toParam,
     NumberPath<Long> subselectJoinPk,
     String slotName) {
   String from =
       fromParam == null ? null : XDSUtil.normalizeDTM(fromParam.getStringValue(), false);
   String to = toParam == null ? null : XDSUtil.normalizeDTM(toParam.getStringValue(), true);
   if (from != null || to != null) {
     Predicate fromTo =
         from == null
             ? QSlot.slot.value.loe(to)
             : to != null
                 ? ExpressionUtils.allOf(QSlot.slot.value.goe(from), QSlot.slot.value.loe(to))
                 : QSlot.slot.value.goe(from);
     builder.and(
         new JPASubQuery()
             .from(QSlot.slot)
             .where(QSlot.slot.parent.pk.eq(subselectJoinPk), QSlot.slot.name.eq(slotName), fromTo)
             .exists());
   }
 }
示例#3
0
  public static void logQuery(
      EventTypeCode eventTypeCode,
      AdhocQueryRequest req,
      String srcUserID,
      String altSrcUserID,
      String srcHostName,
      String destUserID,
      String altDestUserID,
      String destHostName,
      boolean success) {

    if (logger != null && logger.isInstalled()) {
      try {
        AdhocQueryType qry = req.getAdhocQuery();
        String patID = XDSUtil.getQueryPatID(qry.getSlot());
        String homeCommunityID =
            InfosetUtil.getSlotValue(qry.getSlot(), XDSConstants.QRY_HOME_COMMUNITY_ID, null);
        if (srcHostName == null) srcHostName = AuditLogger.localHost().getHostName();
        Calendar timeStamp = logger.timeStamp();
        AuditMessage msg =
            XDSAudit.createQuery(
                eventTypeCode,
                qry.getId(),
                patID,
                homeCommunityID,
                InfosetUtil.marshallObject(req, true).getBytes("UTF-8"),
                srcUserID,
                altSrcUserID,
                srcHostName,
                destUserID,
                altDestUserID,
                destHostName,
                timeStamp,
                success ? EventOutcomeIndicator.Success : EventOutcomeIndicator.MinorFailure);
        sendAuditMessage(timeStamp, msg);
      } catch (Exception e) {
        log.warn("Audit log of Stored Query failed!");
        log.debug("AuditLog Exception:", e);
      }
    }
  }
  @Override
  public RetrieveDocumentSetResponseType documentRepositoryRetrieveDocumentSet(
      RetrieveDocumentSetRequestType req) {
    log.info("################ documentRepositoryRetrieveDocumentSet called!");
    RetrieveDocumentSetResponseType rsp = iheFactory.createRetrieveDocumentSetResponseType();
    try {
      String repositoryUID = getRepositoryUniqueId();
      String docUid, reqRepoUid;
      XDSDocument doc;
      RetrieveDocumentSetResponseType.DocumentResponse docRsp;
      List<String> retrievedUIDs = new ArrayList<String>();
      int requestCount = req.getDocumentRequest().size();
      RegistryErrorList regErrors = factory.createRegistryErrorList();
      List<RegistryError> mainErrors = regErrors.getRegistryError();
      for (DocumentRequest docReq : req.getDocumentRequest()) {
        reqRepoUid = docReq.getRepositoryUniqueId();
        docUid = docReq.getDocumentUniqueId();
        if (reqRepoUid == null
            || docUid == null
            || reqRepoUid.trim().length() == 0
            || docUid.trim().length() == 0) {
          mainErrors.add(
              XDSUtil.getRegistryError(
                  XDSException.XDS_ERR_SEVERITY_ERROR,
                  XDSException.XDS_ERR_REPOSITORY_ERROR,
                  "Missing required request parameter! (Repository- or Document Unique ID)",
                  null));
          continue;
        }
        if (reqRepoUid.equals(repositoryUID)) {
          doc = retrieveDocument(docUid);
          if (doc != null) {
            try {
              docRsp = getDocumentResponse(doc, getRepositoryUniqueId());
              rsp.getDocumentResponse().add(docRsp);
              retrievedUIDs.add(docUid);
            } catch (IOException e) {
              String msg = "Error in building DocumentResponse for document:" + doc;
              log.error(msg);
              mainErrors.add(
                  XDSUtil.getRegistryError(
                      XDSException.XDS_ERR_SEVERITY_ERROR,
                      XDSException.XDS_ERR_REPOSITORY_ERROR,
                      msg,
                      docUid));
            }
          } else {
            String msg = "Document not found! document UID:" + docUid;
            log.warn(msg);
            mainErrors.add(
                XDSUtil.getRegistryError(
                    XDSException.XDS_ERR_SEVERITY_ERROR,
                    XDSException.XDS_ERR_DOCUMENT_UNIQUE_ID_ERROR,
                    msg,
                    docUid));
          }
        } else {
          String msg =
              "DocumentRepositoryUID="
                  + reqRepoUid
                  + " is unknown! This repository unique ID:"
                  + repositoryUID;
          log.warn(msg);
          mainErrors.add(
              XDSUtil.getRegistryError(
                  XDSException.XDS_ERR_SEVERITY_ERROR,
                  XDSException.XDS_ERR_UNKNOWN_REPOSITORY_ID,
                  msg,
                  docUid));
        }
      }
      RegistryResponseType regRsp = factory.createRegistryResponseType();

      int nrOfDocs = rsp.getDocumentResponse().size();
      if (nrOfDocs == 0) {
        if (mainErrors.size() == 0)
          throw new XDSException(
              XDSException.XDS_ERR_DOCUMENT_UNIQUE_ID_ERROR,
              "None of the requested documents were found. This repository unique ID "
                  + repositoryUID,
              null);
        regRsp.setStatus(XDSConstants.XDS_B_STATUS_FAILURE);
      } else if (nrOfDocs < requestCount) {
        regRsp.setStatus(XDSConstants.XDS_B_STATUS_PARTIAL_SUCCESS);
      } else {
        regRsp.setStatus(XDSConstants.XDS_B_STATUS_SUCCESS);
      }

      if (mainErrors.size() > 0) {
        regRsp.setRegistryErrorList(regErrors);
      }
      rsp.setRegistryResponse(regRsp);

    } catch (Exception x) {
      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));
      }
    }
    AuditRequestInfo info = new AuditRequestInfo(LogHandler.getInboundSOAPHeader(), wsContext);
    XDSAudit.logRepositoryRetrieveExport(req, rsp, info);
    log.info("################ documentRepositoryRetrieveDocumentSet finished!");
    return rsp;
  }