Пример #1
0
 public MWLQueryCriteriaItem(DPath dcmPath, GWDataDBField gwField)
 {
     DPath            = dcmPath;
     GWDataDBField    = gwField;
     base.SourceField = DicomMappingHelper.DPath2DataColumnName(dcmPath);
     Initialize();
 }
Пример #2
0
 public void Refresh()
 {
     if (DHelper.IsStringLike(DPath.VR))
     {
         Operator = QueryCriteriaOperator.Like;
     }
     SourceField = DicomMappingHelper.DPath2DataColumnName(DPath);
 }
Пример #3
0
 public MWLQueryCriteriaItem(DPath dcmPath)
 {
     DPath            = dcmPath;
     base.SourceField = DicomMappingHelper.DPath2DataColumnName(dcmPath);
     GWDataDBField    = GWDataDBField.Null;
     Translating.Type = TranslatingType.None;
     Initialize();
 }
Пример #4
0
 public MWLQueryResultItem(DPath dcmPath)
 {
     DPath                  = dcmPath;
     base.TargetField       = DicomMappingHelper.DPath2DataColumnName(dcmPath);
     GWDataDBField          = GWDataDBField.Null;
     Translating.Type       = TranslatingType.FixValue;
     Translating.ConstValue = "";
 }
Пример #5
0
 public StorageItem(DPath dcmPath)
 {
     DPath                  = dcmPath;
     SourceField            = DicomMappingHelper.DPath2DataColumnName(DPath);// DPath.Seperator + dcmPath.Path;
     GWDataDBField          = GWDataDBField.Null;
     Translating.Type       = TranslatingType.None;
     Translating.ConstValue = "";
 }
Пример #6
0
        public IInboundRule[] GetRules()
        {
            DicomMappingHelper.CleanQRMappingList
            <StorageItem>(Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList);

            AddEventTypeItem(Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList, GWEventType.PACSImageArrival.Code);  //14

            return(new IInboundRule[] { Program.ConfigMgt.Config.StorageRule });
        }
Пример #7
0
        private static void UpdateGUID(DataTable dt, DataColumn dc, string columnName, GWDataDBField field)
        {
            if (dc.ColumnName == columnName)
            {
                Dictionary <string, string> rpIDs = new Dictionary <string, string>();
                foreach (DataRow dr in dt.Rows)
                {
                    object o    = dr[dc];
                    string rpID = (o == null) ? "" : o.ToString();
                    if (rpID.Length < 1)    // need to generate GUID
                    {
                        string guid = DicomMappingHelper.GetGUID(dr);
                        if (rpIDs.ContainsKey(guid))
                        {
                            // 20100222
                            // has already generated GUID in this loop,
                            // for example there are two records with same guid and splitted according to multiple procedure codes

                            // 20100227
                            // as we move the auto generating STDUID before the procedure code spliting in the class Kodak.GCGateway.DicomAdapter.MWLServer.Dicom.WorklistSCP,
                            // this (different records with the same guid/data_id) will not happen any more.

                            rpID = rpIDs[guid];
                        }
                        else
                        {
                            rpID = DHelper.GetDicomGUID(Program.DeviceMgt.DeviceDirInfor.Header.ID, Program.ConfigMgt.Config.MaxAutoGeneratedLengthOfSTDUID);
                            rpIDs.Add(guid, rpID);
                        }
                        dr[dc] = rpID;
                    }
                }
                if (rpIDs.Count > 0)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (KeyValuePair <string, string> pair in rpIDs)
                    {
                        string tableName = GWDataDB.GetTableName(Program.InterfaceName, GWDataDBTable.Order);
                        string pkName    = GWDataDBField.o_DATA_ID.FieldName;
                        string fieldName = field.FieldName;
                        sb.Append("UPDATE ").Append(tableName)
                        .Append(" SET ").Append(fieldName).Append(" = '").Append(pair.Value).Append("'")
                        .Append(" WHERE ").Append(pkName).Append(" = '").Append(pair.Key).Append("';\r\n");
                    }
                    if (Program.Database.DoQuery(sb.ToString()) == null)
                    {
                        Program.Log.Write(LogType.Error, "Update " + columnName + " into database failed.");
                    }
                    else
                    {
                        Program.Log.Write("Update " + columnName + " into database succeeded.");
                    }
                }
            }
        }
