Example #1
0
 private void ConfigureControls(PrintingActivityData data)
 {
     shuffle_CheckBox.Checked          = data.ShuffleDocuments;
     jobseparator_checkBox.Checked     = data.PrintJobSeparator;
     enableThrottling_checkBox.Checked = data.JobThrottling;
     maxJobs_NumericUpDown.Enabled     = data.JobThrottling;
     maxJobs_NumericUpDown.Value       = data.MaxJobsInQueue;
 }
        public XElement Convert(XElement xml)
        {
            // Creating the latest ActivityData
            PrintingActivityData resultData = new PrintingActivityData()
            {
                ShuffleDocuments  = GetBool(xml, "ShuffleDocuments"),
                PrintJobSeparator = GetBool(xml, "PrintJobSeparator"),
                JobThrottling     = GetBool(xml, "JobThrottling"),
                MaxJobsInQueue    = GetInt(xml, "MaxJobsInQueue")
            };

            return(Serializer.Serialize(resultData));
        }
Example #3
0
        /// <summary>
        /// Creates and returns a <see cref="PluginConfigurationData" /> instance containing the
        /// configuration data from this control.
        /// </summary>
        /// <returns>The configuration data.</returns>
        public PluginConfigurationData GetConfiguration()
        {
            PrintingActivityData data = new PrintingActivityData()
            {
                ShuffleDocuments  = shuffle_CheckBox.Checked,
                PrintJobSeparator = jobseparator_checkBox.Checked,
                JobThrottling     = enableThrottling_checkBox.Checked,
                MaxJobsInQueue    = (int)maxJobs_NumericUpDown.Value
            };

            return(new PluginConfigurationData(data, Version)
            {
                Documents = documentSelectionControl.DocumentSelectionData,
                PrintQueues = new PrintQueueSelectionData(_printQueues)
            });
        }
        /// <summary>
        /// Validates the given metadata against the Printing Activity data.
        /// </summary>
        /// <param name="configurationData">The configuration data.</param>
        /// <returns>true if valid</returns>
        public bool ValidateMetadata(ref PluginConfigurationData configurationData)
        {
            bool validData = true;
            PrintingActivityData activityData = null;

            try
            {
                activityData = configurationData.GetMetadata <PrintingActivityData>(ConverterProvider.GetMetadataConverters());
            }
            catch
            {
                activityData = new PrintingActivityData();
                validData    = false;
            }

            configurationData = new PluginConfigurationData(activityData, PrintingConfigurationControl.Version);

            return(validData);
        }
Example #5
0
        /// <summary>
        /// Start the activity.
        /// </summary>
        /// <param name="executionData">Serialized activity data.</param>
        public PluginExecutionResult ProcessActivity(PluginExecutionData executionData)
        {
            PrintingActivityData     data        = executionData.GetMetadata <PrintingActivityData>();
            PrintQueueInfoCollection printQueues = executionData.PrintQueues;

            // Initialize the document iterator, if it is not already created
            if (_documentIterator == null)
            {
                CollectionSelectorMode mode = data.ShuffleDocuments ? CollectionSelectorMode.ShuffledRoundRobin : CollectionSelectorMode.RoundRobin;
                _documentIterator = new DocumentCollectionIterator(mode);
            }

            // Check to make sure we have something in the pool...
            if (printQueues.Count == 0)
            {
                return(new PluginExecutionResult(PluginResult.Skipped, "None of the selected print queues are available.", "No available print queues."));
            }

            // Select a print queue and log the device/server if applicable
            PrintQueueInfo printQueueInfo = printQueues.GetRandom();

            LogDevice(executionData, printQueueInfo);
            LogServer(executionData, printQueueInfo);

            // Get the corresponding system print queue
            LogDebug(string.Format("Retrieving print queue for {0}", printQueueInfo.QueueName));
            PrintQueue printQueue;

            if (ExecutionServices.SessionRuntime.AsInternal().IsCitrixEnvironment())
            {
                printQueue = GetCitrixPrintQueue(printQueueInfo);
            }
            else
            {
                printQueue = PrintQueueController.Connect(printQueueInfo);
            }

            LogDebug(string.Format("Found queue: {0}", printQueue.FullName));

            if (data.JobThrottling)
            {
                // Make sure that there is enough room in the print queue for this job.
                if (!CheckJobCountInQueue(printQueue, data.MaxJobsInQueue))
                {
                    // Skip the activity.
                    return(new PluginExecutionResult(PluginResult.Skipped, "Print Queue cannot accept any more jobs.", "Print queue throttling."));
                }
            }

            LogDebug("Executing print controller");
            if (data.PrintJobSeparator)
            {
                PrintTag(printQueue, executionData);
            }

            // Select a document to print
            Document document = _documentIterator.GetNext(executionData.Documents);
            ActivityExecutionDocumentUsageLog documentLog = new ActivityExecutionDocumentUsageLog(executionData, document);

            ExecutionServices.DataLogger.Submit(documentLog);

            // Download the document and log the starting information for the print job
            Guid              jobId     = SequentialGuid.NewGuid();
            FileInfo          localFile = ExecutionServices.FileRepository.GetFile(document);
            PrintJobClientLog log       = LogPrintJobStart(executionData, localFile, printQueue, jobId);

            // Print the job
            var engine = new Print.PrintingEngine();

            engine.StatusChanged += (s, e) => StatusChanged?.Invoke(s, e);
            var result = engine.Print(localFile, printQueue, jobId);

            // Log the ending information
            LogPrintJobEnd(log, result);
            LogDebug("Controller execution completed");
            return(new PluginExecutionResult(PluginResult.Passed));
        }