PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
kcenon::pacs::services::xds::imaging_document_consumer Class Reference

#include <imaging_document_consumer.h>

Collaboration diagram for kcenon::pacs::services::xds::imaging_document_consumer:
Collaboration graph

Public Member Functions

 imaging_document_consumer ()=default
 
 imaging_document_consumer (const imaging_document_consumer_config &config)
 
registry_query_result query_registry (const registry_query_params &params) const
 Query the XDS registry for imaging documents.
 
document_retrieval_result retrieve_document (const document_reference &doc_ref) const
 Retrieve a specific document from the XDS repository.
 
document_retrieval_result extract_references (const core::dicom_dataset &kos_dataset) const
 Extract image references from a KOS dataset.
 
std::string build_wado_rs_url (const std::string &study_uid, const std::string &series_uid, const std::string &instance_uid) const
 Build a WADO-RS URL for retrieving a specific instance.
 
const imaging_document_consumer_configconfig () const noexcept
 Get current configuration.
 
void set_config (const imaging_document_consumer_config &config)
 Set configuration.
 

Private Attributes

imaging_document_consumer_config config_
 

Detailed Description

Definition at line 205 of file imaging_document_consumer.h.

Constructor & Destructor Documentation

◆ imaging_document_consumer() [1/2]

kcenon::pacs::services::xds::imaging_document_consumer::imaging_document_consumer ( )
default

◆ imaging_document_consumer() [2/2]

kcenon::pacs::services::xds::imaging_document_consumer::imaging_document_consumer ( const imaging_document_consumer_config & config)
explicit

Definition at line 37 of file imaging_document_consumer.cpp.

39 : config_(config) {}
const imaging_document_consumer_config & config() const noexcept
Get current configuration.

Member Function Documentation

◆ build_wado_rs_url()

std::string kcenon::pacs::services::xds::imaging_document_consumer::build_wado_rs_url ( const std::string & study_uid,
const std::string & series_uid,
const std::string & instance_uid ) const
nodiscard

Build a WADO-RS URL for retrieving a specific instance.

Constructs a WADO-RS retrieve URL based on the configured WADO-RS base URL and the instance identifiers.

Parameters
study_uidStudy Instance UID
series_uidSeries Instance UID
instance_uidSOP Instance UID
Returns
The WADO-RS retrieve URL
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/services/xds/imaging_document_consumer.h.

Definition at line 142 of file imaging_document_consumer.cpp.

145 {
146
147 std::ostringstream url;
148 url << config_.wado_rs_url;
149
150 // Ensure base URL doesn't end with '/'
151 if (!config_.wado_rs_url.empty() && config_.wado_rs_url.back() == '/') {
152 // Remove the trailing '/' already added
153 } else {
154 url << '/';
155 }
156
157 url << "studies/" << study_uid
158 << "/series/" << series_uid
159 << "/instances/" << instance_uid;
160
161 return url.str();
162}
std::string wado_rs_url
WADO-RS base URL for image retrieval (alternative to C-MOVE)

References config_, and kcenon::pacs::services::xds::imaging_document_consumer_config::wado_rs_url.

◆ config()

const imaging_document_consumer_config & kcenon::pacs::services::xds::imaging_document_consumer::config ( ) const
nodiscardnoexcept

Get current configuration.

Returns
Reference to configuration
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/services/xds/imaging_document_consumer.h.

Definition at line 165 of file imaging_document_consumer.cpp.

165 {
166 return config_;
167}

References config_.

Referenced by set_config().

Here is the caller graph for this function:

◆ extract_references()

document_retrieval_result kcenon::pacs::services::xds::imaging_document_consumer::extract_references ( const core::dicom_dataset & kos_dataset) const
nodiscard

Extract image references from a KOS dataset.

Parses a KOS (Key Object Selection) document and extracts the referenced SOP Instance UIDs, organized by study and series.

Parameters
kos_datasetThe KOS dataset to parse
Returns
Retrieval result with extracted references
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/services/xds/imaging_document_consumer.h.

Definition at line 78 of file imaging_document_consumer.cpp.