Пример #8
0
        private static void UpdateID(DataTable dt, DataColumn dc, string columnName, GWDataDBField field)
        {
            if (dc.ColumnName == columnName)
            {
                Dictionary <string, string> rpIDs = new Dictionary <string, string>();
                foreach (DataRow dr in dt.Rows)
                {
                    object o    = dr[dc];
                    string rpID = (o == null) ? "" : o.ToString();
                    if (rpID.Length < 1)
                    {
                        string guid = DicomMappingHelper.GetGUID(dr);
                        if (rpIDs.ContainsKey(guid))
                        {
                            // 20100222
                            // please see the function UpdateGUID() for details

                            rpID = rpIDs[guid];
                        }
                        else
                        {
                            rpID = GetRandomNumber(Program.ConfigMgt.Config.MaxAutoGeneratedLengthOfRPIDAndSPSID).ToString();
                            rpIDs.Add(guid, rpID);
                        }
                        dr[dc] = rpID;
                    }
                }
                if (rpIDs.Count > 0)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (KeyValuePair <string, string> pair in rpIDs)
                    {
                        string tableName = GWDataDB.GetTableName(Program.InterfaceName, GWDataDBTable.Order);
                        string pkName    = GWDataDBField.o_DATA_ID.FieldName;
                        string fieldName = field.FieldName;
                        sb.Append("UPDATE ").Append(tableName)
                        .Append(" SET ").Append(fieldName).Append(" = '").Append(pair.Value).Append("'")
                        .Append(" WHERE ").Append(pkName).Append(" = '").Append(pair.Key).Append("';\r\n");
                    }
                    //Program.Log.Write(sb.ToString());
                    if (Program.Database.DoQuery(sb.ToString()) == null)
                    {
                        Program.Log.Write(LogType.Error, "Update " + columnName + " into database failed.");
                    }
                    else
                    {
                        Program.Log.Write("Update " + columnName + " into database succeeded.");
                    }
                }
            }
        }
Пример #9
0
        public IOutboundRule[] GetRules()
        {
            DicomMappingHelper.CleanMappingList
            <MWLQueryCriteriaItem, MWLQueryResultItem>(Program.ConfigMgt.Config.Rule);
            WorklistSCPHelper.ModifyQCMappingList_CS
            <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, true);
            DicomMappingHelper.ModifyQCMappingList_DateTime
            <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, true);
            DicomMappingHelper.ModifyQCMappingList_FixValue
            <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList);
            DicomMappingHelper.SetDataIDMapping
            <MWLQueryResultItem>(Program.ConfigMgt.Config.Rule.QueryResult.MappingList);
            WorklistSCPHelper.SetAdditionalQueryCriteria
            <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList,
                                   Program.ConfigMgt.Config.AdditionalQueryCriteria,
                                   Program.ConfigMgt.Config.AdditionalQueryCriteriaJoinType);

            return(new IOutboundRule[] { Program.ConfigMgt.Config.Rule });
        }
Пример #10
0
 public bool Load()
 {
     try
     {
         using (StreamReader sr = File.OpenText(FileName))
         {
             string str = sr.ReadToEnd();
             Config = XObjectManager.CreateObject(str, typeof(MWLServerConfig)) as MWLServerConfig;
             DicomMappingHelper.SetFixValue <MWLQueryCriteriaItem, MWLQueryResultItem>(Config.Rule);
             return(true);
         }
     }
     catch (Exception e)
     {
         Program.Log.Write(e);
         _lastError = e;
         return(false);
     }
 }
Пример #11
0
        public bool Initialize(string[] arguments)
        {
            Program.PreLoading();
            Program.Log.Write(Program.AppName + " is running in Adapter.Service host.");

            if (arguments != null && arguments.Length > 0)
            {
                string str = arguments[0];
                //Program.Log.Write("GWDataDB connection: " + str); //contains db pw
                Program.ConfigMgt.Config.GWDataDBConnection = str;
            }

            DicomMappingHelper.SQLMatchChar = "";
            DicomMappingHelper.PreperatMappingList <StorageItem>(StorageList, Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList);

            DicomMappingHelper.CleanQRMappingList
            <StorageItem>(Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList);

            return(true);
        }
