/// <summary>
 /// Start the application
 /// </summary>
 /// <param name="request">The start request.</param>
 public void StartApplication(StartApplicationRequest request)
 {
     if (!Faulted)
     {
         _sender.StartApplication(request);
     }
 }
Ejemplo n.º 2
0
        public async Task Then_ApplicationId_is_returned()
        {
            var request = new StartApplicationRequest
            {
                ApplicationId     = ApplicationId,
                CreatingContactId = UserId,
                ApplySequences    = new List <ApplySequence>
                {
                    new ApplySequence
                    {
                        SequenceId = Guid.NewGuid(),
                        SequenceNo = 1,
                        Sections   = new List <ApplySection>
                        {
                            new ApplySection
                            {
                                SectionId = Guid.NewGuid(),
                                SectionNo = 1
                            }
                        }
                    }
                }
            };

            var result = await Handler.Handle(request, CancellationToken.None);

            result.Should().Be(ApplicationId);
        }
Ejemplo n.º 3
0
        public void StartApplication(StartApplicationRequest request)
        {
            if (_proxy != null)
            {
                var rq = request as StartViewerApplicationRequest;
                //_startRequest = request;
                if (rq != null && rq.StudyInstanceUid.Count > 0)
                {
                    Platform.Log(LogLevel.Info, "Sending Start Application request to server for Study: {0}", rq.StudyInstanceUid[0]);
                }
                else
                {
                    Platform.Log(LogLevel.Info, "Sending Start Application request to server");
                }

                request.MetaInformation = new MetaInformation
                {
                    Language = Thread.CurrentThread.CurrentUICulture.Name
                };
                _proxy.StartApplicationAsync(request);
            }
            else
            {
                Platform.Log(LogLevel.Error, "Request for Start Application when no proxy client was created");
            }
        }
