예제 #1
0
 private void coerceNCreateRQ(Command rspCmd, Dataset rqData) {
   rqData.putUI(Tags.SOPClassUID, rspCmd.getAffectedSOPClassUID());
   rqData.putUI(Tags.SOPInstanceUID, rspCmd.getAffectedSOPInstanceUID());
   initSPSModificationDateandTime(rqData);
   if (!rqData.containsValue(Tags.WorklistLabel))
     rqData.putLO(Tags.WorklistLabel, service.getWorklistLabel());
 }
예제 #2
0
 @Override
 protected Dataset doNGet(ActiveAssociation assoc, Dimse rq, Command rspCmd)
     throws IOException, DcmServiceException {
   Command rqCmd = rq.getCommand();
   Dataset rqData = rq.getDataset();
   if (!abstractSyntaxEquals(
       assoc, rq, UIDs.UnifiedProcedureStepPullSOPClass, UIDs.UnifiedProcedureStepWatchSOPClass))
     throw new DcmServiceException(Status.UnrecognizedOperation);
   if (rqData != null)
     throw new DcmServiceException(Status.MistypedArgument, "N-GET-RQ includes Data Set");
   return service.getUPS(
       rspCmd.getAffectedSOPInstanceUID(), rqCmd.getTags(Tags.AttributeIdentifierList));
 }
예제 #3
0
 @Override
 protected Dataset doNCreate(ActiveAssociation assoc, Dimse rq, Command rspCmd)
     throws IOException, DcmServiceException {
   String calledAET = assoc.getAssociation().getCalledAET();
   Command rqCmd = rq.getCommand();
   Dataset rqData = rq.getDataset();
   if (!abstractSyntaxEquals(assoc, rq, UIDs.UnifiedProcedureStepPushSOPClass))
     throw new DcmServiceException(UNRECOGNIZE_OPERATION);
   log.debug("Identifier:\n");
   log.debug(rqData);
   checkNCreateRQ(rqCmd, rqData);
   coerceNCreateRQ(rspCmd, rqData);
   service.createUPS(calledAET, rqData);
   return null;
 }
예제 #4
0
 @Override
 protected Dataset doNSet(ActiveAssociation assoc, Dimse rq, Command rspCmd)
     throws IOException, DcmServiceException {
   String calledAET = assoc.getAssociation().getCalledAET();
   Command rqCmd = rq.getCommand();
   Dataset rqData = rq.getDataset();
   if (!abstractSyntaxEquals(assoc, rq, UIDs.UnifiedProcedureStepPullSOPClass))
     throw new DcmServiceException(UNRECOGNIZE_OPERATION);
   log.debug("Identifier:\n");
   log.debug(rqData);
   checkNSetRQ(rqCmd, rqData);
   initSPSModificationDateandTime(rqData);
   service.updateUPS(calledAET, rspCmd.getAffectedSOPInstanceUID(), rqData);
   return null;
 }
예제 #5
0
 private static void checkNCreateRQ(Command rqCmd, Dataset rqData) throws DcmServiceException {
   shallBeEmpty(rqData, Tags.TransactionUID);
   notAllowed(rqData, Tags.SOPClassUID);
   notAllowed(rqData, Tags.SOPInstanceUID);
   type1(rqData, Tags.SPSPriority);
   type2(rqData, Tags.SPSModificationDateandTime);
   type1(rqData, Tags.ProcedureStepLabel);
   type2(rqData, Tags.WorklistLabel);
   type2(rqData, Tags.ScheduledProcessingParametersSeq);
   checkContentItem(rqData, Tags.ScheduledProcessingParametersSeq);
   type2(rqData, Tags.ScheduledStationNameCodeSeq);
   checkCodeItem(rqData, ItemCount.MULTIPLE, Tags.ScheduledStationNameCodeSeq);
   type2(rqData, Tags.ScheduledStationClassCodeSeq);
   checkCodeItem(rqData, ItemCount.MULTIPLE, Tags.ScheduledStationClassCodeSeq);
   type2(rqData, Tags.ScheduledStationGeographicLocationCodeSeq);
   checkCodeItem(rqData, ItemCount.MULTIPLE, Tags.ScheduledStationGeographicLocationCodeSeq);
   type2(rqData, Tags.ScheduledProcessingApplicationsCodeSeq);
   checkCodeItem(rqData, ItemCount.MULTIPLE, Tags.ScheduledProcessingApplicationsCodeSeq);
   checkScheduledHumanPerformers(rqData);
   type1(rqData, Tags.SPSStartDateAndTime);
   type2(rqData, Tags.ScheduledWorkitemCodeSeq);
   checkCodeItem(rqData, ItemCount.SINGLE, Tags.ScheduledWorkitemCodeSeq);
   type2(rqData, Tags.SPSComments);
   type2(rqData, Tags.InputInformationSeq);
   checkImageSOPInstanceAndSourceReference(rqData, Tags.InputInformationSeq);
   type2(rqData, Tags.AdmissionID);
   type2(rqData, Tags.IssuerOfAdmissionIDSeq);
   type2(rqData, Tags.AdmittingDiagnosisDescription);
   type2(rqData, Tags.AdmittingDiagnosisCodeSeq);
   checkCodeItem(rqData, ItemCount.MULTIPLE, Tags.AdmittingDiagnosisCodeSeq);
   type2(rqData, Tags.RefRequestSeq);
   checkReferencedRequests(rqData);
   type2(rqData, Tags.RelatedProcedureStepSeq);
   checkRelatedProcedureSteps(rqData);
   type1(rqData, Tags.UPSState);
   if (UPSScpService.upsStateAsInt(rqData.getString(Tags.UPSState)) != UPSState.SCHEDULED)
     throw new DcmServiceException(
         UPS_STATE_WAS_NOT_SCHEDULED, "The provided value of UPS State was not SCHEDULED");
   shallBeEmpty(rqData, Tags.UPSProgressInformationSeq);
   shallBeEmpty(rqData, Tags.UPSPerformedProcedureSeq);
 }