Пример #12
0
        public bool Initialize(string[] arguments)
        {
            Program.PreLoading();
            Program.Log.Write(Program.AppName + " is running in Adapter.Service host.");


            DicomMappingHelper.PersonNameRule = Program.ConfigMgt.Config.PersonNameRule;

            WorklistSCPHelper.ModifyQCMappingList_CS
            <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, false);
            DicomMappingHelper.ModifyQCMappingList_DateTime
            <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, false);

            DicomMappingHelper.PreperatMappingList <MWLQueryResultItem>(QRList, Program.ConfigMgt.Config.Rule.QueryResult.MappingList);
            DicomMappingHelper.PreperatMappingList <MWLQueryCriteriaItem>(QCList, Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList);


            DicomMappingHelper.CleanMappingList
            <MWLQueryCriteriaItem, MWLQueryResultItem>(Program.ConfigMgt.Config.Rule);

            return(true);
        }
Пример #13
0
        public DicomCStoreResponse OnCStoreRequest(DicomCStoreRequest request)
        {
            string prefix   = "[STORAGESCP] [" + session + "] ";
            var    studyUid = request.Dataset.Get <string>(DicomTag.StudyInstanceUID);
            var    instUid  = request.SOPInstanceUID.UID;

            Program.Log.Write(prefix + "Begin processing c-store request. " + request.SOPClassUID.UID);

            bool         res = true;
            DElementList iod = new DElementList(request.Dataset);

            if (Program.ConfigMgt.Config.SOAPEnable) //SOAP communication, 20121017
            {
                string requestDataSet = iod.ToDicomXMLString();
                string requestSoap    = string.Empty;
                string responseSoap   = string.Empty;

                string tick = DateTime.Now.Ticks.ToString();

                res = _reqTran.TransformString(requestDataSet, ref requestSoap);

                if (!res)
                {
                    Program.Log.Write(LogType.Error, "Transforming DICOM message to SOAP failed. ");
                    return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure));
                }

                res = _SOAPClient.SendMessage(requestSoap, out responseSoap);

                if (!res)
                {
                    Program.Log.Write(LogType.Error, "Sending SOAP message failed. ");
                    return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure));
                }
            }
            else
            {
                if (StorageSCPService.Service == null)
                {
                    Program.Log.Write(prefix + "[WARNING] SCP is not binded to GC Gateway, dump data to local folder only.");
                    iod.SaveXmlFile("StorageIOD_" + DateTime.Now.Ticks.ToString() + ".xml");
                }
                else
                {
                    DataSet dsIOD = DicomMappingHelper.CreateQCDataSet
                                    <StorageItem>(StorageSCPService.Service.StorageList, request.Dataset);

                    if (dsIOD == null)
                    {
                        Program.Log.Write(prefix + "[WARNING] Process storage IOD failed.");
                        return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure));
                    }

                    res = StorageSCPService.Service.SaveData(Program.ConfigMgt.Config.StorageRule, dsIOD);

                    if (!res)
                    {
                        Program.Log.Write(prefix + "[WARNING] Insert GC Gateway database failed.");
                        return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure));
                    }
                }
            }
            Program.Log.Write("[STORAGESCP] [" + session + "] Finish processing c-store request. Result:" + res.ToString());

            return(new DicomCStoreResponse(request, DicomStatus.Success));
        }
