示例#1
0
        public MainWindowViewModel(
            Lazy <IApplication> application,
            IViewModelFactory viewModelFactory,
            IMessenger messenger,
            IDialogService dialogService,
            IQueryPersistenceService queryPersistenceService,
            AccountCommands accountCommands)
        {
            _application             = application;
            _viewModelFactory        = viewModelFactory;
            _messenger               = messenger;
            _dialogService           = dialogService;
            _queryPersistenceService = queryPersistenceService;
            _accountCommands         = accountCommands;
            Tabs     = new ObservableCollection <TabViewModelBase>();
            Accounts = _viewModelFactory.CreateAccounts();

            _messenger.Subscribe(this).To <NewQuerySheetMessage>((vm, message) => vm.OnNewQuerySheetMessage(message));
            _messenger.Subscribe(this).To <OpenScriptMessage <CosmosStoredProcedure> >((vm, message) => vm.OnOpenScriptMessage(message, _viewModelFactory.CreateStoredProcedureEditor));
            _messenger.Subscribe(this).To <OpenScriptMessage <CosmosUserDefinedFunction> >((vm, message) => vm.OnOpenScriptMessage(message, _viewModelFactory.CreateUserDefinedFunctionEditor));
            _messenger.Subscribe(this).To <OpenScriptMessage <CosmosTrigger> >((vm, message) => vm.OnOpenScriptMessage(message, _viewModelFactory.CreateTriggerEditor));
            _messenger.Subscribe(this).To <SetStatusBarMessage>((vm, message) => vm.OnSetStatusBarMessage(message));

            MruList = new ObservableCollection <string>(_queryPersistenceService.LoadMruList());
            LoadWorkspace();
        }
示例#2
0
        public QuerySheetViewModel(
            QuerySheet querySheet,
            string?path,
            IContainerContext?containerContext,
            IViewModelFactory viewModelFactory,
            IDialogService dialogService,
            IMessenger messenger,
            IQueryPersistenceService queryPersistenceService)
        {
            _containerContext        = containerContext;
            _queryPersistenceService = queryPersistenceService;
            _viewModelFactory        = viewModelFactory;
            _dialogService           = dialogService;
            _messenger = messenger;
            _filePath  = path;
            _title     = string.IsNullOrEmpty(path)
                ? "Untitled " + (++UntitledCounter)
                : Path.GetFileNameWithoutExtension(path);
            _text   = querySheet.Text;
            _result = _viewModelFactory.CreateNotRunQueryResult();

            _partitionKey   = querySheet.PartitionKey;
            PartitionKeyMRU = new ObservableCollection <string>();
            foreach (var mru in querySheet.PartitionKeyMRU)
            {
                PartitionKeyMRU.Add(mru);
            }

            Parameters = new ParametersViewModel <QueryParameterViewModel>();
            foreach (var p in querySheet.Parameters)
            {
                Parameters.AddParameter(CreateParameter(p));
                ShowParameters = true;
            }

            Parameters.AddPlaceholder();
            Parameters.Changed += OnParametersChanged;

            Errors = new ViewModelValidator <QuerySheetViewModel>(this);
            Errors.AddValidator(
                vm => vm.PartitionKey,
                value => string.IsNullOrEmpty(value) || JsonHelper.TryParseJsonValue(value, out _)
                    ? string.Empty
                    : "Invalid partition key value");

            _messenger.Subscribe(this).To <ExplorerSelectedContainerChangedMessage>(
                (vm, message) => vm.OnExplorerSelectedContainerChanged(message));
        }
示例#3
0
        /// <summary>
        /// Query the data store
        /// </summary>
        public static FhirQueryResult Query(ClientRegistryFhirQuery querySpec, List <IResultDetail> details)
        {
            // Get the services
            IClientRegistryDataService dataService  = ApplicationContext.CurrentContext.GetService(typeof(IClientRegistryDataService)) as IClientRegistryDataService;
            IQueryPersistenceService   queryService = ApplicationContext.CurrentContext.GetService(typeof(IQueryPersistenceService)) as IQueryPersistenceService;

            try
            {
                if (querySpec.Quantity > 100)
                {
                    throw new ConstraintException("Query limit must not exceed 100");
                }

                if (dataService == null)
                {
                    throw new InvalidOperationException("No persistence service has been configured, queries cannot continue without this service");
                }

                FhirQueryResult result = new FhirQueryResult();
                result.Query   = querySpec;
                result.Issues  = new List <DetectedIssue>();
                result.Details = details;
                result.Results = new List <SVC.Messaging.FHIR.Resources.ResourceBase>(querySpec.Quantity);

                VersionedDomainIdentifier[] identifiers;

                RegistryQueryRequest queryRequest = new RegistryQueryRequest()
                {
                    QueryRequest = querySpec.Filter,
                    QueryId      = querySpec.QueryId != Guid.Empty ? querySpec.QueryId.ToString() : null,
                    QueryTag     = querySpec.QueryId != Guid.Empty ? querySpec.QueryId.ToString(): null,
                    IsSummary    = !querySpec.IncludeHistory,
                    Offset       = querySpec.Start,
                    Limit        = querySpec.Quantity
                };


                // Is this a continue?
                queryRequest.IsContinue = (!String.IsNullOrEmpty(queryRequest.QueryId) && queryRequest.Offset > 0);

                var dataResults = dataService.Query(queryRequest);
                details.AddRange(dataResults.Details);

                result.TotalResults = dataResults.TotalResults;

                // Fetch the results
                foreach (HealthServiceRecordContainer res in dataResults.Results)
                {
                    if (res == null)
                    {
                        continue;
                    }

                    var resultSubject = res.FindComponent(HealthServiceRecordSiteRoleType.SubjectOf) as HealthServiceRecordContainer ?? res;
                    var processor     = FhirMessageProcessorUtil.GetComponentProcessor(resultSubject.GetType());
                    if (processor == null)
                    {
                        result.Details.Add(new NotImplementedResultDetail(ResultDetailType.Error, String.Format("Will not include {1}^^^&{2}&ISO in result set, cannot find converter for {0}", resultSubject.GetType().Name, resultSubject.Id, ApplicationContext.ConfigurationService.OidRegistrar.GetOid("CR_CID").Oid), null, null));
                    }
                    else
                    {
                        result.Results.Add(processor.ProcessComponent(resultSubject, details));
                    }
                }

                // Sort control?
                // TODO: Support sort control but for now just sort according to confidence then date
                //retVal.Sort((a, b) => b.Id.CompareTo(a.Id)); // Default sort by id

                //if (queryPersistence != null)
                //    result.TotalResults = (int)queryPersistence.QueryResultTotalQuantity(querySpec.QueryId.ToString());
                //else
                //    result.TotalResults = retRecordId.Count(o => o != null);

                return(result);
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.ToString());
                details.Add(new PersistenceResultDetail(ResultDetailType.Error, ex.Message, ex));
                throw;
            }
        }