/// <summary> /// Initializes a new instance of the <see cref="JobViewModel"/> class. /// </summary> /// <param name="job">The <see cref="IJobTicket"/> representing the job /// presented by this <see cref="JobViewModel"/>.</param> /// <exception cref="ArgumentNullException">job is null</exception> public JobViewModel(IJobTicket job) { if (job == null) { throw new ArgumentNullException("job"); } _estimator = new InputTimeEstimator(job); _estimator.PropertyChanged += _estimatorPropertyChanged; TimeEnqueued = DateTime.Now; Identifier = job.Request.Identifier; Inputs = new ObservableCollection <InputViewModel>(); job.Request.Job .GetInputs() .ForEach(x => Inputs.Add(new InputViewModel(x))); _status = string.Empty; _longStatus = string.Empty; _isRunning = false; _sink = new TicketSink(); _sink.JobCancelled += _onJobCancelled; _sink.JobCompleted += _onJobComplete; _sink.JobError += _onJobError; _sink.JobStarted += _onJobStarted; _sink.InputProcessed += _inputProcessed; _sink.InputStarted += _inputStarted; Ticket = job; Ticket.Sinks.Add(_sink); _updateFromState(); }
public void TestWork_EmptyJob() { ObjectJobDefinition d = new ObjectJobDefinition( new PipelineDefinition( new AlgorithmDefinition[] { }), new JobInput[] { }); JobRequest r = new JobRequest(d); JobTicket ticket = new JobTicket(r, new DudCancellationHandler()); ProcessPluginRepository re = new ProcessPluginRepository(); RegistryCache.Cache.Initialize(re); RegistryFactory factory = new RegistryFactory(re); TicketWorker w = new TicketWorker(); WorkerArgs args = new WorkerArgs(new DudPersister(), new BadPipelineFactory()); args.Ticket = ticket; bool didError = false; bool didFinish = false; TicketSink s = new TicketSink(); ticket.Sinks.Add(s); s.JobCompleted += (se, e) => didFinish = true; w.Work(args); // Events are dispatched on a seperate thread, so let it run. Thread.Sleep(15); Assert.IsTrue(didFinish); JobResult result = ticket.Result; Assert.AreEqual(JobState.Complete, result.Result); }
public void TestWork_PluginException() { ObjectJobDefinition d = new ObjectJobDefinition( new PipelineDefinition( new[] { new AlgorithmDefinition("Test", new Property[] { }) }), new[] { new JobInput(Image.FromFile("img.bmp")) }); JobRequest r = new JobRequest(d); JobTicket ticket = new JobTicket(r, new DudCancellationHandler()); TicketWorker w = new TicketWorker(); WorkerArgs args = new WorkerArgs(new DudPersister(), new BadPipelineFactory()); args.Ticket = ticket; bool didError = false; bool didFinish = false; TicketSink s = new TicketSink(); ticket.Sinks.Add(s); s.JobError += (se, e) => didError = true; s.JobCompleted += (se, e) => didFinish = true; w.Work(args); // Events are dispatched on a seperate thread, so let it run. Thread.Sleep(15); Assert.IsTrue(didError); Assert.IsFalse(didFinish); JobResult result = ticket.Result; Assert.AreEqual(JobState.Error, result.Result); Assert.AreEqual(typeof(NotImplementedException), result.Exception.GetType()); }
public void TestWork_InputProcessedFired() { ObjectJobDefinition d = new ObjectJobDefinition( new PipelineDefinition( new[] { new AlgorithmDefinition("Test", new Property[] { }) }), new[] { new JobInput(Image.FromFile("img.bmp")) { Identifier = "Test" } }); JobRequest r = new JobRequest(d); JobTicket ticket = new JobTicket(r, new DudCancellationHandler()); TicketWorker w = new TicketWorker(); WorkerArgs args = new WorkerArgs(new DudPersister(), new DudPipelineFactory()); args.Ticket = ticket; bool didProcess = false; InputProcessedArgs ie = null; TicketSink s = new TicketSink(); ticket.Sinks.Add(s); s.InputProcessed += (se, e) => { didProcess = true; ie = e; }; w.Work(args); Thread.Sleep(5); Assert.IsTrue(didProcess); Assert.IsNotNull(ie); Assert.AreEqual("Test", ie.Identifier); }
/// <summary> /// Initializes a new instance of the <see cref="InputTimeEstimator"/> /// class. /// </summary> /// <param name="ticket">The <see cref="IJobTicket"/> used to /// estimate the duration of the job of.</param> /// <exception cref="ArgumentNullException">ticket is null</exception> public InputTimeEstimator(IJobTicket ticket) { if (ticket == null) { throw new ArgumentNullException("ticket"); } _previousDurations = new List <TimeSpan>(); _ticket = ticket; _sink = new TicketSink(); _ticket.Sinks.Add(_sink); _sink.InputStarted += _inputStarted; _sink.InputProcessed += _inputProcessed; }