Пример #1
0
        /// <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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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;
        }