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()); }
@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)); }
@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; }
@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; }
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); }
public UPSScp(UPSScpService service) { this.service = service; this.log = service.getLog(); }
@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); }