Пример #14
0
        public static DElementListWrapper[] CreateQRElementList <TR>(XCollection <TR> qrList, DataSet dsQR)
            where TR : QueryResultItem, IDicomMappingItem
        {
            if (qrList == null || dsQR == null || dsQR.Tables.Count < 1)
            {
                return(null);
            }

            DataTable dt       = dsQR.Tables[0];
            string    pkColumn = Program.ConfigMgt.Config.PrimaryKeyColumnName;

            if (!dt.Columns.Contains(pkColumn))
            {
                return(null);
            }

            Dictionary <string, List <DataRow> > drDict = new Dictionary <string, List <DataRow> >();

            foreach (DataRow dr in dt.Rows)
            {
                string key     = null;
                string pkValue = dr[pkColumn] as string;
                //if (pkValue != null || pkValue.Length > 0)
                if (pkValue != null && pkValue.Length > 0)
                {
                    key = pkValue;
                }
                else
                {
                    key = "_" + dt.Rows.IndexOf(dr).ToString();
                }

                if (drDict.ContainsKey(key))
                {
                    drDict[key].Add(dr);
                }
                else
                {
                    List <DataRow> drList = new List <DataRow>();
                    drDict.Add(key, drList);
                    drList.Add(dr);
                }
            }

            List <DElementListWrapper> dcmResult = new List <DElementListWrapper>();

            foreach (KeyValuePair <string, List <DataRow> > pair in drDict)
            {
                int          count      = qrList.Count;
                DicomDataset dcmEleList = new DicomDataset();
                for (int index = 0; index < count; index++)
                {
                    IDicomMappingItem qr = qrList[index] as IDicomMappingItem;
                    if (!qr.DPath.Enable)
                    {
                        continue;
                    }
                    //int tag = qr.DPath.GetTag(0);
                    List <string> tagList  = qr.DPath.GetTagGE(0);
                    ushort        uGroup   = DHelper.HexString2ushort(tagList[0]);
                    ushort        uElement = DHelper.HexString2ushort(tagList[1]);
                    DicomTag      tag      = new DicomTag(uGroup, uElement);
                    FillElement <TR>(dcmEleList, tag, qr.DPath.VR, ref index, 0, qrList, pair.Value.ToArray());
                    //dcmEleList.Add(ele);
                }
                DElementListWrapper w = new DElementListWrapper(dcmEleList);
                foreach (DataRow dr in pair.Value)
                {
                    w.GUIDs.Add(DicomMappingHelper.GetGUID(dr));
                }
                dcmResult.Add(w);
            }

            return(dcmResult.ToArray());
        }
Пример #15
0
        public static WorklistIOD Create(bool isResult)
        {
            WorklistIOD iod = new WorklistIOD();

            //Scheduled Procedure Step
            if (isResult)
            {
                iod.Add(getScheduledProcedureStepSequence(
                            getScheduledProcedureStepSequenceItem(
                                getScheduledProtocolCodeSequenceItem(
                                    getProtocolContextSequenceItem())
                                )
                            )
                        );
            }
            else
            {
                iod.Add(getScheduledProcedureStepSequence(
                            getScheduledProcedureStepSequenceItem(
                                getScheduledProtocolCodeSequenceItem()
                                )
                            )
                        );
            }

            DicomMappingHelper.SetCatagory(iod, "Scheduled Procedure Step");

            //Request Procedure
            iod.Add(getRequestProcedureID());
            iod.Add(getRequestProcedureDescription());
            iod.Add(getRequestProcedureCodeSequence(getRequestProcedureCodeSequenceItem()));
            iod.Add(getStudyInstanceUID());
            iod.Add(getReferencedStudySequence(getReferencedStudySequenceItem()));

            iod.Add(getReasonForTheRequestedProcedure());
            iod.Add(getRequestedProcedurePriority());
            iod.Add(getPatientTransportArrangements());
            iod.Add(getRequestedProcedureLocation());   //DV CR

            DicomMappingHelper.SetCatagory(iod, "Request Procedure");

            //Image Service Request
            iod.Add(getAccessionNumber());
            iod.Add(getRequestingPhysician());
            iod.Add(getReferringPhysiciansName());

            iod.Add(getRequestingService());            //DV CR

            DicomMappingHelper.SetCatagory(iod, "Image Service Request");

            //Visit
            iod.Add(getAdmissionID());
            iod.Add(getCurrentPatientLocation());
            iod.Add(getReferencedPatientSequence(getReferencedPatientSequenceItem()));

            iod.Add(getVisitStatusID());                //DV CR
            iod.Add(getPatientsInstitutionResidence()); //DV CR

            DicomMappingHelper.SetCatagory(iod, "Visit");

            //Patient
            iod.Add(getPatientsName());
            iod.Add(getPatientID());
            iod.Add(getPatientsBirthDate());
            iod.Add(getPatientsBirthTime());          //DV CR
            iod.Add(getOtherPatientIds());            //DV CR
            iod.Add(getOtherPatientNames());          //DV CR
            iod.Add(getPatientsSex());
            iod.Add(getPatientsWeight());
            iod.Add(getConfidentialityConstraintOnPatientData());
            iod.Add(getPatientState());
            iod.Add(getPregnancyStatus());
            iod.Add(getMedicalAlerts());
            iod.Add(getContrastAllergies());
            iod.Add(getSpecialNeeds());

            iod.Add(getPatientsAge());                  //DV CR
            iod.Add(getPatientsSize());                 //DV CR
            iod.Add(getEthnicGroup());                  //DV CR
            iod.Add(getOccupation());                   //DV CR
            iod.Add(getAdditionalPatientsHistory());    //DV CR

            DicomMappingHelper.SetCatagory(iod, "Patient");

            iod.Add(getExposureDoseSequence(getExposureDoseSequenceItem()));

            return(iod);
        }
