comparison Framework/Plugins/IndexBackend.cpp @ 210:a0c095a4ba7d

all the integration tests pass on SQLite
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 22 Mar 2021 19:36:43 +0100
parents 13a3863df7fa
children c2e4a909de0e
comparison
equal deleted inserted replaced
209:13a3863df7fa 210:a0c095a4ba7d
2089 } 2089 }
2090 } 2090 }
2091 } 2091 }
2092 # endif 2092 # endif
2093 #endif 2093 #endif
2094
2095
2096 void IndexBackend::CreateInstanceGeneric(OrthancPluginCreateInstanceResult& result,
2097 const char* hashPatient,
2098 const char* hashStudy,
2099 const char* hashSeries,
2100 const char* hashInstance)
2101 {
2102 // Check out "OrthancServer/Sources/Database/Compatibility/ICreateInstance.cpp"
2103
2104 {
2105 OrthancPluginResourceType type;
2106 int64_t tmp;
2107
2108 if (LookupResource(tmp, type, hashInstance))
2109 {
2110 // The instance already exists
2111 assert(type == OrthancPluginResourceType_Instance);
2112 result.instanceId = tmp;
2113 result.isNewInstance = false;
2114 return;
2115 }
2116 }
2117
2118 result.instanceId = CreateResource(hashInstance, OrthancPluginResourceType_Instance);
2119 result.isNewInstance = true;
2120
2121 result.isNewPatient = false;
2122 result.isNewStudy = false;
2123 result.isNewSeries = false;
2124 result.patientId = -1;
2125 result.studyId = -1;
2126 result.seriesId = -1;
2127
2128 // Detect up to which level the patient/study/series/instance
2129 // hierarchy must be created
2130
2131 {
2132 OrthancPluginResourceType dummy;
2133
2134 if (LookupResource(result.seriesId, dummy, hashSeries))
2135 {
2136 assert(dummy == OrthancPluginResourceType_Series);
2137 // The patient, the study and the series already exist
2138
2139 bool ok = (LookupResource(result.patientId, dummy, hashPatient) &&
2140 LookupResource(result.studyId, dummy, hashStudy));
2141 (void) ok; // Remove warning about unused variable in release builds
2142 assert(ok);
2143 }
2144 else if (LookupResource(result.studyId, dummy, hashStudy))
2145 {
2146 assert(dummy == OrthancPluginResourceType_Study);
2147
2148 // New series: The patient and the study already exist
2149 result.isNewSeries = true;
2150
2151 bool ok = LookupResource(result.patientId, dummy, hashPatient);
2152 (void) ok; // Remove warning about unused variable in release builds
2153 assert(ok);
2154 }
2155 else if (LookupResource(result.patientId, dummy, hashPatient))
2156 {
2157 assert(dummy == OrthancPluginResourceType_Patient);
2158
2159 // New study and series: The patient already exist
2160 result.isNewStudy = true;
2161 result.isNewSeries = true;
2162 }
2163 else
2164 {
2165 // New patient, study and series: Nothing exists
2166 result.isNewPatient = true;
2167 result.isNewStudy = true;
2168 result.isNewSeries = true;
2169 }
2170 }
2171
2172 // Create the series if needed
2173 if (result.isNewSeries)
2174 {
2175 result.seriesId = CreateResource(hashSeries, OrthancPluginResourceType_Series);
2176 }
2177
2178 // Create the study if needed
2179 if (result.isNewStudy)
2180 {
2181 result.studyId = CreateResource(hashStudy, OrthancPluginResourceType_Study);
2182 }
2183
2184 // Create the patient if needed
2185 if (result.isNewPatient)
2186 {
2187 result.patientId = CreateResource(hashPatient, OrthancPluginResourceType_Patient);
2188 }
2189
2190 // Create the parent-to-child links
2191 AttachChild(result.seriesId, result.instanceId);
2192
2193 if (result.isNewSeries)
2194 {
2195 AttachChild(result.studyId, result.seriesId);
2196 }
2197
2198 if (result.isNewStudy)
2199 {
2200 AttachChild(result.patientId, result.studyId);
2201 }
2202
2203 TagMostRecentPatient(result.patientId);
2204
2205 // Sanity checks
2206 assert(result.patientId != -1);
2207 assert(result.studyId != -1);
2208 assert(result.seriesId != -1);
2209 assert(result.instanceId != -1);
2210 }
2094 } 2211 }