diff OrthancServer/Search/DatabaseConstraint.cpp @ 3074:495c5edce708 db-changes

new extension for database plugin SDK: lookupResources
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 02 Jan 2019 15:50:44 +0100
parents 0e9d1731b1b0
children aae1d6d31fef
line wrap: on
line diff
--- a/OrthancServer/Search/DatabaseConstraint.cpp	Wed Jan 02 13:44:18 2019 +0100
+++ b/OrthancServer/Search/DatabaseConstraint.cpp	Wed Jan 02 15:50:44 2019 +0100
@@ -36,6 +36,11 @@
 
 #include "../../Core/OrthancException.h"
 
+#if ORTHANC_ENABLE_PLUGINS == 1
+#  include "../../Plugins/Engine/PluginsEnumerations.h"
+#endif
+
+
 namespace Orthanc
 {
   DatabaseConstraint::DatabaseConstraint(ResourceType level,
@@ -61,6 +66,31 @@
   }      
 
     
+#if ORTHANC_ENABLE_PLUGINS == 1
+  DatabaseConstraint::DatabaseConstraint(const OrthancPluginDatabaseConstraint& constraint) :
+    level_(Plugins::Convert(constraint.level)),
+    tag_(constraint.tagGroup, constraint.tagElement),
+    isIdentifier_(constraint.isIdentifierTag),
+    constraintType_(Plugins::Convert(constraint.type)),
+    caseSensitive_(constraint.isCaseSensitive),
+    mandatory_(constraint.isMandatory)
+  {
+    if (constraintType_ != ConstraintType_List &&
+        values_.size() != 1)
+    {
+      throw OrthancException(ErrorCode_ParameterOutOfRange);
+    }
+
+    values_.resize(constraint.valuesCount);
+
+    for (uint32_t i = 0; i < constraint.valuesCount; i++)
+    {
+      values_[i].assign(constraint.values[i]);
+    }
+  }
+#endif
+    
+
   const std::string& DatabaseConstraint::GetValue(size_t index) const
   {
     if (index >= values_.size())
@@ -85,4 +115,29 @@
       return values_[0];
     }
   }
+
+
+#if ORTHANC_ENABLE_PLUGINS == 1
+  void DatabaseConstraint::EncodeForPlugins(OrthancPluginDatabaseConstraint& constraint,
+                                            std::vector<const char*>& tmpValues) const
+  {
+    memset(&constraint, 0, sizeof(constraint));
+    
+    constraint.level = Plugins::Convert(level_);
+    constraint.tagGroup = tag_.GetGroup();
+    constraint.tagElement = tag_.GetElement();
+    constraint.isIdentifierTag = isIdentifier_;
+    constraint.isCaseSensitive = caseSensitive_;
+    constraint.isMandatory = mandatory_;
+    constraint.type = Plugins::Convert(constraintType_);
+    constraint.valuesCount = values_.size();
+
+    tmpValues.resize(values_.size());
+
+    for (size_t i = 0; i < values_.size(); i++)
+    {
+      tmpValues[i] = values_[i].c_str();
+    }
+  }
+#endif    
 }