Пример #16
0
 public static DPath[] CreateDPath(bool isResult)
 {
     return(DicomMappingHelper.CreateDPath(Create(isResult)));
 }
Пример #17
0
 public MWLQueryResultItem(DPath dcmPath, GWDataDBField gwField)
 {
     DPath            = dcmPath;
     GWDataDBField    = gwField;
     base.TargetField = DicomMappingHelper.DPath2DataColumnName(dcmPath);
 }
Пример #18
0
        public static StorageIOD Storage()
        {
            StorageIOD iod = new StorageIOD();

            //Patient
            iod.Add(getPatientsName());
            iod.Add(getPatientID());
            iod.Add(getIssuerOfPatientID());          //Patient Module
            iod.Add(getPatientsBirthDate());
            iod.Add(getPatientsBirthTime());          //DV CR
            iod.Add(getOtherPatientIds());            //DV CR
            iod.Add(getOtherPatientNames());          //DV CR
            iod.Add(getPatientsSex());
            iod.Add(getPatientsWeight());
            iod.Add(getPatientComments());              //Patient Module
            iod.Add(getPatientState());
            iod.Add(getPregnancyStatus());
            iod.Add(getMedicalAlerts());
            iod.Add(getContrastAllergies());
            iod.Add(getSpecialNeeds());
            iod.Add(getPatientsAge());                  //DV CR
            iod.Add(getPatientsSize());                 //DV CR
            iod.Add(getEthnicGroup());                  //DV CR
            iod.Add(getOccupation());                   //DV CR
            iod.Add(getAdditionalPatientsHistory());    //DV CR

            DicomMappingHelper.SetCatagory(iod, "Patient");

            //Study
            iod.Add(getStudyInstanceUID());
            iod.Add(getStudyDate());
            iod.Add(getStudyTime());
            iod.Add(getReferringPhysiciansName());
            iod.Add(getReferringPhysiciansTelephoneNumber());
            iod.Add(getStudyID());
            iod.Add(getAccessionNumber());
            iod.Add(getStudyDesciption());
            iod.Add(getNameOfPhysiciansReadingStudy());
            iod.Add(getAdmittingDiagnosisDescription());
            iod.Add(getStudyPriorityID());
            iod.Add(getOrderCallbackPhoneNumber());

            DicomMappingHelper.SetCatagory(iod, "Study");

            //Series
            iod.Add(getModality());
            iod.Add(getSeriesInstanceUID());
            iod.Add(getSeriesNumber());
            iod.Add(getLaterality());
            iod.Add(getSeriesDate());
            iod.Add(getSeriesTime());
            iod.Add(getPerformingPhysiciansName());
            iod.Add(getProtocolName());
            iod.Add(getSeriesDesciption());
            iod.Add(getOperatorsName());
            iod.Add(getBodyPartExamined());
            iod.Add(getPatientPosition());

            DicomMappingHelper.SetCatagory(iod, "Series");

            //Equipment
            iod.Add(getManufacturer());
            iod.Add(getInstitutionName());
            iod.Add(getInstitutionAddress());
            iod.Add(getStationName());
            iod.Add(getInstitutionalDepartmentName());
            iod.Add(getManufacturesModelName());
            iod.Add(getDeviceSerialNumber());
            iod.Add(getSoftwareVersions());
            iod.Add(getSpatialResolution());
            iod.Add(getDateOfLastCalibration());
            iod.Add(getTimeOfLastCalibration());
            iod.Add(getAcqusitionDeviceProcessingDescription());
            iod.Add(getViewPosition());
            iod.Add(getPixelPaddingValue());

            DicomMappingHelper.SetCatagory(iod, "Equipment");

            //Image
            iod.Add(getInstanceNumber());
            iod.Add(getPatientOrientation());
            iod.Add(getContentDate());
            iod.Add(getContentTime());
            iod.Add(getImageType());
            iod.Add(getAcquisitionNumber());
            iod.Add(getAcquisitionDate());
            iod.Add(getAcquisitionTime());
            iod.Add(getAcquisitionDateTime());
            iod.Add(getImagesInAcquisition());
            iod.Add(getImageComments());
            iod.Add(getSamplesPerPixel());
            iod.Add(getPhotometricInterpertation());
            iod.Add(getRows());
            iod.Add(getColumns());
            iod.Add(getPixelSpacing());
            iod.Add(getBitsAllocated());
            iod.Add(getBitsStored());
            iod.Add(getHighBit());
            iod.Add(getPixcelRepresentation());
            iod.Add(getQualityControlImage());
            iod.Add(getWindowCenter());
            iod.Add(getWindowWidth());
            iod.Add(getBurnedInAnnotation());
            iod.Add(getLossyImageCompression());
            iod.Add(getLossyImageCompressionRatio());
            iod.Add(getLossyImageCompressionMethod());
            iod.Add(getPresentationLUTShape());

            DicomMappingHelper.SetCatagory(iod, "Image");

            //SOP Common
            iod.Add(getSOPClassUID());
            iod.Add(getSOPInstanceUID());
            iod.Add(getSpecificCharacterSet());
            iod.Add(getInstanceCreationDate());
            iod.Add(getInstanceCreationTime());
            iod.Add(getInstanceCreatorUID());
            iod.Add(getSOPInstanceStatus());
            iod.Add(getSOPAuthorizationDateAndTime());
            iod.Add(getSOPAuthorizationComment());
            iod.Add(getAuthorizationEquipmentCertificationNumber());

            DicomMappingHelper.SetCatagory(iod, "SOP Common");

            return(iod);
        }