Ejemplo n.º 4
0
        internal static Application Start(StartApplicationRequest request)
        {
            var filter = new AttributeExtensionFilter(new ApplicationAttribute(request.GetType()));
            var app    = new ApplicationExtensionPoint().CreateExtension(filter) as IApplication;

            if (app == null)
            {
                throw new NotSupportedException(String.Format("No application extension exists for start request type {0}", request.GetType().FullName));
            }

            if (!(app is Application))
            {
                throw new NotSupportedException("Application class must derive from Application base class.");
            }

            #region Setup

            var application = (Application)app;
            var context     = new ApplicationContext(application);
            application._context = context;

            application._sessionPollingIntervalSeconds = TimeSpan.FromSeconds(ApplicationServiceSettings.Default.SessionPollingIntervalSeconds);

            #endregion

            //NOTE: must call start before adding to the cache; we want the app to be fully initialized before it can be accessed from outside this method.

            application.InternalStart(request);

            Cache.Instance.Add(application);

            return(application);
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Post([FromBody] StartApplicationRequest request)
        {
            var command = new StartApplicationSaga
            {
                FirstName = request.FirstName,
                LastName  = request.LastName,
                Email     = request.Email,
                Password  = request.Password,
                EligibilityQualifierId = request.EligibilityQualifierId,
                ProductId = request.ProductId
            };

            var commandResponse = await _bus.SendCommand <StartApplicationSagaResponse>(command);

            Log.Debug("Got response back from StartApplicationSaga");
            Log.Debug("Attempting to get a token from the identity server at " + _identityClient.EndpointUri);
            var authResult = await _identityClient.GetToken(request.Email, request.Password);

            Log.Debug("Got a response from the Identity Server");

            var response = new StartApplicationResponse
            {
                ApplicationId          = commandResponse.ApplicationId,
                FirstName              = request.FirstName,
                LastName               = request.LastName,
                Email                  = request.Email,
                Token                  = authResult.AccessToken,
                EligibilityQualifierId = request.EligibilityQualifierId,
                ProductId              = request.ProductId
            };

            return(OaoResult.Created(response.ApplicationId, response, commandResponse.Actions));
        }
Ejemplo n.º 6
0
 public async Task <StartApplicationResponse> StartApplications(StartApplicationRequest startAppRequest)
 {
     using (var request = new HttpRequestMessage(HttpMethod.Post, $"/applications/start"))
     {
         return(await PostPutRequestWithResponse <StartApplicationRequest, StartApplicationResponse>(request, startAppRequest));
     }
 }
Ejemplo n.º 7
0
        internal StartApplicationResponse StartApplication(StartApplicationRequest request)
        {
            var marshaller   = new StartApplicationRequestMarshaller();
            var unmarshaller = StartApplicationResponseUnmarshaller.Instance;

            return(Invoke <StartApplicationRequest, StartApplicationResponse>(request, marshaller, unmarshaller));
        }
        private async Task <CreateApplicationRequest> BuildRequest(StartApplicationRequest startApplicationRequest, string applicationType, Guid contactId, Guid organisationId, string referenceFormat)
        {
            var qnaResponse = await _qnaApiClient.StartApplications(startApplicationRequest);

            var sequences = await _qnaApiClient.GetAllApplicationSequences(qnaResponse.ApplicationId);

            var sections = sequences.Select(async sequence => await _qnaApiClient.GetSections(qnaResponse.ApplicationId, sequence.Id)).Select(t => t.Result).ToList();

            return(new CreateApplicationRequest
            {
                ApplicationType = applicationType,
                QnaApplicationId = qnaResponse.ApplicationId,
                OrganisationId = organisationId,
                ApplicationReferenceFormat = referenceFormat,
                CreatingContactId = contactId,
                ApplySequences = sequences.Select(sequence => new ApplySequence
                {
                    SequenceId = sequence.Id,
                    Sections = sections.SelectMany(y => y.Where(x => x.SequenceNo == sequence.SequenceNo).Select(x => new ApplySection
                    {
                        SectionId = x.Id,
                        SectionNo = x.SectionNo,
                        Status = ApplicationSectionStatus.Draft,
                        RequestedFeedbackAnswered = x.QnAData.RequestedFeedbackAnswered
                    })).ToList(),
                    Status = ApplicationSequenceStatus.Draft,
                    IsActive = sequence.IsActive,
                    SequenceNo = sequence.SequenceNo,
                    NotRequired = sequence.NotRequired
                }).ToList()
            });
        }
Ejemplo n.º 9
0
        internal void InternalStart(StartApplicationRequest request)
        {
            try
            {
                ProcessMetaInfo(request.MetaInformation);
                AuthenticateUser(request);
                _synchronizationContext = new WebSynchronizationContext(this);
                _synchronizationContext.Send(nothing => DoStart(request), null);
            }
            catch (Exception)
            {
                Logout();
                DisposeMembers();
                throw;
            }

            lock (_syncLock)
            {
                //DoStart can call Stop.
                if (_stop)
                {
                    return;
                }
            }

            _timer = new System.Threading.Timer(OnTimer, null, TimerInterval, TimerInterval);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Initiates the asynchronous execution of the StartApplication operation.
        /// </summary>
        ///
        /// <param name="request">Container for the necessary parameters to execute the StartApplication operation.</param>
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public Task <StartApplicationResponse> StartApplicationAsync(StartApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var marshaller   = new StartApplicationRequestMarshaller();
            var unmarshaller = StartApplicationResponseUnmarshaller.Instance;

            return(InvokeAsync <StartApplicationRequest, StartApplicationResponse>(request, marshaller,
                                                                                   unmarshaller, cancellationToken));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Initiates the asynchronous execution of the StartApplication operation.
        /// </summary>
        ///
        /// <param name="request">Container for the necessary parameters to execute the StartApplication operation.</param>
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        /// <seealso href="http://docs.aws.amazon.com/goto/WebAPI/kinesisanalyticsv2-2018-05-23/StartApplication">REST API Reference for StartApplication Operation</seealso>
        public virtual Task <StartApplicationResponse> StartApplicationAsync(StartApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();

            options.RequestMarshaller    = StartApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartApplicationResponseUnmarshaller.Instance;

            return(InvokeAsync <StartApplicationResponse>(request, options, cancellationToken));
        }
Ejemplo n.º 12
0
        internal virtual StartApplicationResponse StartApplication(StartApplicationRequest request)
        {
            var options = new InvokeOptions();

            options.RequestMarshaller    = StartApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartApplicationResponseUnmarshaller.Instance;

            return(Invoke <StartApplicationResponse>(request, options));
        }
        public async Task <ActionResult> StartApplication([FromBody] StartApplicationRequest request)
        {
            var newApplicationResponse = await _mediator.Send(request);

            if (!newApplicationResponse.Success)
            {
                _logger.LogError($"Unable to start application | Reason : {newApplicationResponse.Message}");
                return(BadRequest(new BadRequestError(newApplicationResponse.Message)));
            }

            return(Ok(new { newApplicationResponse.Value.ApplicationId }));
        }
Ejemplo n.º 14
0
        public StartApplicationRequestResponse StartApplication(StartApplicationRequest request)
        {
            CheckNumberOfApplications();
            CheckMemoryAvailable();

            try
            {
                OperationContext operationContext = OperationContext.Current;
                // 5 minute timeout, mostly for debugging.
                operationContext.Channel.OperationTimeout = TimeSpan.FromMinutes(5);

                Application application = Application.Start(request);

                //TODO: when we start allowing application recovery, remove these lines.
                // NOTE: These events are fired only if the underlying connection is permanent (eg, duplex http or net tcp).

                // Commented out per CR 3/22/2011, don't want the contenxt to reference the application
                //operationContext.Channel.Closed += delegate { application.Stop(); };
                //operationContext.Channel.Faulted += delegate { application.Stop(); };

                return(new StartApplicationRequestResponse {
                    AppIdentifier = application.Identifier
                });
            }
            catch (Enterprise.Common.InvalidUserSessionException ex)
            {
                throw new FaultException <SessionValidationFault>(new SessionValidationFault {
                    ErrorMessage = ExceptionTranslator.Translate(ex)
                });
            }
            catch (Enterprise.Common.PasswordExpiredException ex)
            {
                throw new FaultException <SessionValidationFault>(new SessionValidationFault {
                    ErrorMessage = ExceptionTranslator.Translate(ex)
                });
            }
            catch (Enterprise.Common.UserAccessDeniedException ex)
            {
                throw new FaultException <SessionValidationFault>(new SessionValidationFault {
                    ErrorMessage = ExceptionTranslator.Translate(ex)
                });
            }
            catch (Enterprise.Common.RequestValidationException ex)
            {
                throw new FaultException <SessionValidationFault>(new SessionValidationFault {
                    ErrorMessage = ExceptionTranslator.Translate(ex)
                });
            }
            catch (Exception ex)
            {
                throw new FaultException(ExceptionTranslator.Translate(ex));
            }
        }
Ejemplo n.º 15
0
        public async Task <IActionResult> StartApplication(PreviewViewModel previewViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(previewViewModel));
            }

            var applicationStartRequest = new StartApplicationRequest
            {
                UserReference   = UserReference,
                WorkflowType    = previewViewModel.ProjectType,
                ApplicationData = previewViewModel.ApplicationData
            };

            var qnaResponse = new StartApplicationResponse();

            try
            {
                qnaResponse = await _qnaApiClient.StartApplications(applicationStartRequest);
            }
            catch (HttpRequestException ex) {
                dynamic obj = JToken.Parse(ex.Message);
                if (obj.statusCode == "400")
                {
                    ModelState.AddModelError(nameof(previewViewModel.ApplicationData), (string)obj.message);
                    return(View(previewViewModel));
                }
            }

            if (_sessionService.Exists("viewPreviewData"))
            {
                _sessionService.Remove("viewPreviewData");
            }
            _sessionService.Set("viewPreviewData", JsonConvert.SerializeObject(previewViewModel));

            var allApplicationSequences = await _qnaApiClient.GetAllApplicationSequences(qnaResponse.ApplicationId);

            var sequenceNos = string.Join(',', allApplicationSequences.Select(x => x.SequenceNo));

            foreach (var _ in allApplicationSequences.Where(seq => seq.SequenceNo == previewViewModel.SequenceNo).Select(seq => new { }))
            {
                var sections = allApplicationSequences.Select(async sequence => await _qnaApiClient.GetSections(qnaResponse.ApplicationId, sequence.Id)).Select(t => t.Result).ToList();
                return(RedirectToAction("Sequence", new { Id = qnaResponse.ApplicationId, sequenceNo = previewViewModel.SequenceNo }));
            }

            ModelState.AddModelError(nameof(previewViewModel.SequenceNo), $"Sequence number not found. Valid sequences are: {sequenceNos}");
            return(View(previewViewModel));
        }
        private async Task <Data.Entities.Application> CreateNewApplication(StartApplicationRequest request, Workflow latestWorkflow, CancellationToken cancellationToken, string applicationData)
        {
            var newApplication = new Data.Entities.Application
            {
                ApplicationStatus = ApplicationStatus.InProgress,
                WorkflowId        = latestWorkflow.Id,
                Reference         = request.UserReference,
                CreatedAt         = SystemTime.UtcNow(),
                ApplicationData   = applicationData
            };

            _dataContext.Applications.Add(newApplication);
            _logger.LogInformation($"Created Application entity: {newApplication.Id}");

            return(newApplication);
        }
        public async Task <HandlerResponse <StartApplicationResponse> > Handle(StartApplicationRequest request, CancellationToken cancellationToken)
        {
            var latestWorkflow = await _dataContext.Workflows.AsNoTracking()
                                 .SingleOrDefaultAsync(w => w.Type == request.WorkflowType && w.Status == "Live", cancellationToken);

            if (latestWorkflow is null)
            {
                _logger.LogError($"Workflow type {request.WorkflowType} does not exist");
                return(new HandlerResponse <StartApplicationResponse>(false, $"Workflow Type does not exist."));
            }

            try
            {
                _applicationDataIsInvalid = !_applicationDataValidator.IsValid(latestWorkflow.ApplicationDataSchema, request.ApplicationData);
            }
            catch (JsonReaderException)
            {
                _logger.LogError("Supplied ApplicationData is not valid JSON");
                return(new HandlerResponse <StartApplicationResponse>(false, $"Supplied ApplicationData is not valid JSON."));
            }

            if (_applicationDataIsInvalid)
            {
                _logger.LogError("Supplied ApplicationData is not valid using Project's Schema");
                return(new HandlerResponse <StartApplicationResponse>(false, $"Supplied ApplicationData is not valid using Project's Schema."));
            }

            var newApplication = await CreateNewApplication(request, latestWorkflow, cancellationToken, request.ApplicationData);

            if (newApplication is null)
            {
                _logger.LogError($"Workflow type {request.WorkflowType} does not exist");
                return(new HandlerResponse <StartApplicationResponse>(false, $"WorkflowType '{request.WorkflowType}' does not exist."));
            }

            await CopyWorkflows(cancellationToken, newApplication);

            await _dataContext.SaveChangesAsync(cancellationToken);

            _logger.LogInformation($"Successfully created new Application. Application Id = {newApplication.Id} | Workflow = {request.WorkflowType}");
            return(new HandlerResponse <StartApplicationResponse>(new StartApplicationResponse {
                ApplicationId = newApplication.Id
            }));
        }
        public async Task <CreateApplicationRequest> BuildInitialRequest(ContactResponse contact, OrganisationResponse organisation, string referenceFormat)
        {
            var startApplicationRequest = new StartApplicationRequest
            {
                UserReference   = contact.Id.ToString(),
                WorkflowType    = WorkflowType,
                ApplicationData = JsonConvert.SerializeObject(new ApplicationData
                {
                    UseTradingName          = false,
                    OrganisationName        = organisation.EndPointAssessorName,
                    OrganisationReferenceId = organisation.Id.ToString(),
                    OrganisationType        = organisation.OrganisationType,
                    CompanySummary          = organisation.CompanySummary,
                    CharitySummary          = organisation.CharitySummary
                })
            };

            return(await BuildRequest(startApplicationRequest, ApplicationTypes.Initial, contact.Id, organisation.Id, referenceFormat));
        }
Ejemplo n.º 19
0
        private void AuthenticateUser(StartApplicationRequest request)
        {
            _userName = request.Username;
            if (!String.IsNullOrEmpty(request.SessionId))
            {
                IsSessionShared = request.IsSessionShared;
            }

            _session = UserAuthentication.ValidateSession(request.Username, request.SessionId);
            if (_session == null)
            {
                return;
            }

            if (_session.Principal != null)
            {
                Thread.CurrentPrincipal = Principal = _session.Principal;
            }
        }
Ejemplo n.º 20
0
        private void DoStart(StartApplicationRequest request)
        {
            _context.FireEvent(new ApplicationStartedEvent
            {
                Identifier     = Guid.NewGuid(),
                SenderId       = Identifier,
                StartRequestId = request.Identifier
            });

            OnStart(request);

            string logMessage = _session == null
                                    ? String.Format("Application {0} has started.", Identifier)
                                    : String.Format("Application {0} has started (user={1}, session={2}, expiry={3}).",
                                                    Identifier, _userName, _session.SessionToken.Id,
                                                    _session.SessionToken.ExpiryTime);

            ConsoleHelper.Log(LogLevel.Info, ConsoleColor.Green, logMessage);

            OnSessionRenewed();
        }
Ejemplo n.º 21
0
        public void StartApplication(StartApplicationRequest request)
        {
            if (_proxy != null)
            {
                var rq = request as StartViewerApplicationRequest;
                //_startRequest = request;
                if (rq!=null && rq.StudyInstanceUid.Count > 0 )
                    Platform.Log(LogLevel.Info, "Sending Start Application request to server for Study: {0}",rq.StudyInstanceUid[0]);
                else
                    Platform.Log(LogLevel.Info, "Sending Start Application request to server");

                request.MetaInformation = new MetaInformation
                                              {
                                                  Language = Thread.CurrentThread.CurrentUICulture.Name
                                              };
                _proxy.StartApplicationAsync(request);
            }
            else
            {
                Platform.Log(LogLevel.Error,"Request for Start Application when no proxy client was created");
            }
        }
        public async Task <CreateApplicationRequest> BuildOrganisationWithdrawalRequest(ContactResponse contact, OrganisationResponse organisation, string referenceFormat)
        {
            var pipelinesCount         = _learnerDetailsApiClient.GetPipelinesCount(organisation.EndPointAssessorOrganisationId, null);
            var earliestWithdrawalDate = _organisationsApiClient.GetEarliestWithdrawalDate(organisation.Id, null);

            await Task.WhenAll(pipelinesCount, earliestWithdrawalDate);

            var startApplicationRequest = new StartApplicationRequest
            {
                UserReference   = contact.Id.ToString(),
                WorkflowType    = WorkflowType,
                ApplicationData = JsonConvert.SerializeObject(new ApplicationData
                {
                    UseTradingName           = false,
                    OrganisationName         = organisation.EndPointAssessorName,
                    OrganisationReferenceId  = organisation.Id.ToString(),
                    PipelinesCount           = pipelinesCount.Result,
                    EarliestDateOfWithdrawal = earliestWithdrawalDate.Result
                })
            };

            return(await BuildRequest(startApplicationRequest, ApplicationTypes.OrganisationWithdrawal, contact.Id, organisation.Id, referenceFormat));
        }
Ejemplo n.º 23
0
 public async Task <ActionResult <Guid> > Start([FromBody] StartApplicationRequest request)
 {
     return(await _mediator.Send(request));
 }
Ejemplo n.º 24
0
 public StartApplicationResponse StartApplication(StartApplicationRequest request)
 {
     throw new NotImplementedException();
 }
 public async Task <Guid> StartApplication(StartApplicationRequest startApplicationRequest)
 {
     return(await Post <StartApplicationRequest, Guid>($"/Application/Start", startApplicationRequest));
 }
Ejemplo n.º 26
0
 protected abstract void OnStart(StartApplicationRequest request);
 public async Task <StartApplicationResponse> StartApplication(StartApplicationRequest request)
 {
     return(await HttpCall <StartApplicationResponse>(async() => await _httpClient.PostAsJsonAsync(new Uri("applications/start", UriKind.Relative), request)));
 }
Ejemplo n.º 28
0
 /// <summary>
 /// Start the application
 /// </summary>
 /// <param name="request">The start request.</param>
 public void StartApplication(StartApplicationRequest request)
 {
     if (!Faulted)
         _sender.StartApplication(request);        
 }
Ejemplo n.º 29
0
 protected override void OnStart(StartApplicationRequest request)
 {
     //NOOP
     IsRunning = true;
 }
Ejemplo n.º 30
0
 public StartApplicationResponse StartApplication(StartApplicationRequest request)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 31
0
 void IApplication.Start(StartApplicationRequest request)
 {
     throw new InvalidOperationException("Start must be called internally.");
 }
Ejemplo n.º 32
0
        protected override void OnStart(StartApplicationRequest request)
        {
            lock (_syncLock)
            {
                Platform.Log(LogLevel.Info, "Viewer Application is starting...");
                if (Application.Instance == null)
                {
                    Platform.StartApp("ClearCanvas.Desktop.Application", new string[] { "-r" });
                }
            }



            if (Platform.IsLogLevelEnabled(LogLevel.Debug))
            {
                Platform.Log(LogLevel.Debug, "Finding studies...");
            }
            var startRequest = (StartViewerApplicationRequest)request;
            IList <StudyRootStudyIdentifier> studies = FindStudies(startRequest);

            List <LoadStudyArgs> loadArgs = CollectionUtils.Map(studies, (StudyRootStudyIdentifier identifier) => CreateLoadStudyArgs(identifier));

            DesktopWindowCreationArgs args   = new DesktopWindowCreationArgs("", Identifier.ToString());
            WebDesktopWindow          window = new WebDesktopWindow(args, Application.Instance);

            window.Open();

            _viewer = CreateViewerComponent(startRequest);

            try
            {
                if (Platform.IsLogLevelEnabled(LogLevel.Debug))
                {
                    Platform.Log(LogLevel.Debug, "Loading study...");
                }
                _viewer.LoadStudies(loadArgs);
            }
            catch (Exception e)
            {
                if (!AnySopsLoaded(_viewer))                 //end the app.
                {
                    throw;
                }

                //Show an error and continue.
                ExceptionHandler.Report(e, window);
            }

            if (Platform.IsLogLevelEnabled(LogLevel.Debug))
            {
                Platform.Log(LogLevel.Info, "Launching viewer...");
            }

            ImageViewerComponent.Launch(_viewer, window, "");

            _viewerHandler = EntityHandler.Create <ViewerEntityHandler>();
            _viewerHandler.SetModelObject(_viewer);
            _app = new Common.ViewerApplication
            {
                Identifier = Identifier,
                Viewer     = (Viewer)_viewerHandler.GetEntity(),

                VersionString = GetProductVersionString()
            };


            // Push the ViewerApplication object to the client
            Event @event = new PropertyChangedEvent
            {
                PropertyName = "Application",
                Value        = _app,
                Identifier   = Guid.NewGuid(),
                SenderId     = request.Identifier
            };

            ApplicationContext.Current.FireEvent(@event);
        }