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 }