Пример #19
0
        public IEnumerable <DicomCFindResponse> OnCFindRequest(DicomCFindRequest request)
        {
            string prefix = "[WorklistSCP] [" + session + "] ";

            Program.Log.Write(prefix + "Begin processing c-find request.");

            List <DicomCFindResponse> responses = new List <DicomCFindResponse>();

            if (request.Level == DicomQueryRetrieveLevel.Worklist || request.Level == DicomQueryRetrieveLevel.Patient)
            {
                DataSet dsQC = DicomMappingHelper.CreateQCDataSet
                               <MWLQueryCriteriaItem>(WorkListSCPService.Service.QCList, request.Dataset);
                WorklistSCPHelper.ModifyQCDataSet(WorkListSCPService.Service.QCList, dsQC);
                if (dsQC == null)
                {
                    Program.Log.Write(prefix + "[WARNING] Process query criteria failed.");
                    responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess));
                    return(responses);
                }

                DataSet dsQR = WorkListSCPService.Service.RequestData(Program.ConfigMgt.Config.Rule, dsQC);

                if (dsQR == null)
                {
                    Program.Log.Write(prefix + "[WARNING] Query GC Gateway database failed.");
                    responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess));
                    return(responses);
                }
                WorklistSCPHelper.GenerateRequestedProcedureID(dsQR, session);

                if (WorklistSCPHelper.SplitDataRow(dsQR))
                {
                    Program.Log.Write(prefix + "[INFORMATION] Found multiple values in code value and performed splitting.");
                }

                //fname = path + "\\DataSet_QR_2_SPLIT_" + DateTime.Now.Ticks.ToString() + ".xml";
                //dsQR.WriteXml(fname);

                DElementListWrapper[] resultList = null;

                if (Program.ConfigMgt.Config.MergeElementList)
                {
                    resultList = WorklistSCPHelper.CreateQRElementList
                                 <MWLQueryResultItem>(WorkListSCPService.Service.QRList, dsQR);
                }
                else
                {
                    resultList = DicomMappingHelper.CreateQRElementList
                                 <MWLQueryResultItem>(WorkListSCPService.Service.QRList, dsQR);
                }

                if (resultList == null)
                {
                    Program.Log.Write(prefix + "[WARNING] Process query result failed.");
                    responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess));
                    return(responses);
                }

                int count = resultList.Length;
                if (count < 1)
                {
                    Program.Log.Write(prefix + "[WARNING] No query result.");
                }
                else
                {
                    int index = 1;
                    foreach (DElementListWrapper eleList in resultList)
                    {
                        Program.Log.Write(prefix + "Sending query result " + (index++).ToString() + "/" + count.ToString());

                        DicomDataset result = new DicomDataset();
                        if (Program.ConfigMgt.Config.SendCharacterSetTag)
                        {
                            //eleList.List.Add(DHelper.CharacterSet);
                            if (DHelper.iCharacterSet != null)
                            {
                                for (int i = 0; i < DHelper.iCharacterSet.Length; i++)
                                {
                                    eleList.List.Add <string>(DicomTag.SpecificCharacterSet, DHelper.iCharacterSet[i]);
                                }
                            }
                        }

                        eleList.List.Add <string>(new DicomTag(0x0000, 0x0002), "1.2.840.10008.5.1.4.31");

                        DicomCFindResponse response = new DicomCFindResponse(request, DicomStatus.Pending);
                        response.Dataset = eleList.List;
                        responses.Add(response);
                    }
                }
            }
            responses.Add(new DicomCFindResponse(request, DicomStatus.Success));
            return(responses);
        }