예제 #6
0
 public UPSScp(UPSScpService service) {
   this.service = service;
   this.log = service.getLog();
 }
예제 #7
0
 @Override
 protected Dataset doNAction(ActiveAssociation assoc, Dimse rq, Command rspCmd)
     throws IOException, DcmServiceException {
   Association a = assoc.getAssociation();
   String calledAET = a.getCalledAET();
   String callingAET = a.getCallingAET();
   String receivingAET;
   Command rqCmd = rq.getCommand();
   Dataset rqData = rq.getDataset();
   int actionTypeID = rqCmd.getInt(Tags.ActionTypeID, 0);
   rspCmd.putUS(Tags.ActionTypeID, actionTypeID);
   String iuid = rqCmd.getRequestedSOPInstanceUID();
   String tuid;
   int state;
   boolean dellock;
   switch (actionTypeID) {
     case 1:
       if (abstractSyntaxEquals(assoc, rq, UIDs.UnifiedProcedureStepPullSOPClass)) {
         type1(rqData, Tags.UPSState);
         state = UPSScpService.upsStateAsInt(rqData.getString(Tags.UPSState));
         if (state == UPSState.SCHEDULED)
           throw new DcmServiceException(MAY_ONLY_BECOME_SCHEDULED_VIA_NCREATE);
         tuid = rqData.getString(Tags.TransactionUID);
         if (tuid == null) throw new DcmServiceException(CORRECT_TRANSACTION_UID_NOT_PROVIDED);
         service.changeUPSState(calledAET, iuid, state, tuid);
         return rqData;
       }
       break;
     case 2:
       if (abstractSyntaxEquals(
           assoc,
           rq,
           UIDs.UnifiedProcedureStepPushSOPClass,
           UIDs.UnifiedProcedureStepWatchSOPClass)) {
         checkCodeItem(rqData, ItemCount.SINGLE, Tags.UPSDiscontinuationReasonCodeSeq);
         service.requestUPSCancel(calledAET, iuid, callingAET, rqData);
         return rqData;
       }
       break;
     case 3:
       if (abstractSyntaxEquals(assoc, rq, UIDs.UnifiedProcedureStepWatchSOPClass)) {
         type1(rqData, Tags.ReceivingAE);
         type1(rqData, Tags.DeletionLock);
         receivingAET = rqData.getString(Tags.ReceivingAE);
         dellock = deletionLockAsBoolean(rqData.getString(Tags.DeletionLock));
         if (iuid.equals(UIDs.UnifiedWorklistandProcedureStepSOPInstance))
           service.subscribeGlobally(calledAET, receivingAET, dellock);
         else service.subscribeReceiveUPSEventReports(calledAET, iuid, receivingAET, dellock);
         return rqData;
       }
       break;
     case 4:
       if (abstractSyntaxEquals(assoc, rq, UIDs.UnifiedProcedureStepWatchSOPClass)) {
         type1(rqData, Tags.ReceivingAE);
         receivingAET = rqData.getString(Tags.ReceivingAE);
         if (iuid.equals(UIDs.UnifiedWorklistandProcedureStepSOPInstance))
           service.unsubscribeGlobally(receivingAET);
         else service.unsubscribeReceiveUPSEventReports(iuid, receivingAET);
         return rqData;
       }
       break;
     case 5:
       if (abstractSyntaxEquals(assoc, rq, UIDs.UnifiedProcedureStepWatchSOPClass)
           && iuid.equals(UIDs.UnifiedWorklistandProcedureStepSOPInstance)) {
         type1(rqData, Tags.ReceivingAE);
         receivingAET = rqData.getString(Tags.ReceivingAE);
         service.suspendGlobalSubscription(receivingAET);
         return rqData;
       }
       break;
   }
   throw new DcmServiceException(Status.NoSuchActionType).setActionTypeID(actionTypeID);
 }