private void InitializeSearchParams() { _searchParams = PHINVADSDevice.GetSearchParamInstanceForResource(_program.Plan, _fhirTableNode.ResourceType); _directParams = new Dictionary <String, Object>(); // Ignoring the search params on the plan for now, create search params for this execution here var restrictNode = _fhirTableNode.Node as RestrictNode; if (restrictNode != null) { _apiType = APIType.Find; // TODO: Generalize the stack offset here, this is safe because we know the only scenario we support is restriction of a base table var _program.Stack.Push(null); try { if (restrictNode.IsSeekable) { // Verify that there is only one condition and that it corresponds to a known search parameter for this resource foreach (ColumnConditions columnConditions in restrictNode.Conditions) { // A seekable condition will only have one column condition var searchParamName = GetSearchParamName(columnConditions.Column); var searchValue = GetSearchParamValue(columnConditions[0]); if (IsDirectSearch(columnConditions.Column.Name)) { _apiType = APIType.Direct; } SetSearchParam(searchParamName, searchValue); } } else if (restrictNode.IsScanable) { foreach (ColumnConditions columnConditions in restrictNode.Conditions) { // A scanable condition will always have equality as its instruction foreach (ColumnCondition condition in columnConditions) { var searchParamName = GetSearchParamName(columnConditions.Column); var searchValue = GetSearchParamValue(condition); if (IsDirectSearch(columnConditions.Column.Name)) { _apiType = APIType.Direct; } SetSearchParam(searchParamName, searchValue); } } } else { var searchParamNode = restrictNode.Nodes[1] as SatisfiesSearchParamNode; if (searchParamNode != null) { var columnName = (string)searchParamNode.Nodes[1].Execute(_program); var searchParamName = GetSearchParamName(columnName); var searchValue = (string)searchParamNode.Nodes[2].Execute(_program); if (IsDirectSearch(columnName)) { _apiType = APIType.Direct; } SetSearchParam(searchParamName, searchValue); } } } finally { _program.Stack.Pop(); } } }
public void SetSearchParamContainer(Schema.DevicePlan plan) { _searchParams = PHINVADSDevice.GetSearchParamInstanceForResource(plan.Plan, _resourceType); _directParams = new Dictionary <string, object>(); }