/// <summary>
        ///     Runs all steps and user interaction that is required during the conversion
        /// </summary>
        public WorkflowResult RunWorkflow(Job job)
        {
            Job = job;
            try
            {
                try
                {
                    DoWorkflowWork();
                }
                catch (AbortWorkflowException ex)
                {
                    // we need to clean up the job when it was cancelled
                    _logger.Warn(ex.Message + " No output will be created.");
                    _workflowResult = WorkflowResult.AbortedByUser;
                }
            }
            catch (WorkflowException ex)
            {
                _logger.Error(ex.Message);
                _workflowResult = WorkflowResult.Error;
            }
            catch (ProcessingException ex)
            {
                _logger.Error("Error " + ex.ErrorCode + ": " + ex.Message);
                ErrorNotifier.Notify(new ActionResult(ex.ErrorCode));
                _workflowResult = WorkflowResult.Error;
            }
            catch (ManagePrintJobsException)
            {
                throw;
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                _workflowResult = WorkflowResult.Error;
            }

            return(_workflowResult);
        }