Mercurial > hg > orthanc-databases
comparison Framework/Plugins/OrthancCppDatabasePlugin.h @ 76:a1c6238b26f8 db-changes
new extension implemented for PostgreSQL: GetChildrenMetadata
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 05 Jan 2019 15:51:25 +0100 |
parents | 52c70007bb87 |
children | 2ee166f77501 |
comparison
equal
deleted
inserted
replaced
75:52c70007bb87 | 76:a1c6238b26f8 |
---|---|
79 AllowedAnswers_None, | 79 AllowedAnswers_None, |
80 AllowedAnswers_Attachment, | 80 AllowedAnswers_Attachment, |
81 AllowedAnswers_Change, | 81 AllowedAnswers_Change, |
82 AllowedAnswers_DicomTag, | 82 AllowedAnswers_DicomTag, |
83 AllowedAnswers_ExportedResource, | 83 AllowedAnswers_ExportedResource, |
84 AllowedAnswers_MatchingResource | 84 AllowedAnswers_MatchingResource, |
85 AllowedAnswers_String | |
85 }; | 86 }; |
86 | 87 |
87 OrthancPluginContext* context_; | 88 OrthancPluginContext* context_; |
88 OrthancPluginDatabaseContext* database_; | 89 OrthancPluginDatabaseContext* database_; |
89 AllowedAnswers allowedAnswers_; | 90 AllowedAnswers allowedAnswers_; |
518 const OrthancPluginResourcesContentTags* identifierTags, | 519 const OrthancPluginResourcesContentTags* identifierTags, |
519 uint32_t countMainDicomTags, | 520 uint32_t countMainDicomTags, |
520 const OrthancPluginResourcesContentTags* mainDicomTags, | 521 const OrthancPluginResourcesContentTags* mainDicomTags, |
521 uint32_t countMetadata, | 522 uint32_t countMetadata, |
522 const OrthancPluginResourcesContentMetadata* metadata) = 0; | 523 const OrthancPluginResourcesContentMetadata* metadata) = 0; |
524 #endif | |
525 | |
526 | |
527 #if ORTHANC_PLUGINS_HAS_DATABASE_OPTIMIZATIONS_1 == 1 | |
528 virtual void GetChildrenMetadata(std::list<std::string>& target, | |
529 int64_t resourceId, | |
530 int32_t metadata) = 0; | |
523 #endif | 531 #endif |
524 }; | 532 }; |
525 | 533 |
526 | 534 |
527 | 535 |
1455 | 1463 |
1456 static OrthancPluginErrorCode GetDatabaseVersion(uint32_t* version, | 1464 static OrthancPluginErrorCode GetDatabaseVersion(uint32_t* version, |
1457 void* payload) | 1465 void* payload) |
1458 { | 1466 { |
1459 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | 1467 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
1468 backend->GetOutput().SetAllowedAnswers(DatabaseBackendOutput::AllowedAnswers_None); | |
1460 | 1469 |
1461 try | 1470 try |
1462 { | 1471 { |
1463 *version = backend->GetDatabaseVersion(); | 1472 *version = backend->GetDatabaseVersion(); |
1464 return OrthancPluginErrorCode_Success; | 1473 return OrthancPluginErrorCode_Success; |
1470 static OrthancPluginErrorCode UpgradeDatabase(void* payload, | 1479 static OrthancPluginErrorCode UpgradeDatabase(void* payload, |
1471 uint32_t targetVersion, | 1480 uint32_t targetVersion, |
1472 OrthancPluginStorageArea* storageArea) | 1481 OrthancPluginStorageArea* storageArea) |
1473 { | 1482 { |
1474 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | 1483 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
1484 backend->GetOutput().SetAllowedAnswers(DatabaseBackendOutput::AllowedAnswers_None); | |
1475 | 1485 |
1476 try | 1486 try |
1477 { | 1487 { |
1478 backend->UpgradeDatabase(targetVersion, storageArea); | 1488 backend->UpgradeDatabase(targetVersion, storageArea); |
1479 return OrthancPluginErrorCode_Success; | 1489 return OrthancPluginErrorCode_Success; |
1484 | 1494 |
1485 static OrthancPluginErrorCode ClearMainDicomTags(void* payload, | 1495 static OrthancPluginErrorCode ClearMainDicomTags(void* payload, |
1486 int64_t internalId) | 1496 int64_t internalId) |
1487 { | 1497 { |
1488 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | 1498 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
1499 backend->GetOutput().SetAllowedAnswers(DatabaseBackendOutput::AllowedAnswers_None); | |
1489 | 1500 |
1490 try | 1501 try |
1491 { | 1502 { |
1492 backend->ClearMainDicomTags(internalId); | 1503 backend->ClearMainDicomTags(internalId); |
1493 return OrthancPluginErrorCode_Success; | 1504 return OrthancPluginErrorCode_Success; |
1535 const char* hashStudy, | 1546 const char* hashStudy, |
1536 const char* hashSeries, | 1547 const char* hashSeries, |
1537 const char* hashInstance) | 1548 const char* hashInstance) |
1538 { | 1549 { |
1539 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | 1550 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
1551 backend->GetOutput().SetAllowedAnswers(DatabaseBackendOutput::AllowedAnswers_None); | |
1540 | 1552 |
1541 try | 1553 try |
1542 { | 1554 { |
1543 backend->CreateInstance(*output, hashPatient, hashStudy, hashSeries, hashInstance); | 1555 backend->CreateInstance(*output, hashPatient, hashStudy, hashSeries, hashInstance); |
1544 return OrthancPluginErrorCode_Success; | 1556 return OrthancPluginErrorCode_Success; |
1557 const OrthancPluginResourcesContentTags* mainDicomTags, | 1569 const OrthancPluginResourcesContentTags* mainDicomTags, |
1558 uint32_t countMetadata, | 1570 uint32_t countMetadata, |
1559 const OrthancPluginResourcesContentMetadata* metadata) | 1571 const OrthancPluginResourcesContentMetadata* metadata) |
1560 { | 1572 { |
1561 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | 1573 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
1574 backend->GetOutput().SetAllowedAnswers(DatabaseBackendOutput::AllowedAnswers_None); | |
1562 | 1575 |
1563 try | 1576 try |
1564 { | 1577 { |
1565 backend->SetResourcesContent(countIdentifierTags, identifierTags, | 1578 backend->SetResourcesContent(countIdentifierTags, identifierTags, |
1566 countMainDicomTags, mainDicomTags, | 1579 countMainDicomTags, mainDicomTags, |
1570 ORTHANC_PLUGINS_DATABASE_CATCH | 1583 ORTHANC_PLUGINS_DATABASE_CATCH |
1571 } | 1584 } |
1572 #endif | 1585 #endif |
1573 | 1586 |
1574 | 1587 |
1588 | |
1589 #if ORTHANC_PLUGINS_HAS_DATABASE_OPTIMIZATIONS_1 == 1 | |
1590 // New primitive since Orthanc 1.5.2 | |
1591 static OrthancPluginErrorCode GetChildrenMetadata(OrthancPluginDatabaseContext* context, | |
1592 void* payload, | |
1593 int64_t resourceId, | |
1594 int32_t metadata) | |
1595 { | |
1596 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1597 backend->GetOutput().SetAllowedAnswers(DatabaseBackendOutput::AllowedAnswers_None); | |
1598 | |
1599 try | |
1600 { | |
1601 std::list<std::string> values; | |
1602 backend->GetChildrenMetadata(values, resourceId, metadata); | |
1603 | |
1604 for (std::list<std::string>::const_iterator | |
1605 it = values.begin(); it != values.end(); ++it) | |
1606 { | |
1607 OrthancPluginDatabaseAnswerString(backend->GetOutput().context_, | |
1608 backend->GetOutput().database_, | |
1609 it->c_str()); | |
1610 } | |
1611 | |
1612 return OrthancPluginErrorCode_Success; | |
1613 } | |
1614 ORTHANC_PLUGINS_DATABASE_CATCH | |
1615 } | |
1616 #endif | |
1617 | |
1618 | |
1575 public: | 1619 public: |
1576 /** | 1620 /** |
1577 * Register a custom database back-end written in C++. | 1621 * Register a custom database back-end written in C++. |
1578 * | 1622 * |
1579 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize(). | 1623 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize(). |
1653 | 1697 |
1654 #if ORTHANC_PLUGINS_HAS_DATABASE_OPTIMIZATIONS_1 == 1 | 1698 #if ORTHANC_PLUGINS_HAS_DATABASE_OPTIMIZATIONS_1 == 1 |
1655 // Optimizations brought by Orthanc 1.5.2 | 1699 // Optimizations brought by Orthanc 1.5.2 |
1656 extensions.lookupResources = LookupResources; // Fast lookup | 1700 extensions.lookupResources = LookupResources; // Fast lookup |
1657 extensions.setResourcesContent = SetResourcesContent; // Fast setting tags/metadata | 1701 extensions.setResourcesContent = SetResourcesContent; // Fast setting tags/metadata |
1702 extensions.getChildrenMetadata = GetChildrenMetadata; | |
1658 | 1703 |
1659 if (backend.HasCreateInstance()) | 1704 if (backend.HasCreateInstance()) |
1660 { | 1705 { |
1661 extensions.createInstance = CreateInstance; // Fast creation of resources | 1706 extensions.createInstance = CreateInstance; // Fast creation of resources |
1662 } | 1707 } |