Пример #20
0
 public static DPath[] StorageDPath()
 {
     return(DicomMappingHelper.CreateDPath(Storage()));
 }
Пример #21
0
 public void Refresh()
 {
     SourceField = DicomMappingHelper.DPath2DataColumnName(DPath);
 }
Пример #22
0
 public StorageItem(DPath dcmPath, GWDataDBField gwField)
 {
     DPath         = dcmPath;
     GWDataDBField = gwField;
     SourceField   = DicomMappingHelper.DPath2DataColumnName(DPath); // DPath.Seperator + dcmPath.Path;
 }
Пример #23
0
        public static void ModifyQCMappingList_CS <TC>(XCollection <TC> qcList, bool withBracket)
            where TC : QueryCriteriaItem, IDicomMappingItem, new()
        {
            if (qcList == null)
            {
                return;
            }
            bool found = true;

            while (found)
            {
                found = false;
                int count = qcList.Count;
                for (int index = 0; index < count; index++)
                {
                    TC item = qcList[index];

                    IDicomMappingItem dcmItem = item as IDicomMappingItem;
                    if (dcmItem == null)
                    {
                        continue;
                    }

                    if (dcmItem.DPath != null &&
                        dcmItem.DPath.VR == DVR.CS &&
                        dcmItem.DPath.Path == DicomMappingHelper.DataColumnName2DPath(item.SourceField))
                    {
                        qcList.Remove(item);

                        if (withBracket)    // for GetRule()
                        {
                            qcList.Insert(index, DicomMappingHelper.GetRightBracket <TC>());
                        }

                        for (int i = Program.ConfigMgt.Config.CSDivisionMAXCount - 1; i >= 0; i--)  // for GetRule() and for NT Service to create QC DataSet
                        {
                            QueryCriteriaItem itemSub = dcmItem.Clone() as QueryCriteriaItem;
                            itemSub.SourceField = itemSub.SourceField + "_" + i.ToString();
                            itemSub.Operator    = QueryCriteriaOperator.Like;
                            if (i == 0)
                            {
                                itemSub.Type = QueryCriteriaType.None;
                            }
                            else
                            {
                                itemSub.Type = QueryCriteriaType.Or;
                            }
                            qcList.Insert(index, itemSub);
                        }

                        if (withBracket)    // for GetRule()
                        {
                            TC itemAnd = DicomMappingHelper.GetLeftBracket <TC>();
                            itemAnd.Type = QueryCriteriaType.And;
                            qcList.Insert(index, itemAnd);
                        }

                        found = true;
                        break;
                    }
                }
            }
        }