예제 #1
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);
 }
예제 #2
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);
 }