79 {
80
81 document_retrieval_result result;
82 result.success = true;
83
84 // Parse Current Requested Procedure Evidence Sequence (0040,A375)
85 const auto* evidence_elem = kos_dataset.get(
87
88 if (!evidence_elem || !evidence_elem->is_sequence()) {
89 result.error_message = "KOS document does not contain evidence sequence";
90 result.success = false;
91 return result;
92 }
93
94 for (const auto& study_item : evidence_elem->sequence_items()) {
95 // Extract Study Instance UID
96 auto study_uid = study_item.get_string(tags::study_instance_uid);
97 if (!study_uid.empty()) {
98 if (std::find(result.referenced_study_uids.begin(),
99 result.referenced_study_uids.end(),
100 study_uid) == result.referenced_study_uids.end()) {
101 result.referenced_study_uids.push_back(study_uid);
102 }
103 }
104
105 // Parse Referenced Series Sequence
106 const auto* series_elem = study_item.get(
108 if (!series_elem || !series_elem->is_sequence()) {
109 continue;
110 }
111
112 for (const auto& series_item : series_elem->sequence_items()) {
113 auto series_uid = series_item.get_string(tags::series_instance_uid);
114 if (!series_uid.empty()) {
115 if (std::find(result.referenced_series_uids.begin(),
116 result.referenced_series_uids.end(),
117 series_uid) == result.referenced_series_uids.end()) {
118 result.referenced_series_uids.push_back(series_uid);
119 }
120 }
121
122 // Parse Referenced SOP Sequence
123 const auto* sop_elem = series_item.get(
125 if (!sop_elem || !sop_elem->is_sequence()) {
126 continue;
127 }
128
129 for (const auto& sop_item : sop_elem->sequence_items()) {
130 auto instance_uid = sop_item.get_string(
132 if (!instance_uid.empty()) {
133 result.referenced_instance_uids.push_back(instance_uid);
134 }
135 }
136 }
137 }
138
139 return result;
140}
constexpr dicom_tag study_instance_uid
Study Instance UID.
constexpr dicom_tag series_instance_uid
Series Instance UID.

References kcenon::pacs::services::xds::consumer_tags::current_requested_procedure_evidence_sequence, kcenon::pacs::services::xds::document_retrieval_result::error_message, kcenon::pacs::core::dicom_dataset::get(), kcenon::pacs::services::xds::document_retrieval_result::referenced_instance_uids, kcenon::pacs::services::xds::consumer_tags::referenced_series_sequence, kcenon::pacs::services::xds::document_retrieval_result::referenced_series_uids, kcenon::pacs::services::xds::consumer_tags::referenced_sop_instance_uid, kcenon::pacs::services::xds::consumer_tags::referenced_sop_sequence, kcenon::pacs::services::xds::document_retrieval_result::referenced_study_uids, kcenon::pacs::core::tags::series_instance_uid, kcenon::pacs::core::tags::study_instance_uid, and kcenon::pacs::services::xds::document_retrieval_result::success.

Here is the call graph for this function:

◆ query_registry()

registry_query_result kcenon::pacs::services::xds::imaging_document_consumer::query_registry ( const registry_query_params & params) const
nodiscard

Query the XDS registry for imaging documents.

Performs an ITI-18 (Registry Stored Query) to find imaging documents matching the specified criteria.

Parameters
paramsQuery parameters
Returns
Query result with document references
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/services/xds/imaging_document_consumer.h.

Definition at line 41 of file imaging_document_consumer.cpp.

42 {
43
44 registry_query_result result;
45
46 if (config_.registry_url.empty()) {
47 result.error_message = "XDS registry URL not configured";
48 return result;
49 }
50
51 // NOTE: Actual SOAP request to the XDS registry (ITI-18)
52 // would be implemented here using the network layer.
53 // The ITI-18 transaction uses SOAP/XML encoding with
54 // the AdhocQueryRequest/AdhocQueryResponse pattern.
55 result.success = true;
56
57 return result;
58}
std::string registry_url
XDS Registry endpoint URL for queries (ITI-18)

References config_, kcenon::pacs::services::xds::registry_query_result::error_message, kcenon::pacs::services::xds::imaging_document_consumer_config::registry_url, and kcenon::pacs::services::xds::registry_query_result::success.

◆ retrieve_document()

document_retrieval_result kcenon::pacs::services::xds::imaging_document_consumer::retrieve_document ( const document_reference & doc_ref) const
nodiscard

Retrieve a specific document from the XDS repository.

Performs an ITI-43 (Retrieve Document Set) to fetch a KOS document identified by the document reference.

Parameters
doc_refThe document reference from a registry query
Returns
Retrieval result with the KOS dataset
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/services/xds/imaging_document_consumer.h.

Definition at line 60 of file imaging_document_consumer.cpp.

61 {
62
63 document_retrieval_result result;
64
65 if (config_.repository_url.empty()) {
66 result.error_message = "XDS repository URL not configured";
67 return result;
68 }
69
70 // NOTE: Actual SOAP/MTOM request to the XDS repository (ITI-43)
71 // would be implemented here. The response contains the KOS
72 // document as an MTOM attachment.
73 result.success = true;
74
75 return result;
76}
std::string repository_url
XDS Repository endpoint URL for document retrieval (ITI-43)

References config_, kcenon::pacs::services::xds::document_retrieval_result::error_message, kcenon::pacs::services::xds::imaging_document_consumer_config::repository_url, and kcenon::pacs::services::xds::document_retrieval_result::success.

◆ set_config()

void kcenon::pacs::services::xds::imaging_document_consumer::set_config ( const imaging_document_consumer_config & config)

Set configuration.

Parameters
configNew configuration
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/services/xds/imaging_document_consumer.h.

Definition at line 169 of file imaging_document_consumer.cpp.

170 {
171 config_ = config;
172}

References config(), and config_.

Here is the call graph for this function:

Member Data Documentation

◆ config_


The documentation for this class was generated from the following files: