public override void Execute()
        {
            Logger.LogInformation("Calculate checksum for file : '{0}'", TargetCollection);

            var eventModel = CurrentActionProperties(TargetCollection, this.GetType().Name);

            OnTrigger(new PreingestEventArgs {
                Description = String.Format("Start calculate checksum for container '{0}'.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Started, PreingestAction = eventModel
            });

            var    anyMessages        = new List <String>();
            string currentCalculation = string.Empty;
            bool   isSuccess          = false;

            try
            {
                /**
                 * checksum-sha224
                 * checksum-sha384
                 **/

                switch (Checksum.ToUpperInvariant())
                {
                case "MD5":
                {
                    OnTrigger(new PreingestEventArgs {
                            Description = String.Format("Calculate checksum for container '{0}' with MD5.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Executing, PreingestAction = eventModel
                        });
                    string url = String.Format("http://{0}:{1}/hooks/{3}?file={2}",
                                               ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, TargetCollection, "checksum-md5");
                    currentCalculation = ChecksumHelper.CreateMD5Checksum(new FileInfo(TargetCollection), url);
                }
                break;

                case "SHA1":
                case "SHA-1":
                {
                    OnTrigger(new PreingestEventArgs {
                            Description = String.Format("Start calculate checksum for container '{0}' with SHA1.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Executing, PreingestAction = eventModel
                        });
                    string url = String.Format("http://{0}:{1}/hooks/{3}?file={2}",
                                               ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, TargetCollection, "checksum-sha1");
                    currentCalculation = ChecksumHelper.CreateSHA1Checksum(new FileInfo(TargetCollection), url);
                }
                break;

                case "SHA224":
                case "SHA-224":
                {
                    OnTrigger(new PreingestEventArgs {
                            Description = String.Format("Start calculate checksum for container '{0}' with SHA224.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Executing, PreingestAction = eventModel
                        });
                    string url = String.Format("http://{0}:{1}/hooks/{3}?file={2}",
                                               ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, TargetCollection, "checksum-sha224");
                    currentCalculation = ChecksumHelper.CreateSHA224Checksum(new FileInfo(TargetCollection), url);
                }
                break;

                case "SHA256":
                case "SHA-256":
                {
                    OnTrigger(new PreingestEventArgs {
                            Description = String.Format("Start calculate checksum for container '{0}' with SHA256.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Executing, PreingestAction = eventModel
                        });
                    string url = String.Format("http://{0}:{1}/hooks/{3}?file={2}",
                                               ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, TargetCollection, "checksum-sha256");
                    currentCalculation = ChecksumHelper.CreateSHA256Checksum(new FileInfo(TargetCollection), url);
                }
                break;

                case "SHA384":
                case "SHA-384":
                {
                    OnTrigger(new PreingestEventArgs {
                            Description = String.Format("Start calculate checksum for container '{0}' with SHA384.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Executing, PreingestAction = eventModel
                        });
                    string url = String.Format("http://{0}:{1}/hooks/{3}?file={2}",
                                               ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, TargetCollection, "checksum-sha384");
                    currentCalculation = ChecksumHelper.CreateSHA384Checksum(new FileInfo(TargetCollection), url);
                }
                break;

                case "SHA512":
                case "SHA-512":
                {
                    OnTrigger(new PreingestEventArgs {
                            Description = String.Format("Start calculate checksum for container '{0}' with SHA512.", TargetCollection), Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Executing, PreingestAction = eventModel
                        });
                    string url = String.Format("http://{0}:{1}/hooks/{3}?file={2}",
                                               ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, TargetCollection, "checksum-sha512");
                    currentCalculation = ChecksumHelper.CreateSHA512Checksum(new FileInfo(TargetCollection), url);
                }
                break;

                default:
                {
                    anyMessages.Add(String.Format("Checksum {0} not defined. No calculation available.", Checksum));
                    Logger.LogWarning(String.Format("Checksum {0} not defined. No calculation available.", Checksum));
                }
                break;
                }
                //failed, no value
                if (String.IsNullOrEmpty(currentCalculation))
                {
                    throw new ApplicationException("Calculation returned nothing or empty value!");
                }

                var fileInformation = new FileInfo(TargetCollection);
                anyMessages.Add(String.Concat("Name : ", fileInformation.Name));
                anyMessages.Add(String.Concat("Extension : ", fileInformation.Extension));
                anyMessages.Add(String.Concat("Size : ", fileInformation.Length));
                anyMessages.Add(String.Concat("CreationTime : ", fileInformation.CreationTimeUtc));
                anyMessages.Add(String.Concat("LastAccessTime : ", fileInformation.LastAccessTimeUtc));
                anyMessages.Add(String.Concat("LastWriteTime : ", fileInformation.LastWriteTimeUtc));
                eventModel.Properties.Messages = anyMessages.ToArray();

                var data = new List <String>();
                data.Add(Checksum);
                data.Add(currentCalculation);

                isSuccess = !String.IsNullOrEmpty(currentCalculation);

                eventModel.ActionResult.ResultValue = PreingestActionResults.Success;
                eventModel.Summary.Processed        = 1;
                eventModel.Summary.Accepted         = 1;
                eventModel.Summary.Rejected         = 0;

                if (!String.IsNullOrEmpty(DeliveredChecksumValue))
                {
                    bool isTheSame = DeliveredChecksumValue.Equals(currentCalculation, StringComparison.InvariantCultureIgnoreCase);
                    data.Add(String.Format("{0} {1} {2}", DeliveredChecksumValue, isTheSame ? "=" : "≠", currentCalculation));

                    eventModel.Properties.Messages = anyMessages.ToArray();
                    if (!isTheSame)
                    {
                        eventModel.ActionResult.ResultValue = PreingestActionResults.Error;
                        eventModel.Summary.Processed        = 1;
                        eventModel.Summary.Accepted         = 0;
                        eventModel.Summary.Rejected         = 1;
                    }
                }

                eventModel.ActionData = data.ToArray();
            }
            catch (Exception e)
            {
                isSuccess = false;

                anyMessages.Clear();
                anyMessages.Add(String.Format("Calculation checksum from file : '{0}' failed!", TargetCollection));
                anyMessages.Add(e.Message);
                anyMessages.Add(e.StackTrace);

                Logger.LogError(e, "Calculation checksum from file : '{0}' failed!", TargetCollection);

                eventModel.Properties.Messages      = anyMessages.ToArray();
                eventModel.ActionResult.ResultValue = PreingestActionResults.Failed;
                eventModel.Summary.Processed        = -1;
                eventModel.Summary.Accepted         = -1;
                eventModel.Summary.Rejected         = -1;

                OnTrigger(new PreingestEventArgs {
                    Description = "An exception occured while calculating the checksum!", Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Failed, PreingestAction = eventModel
                });
            }
            finally
            {
                if (isSuccess)
                {
                    OnTrigger(new PreingestEventArgs {
                        Description = "Checksum calculation is done.", Initiate = DateTimeOffset.Now, ActionType = PreingestActionStates.Completed, PreingestAction = eventModel
                    });
                }
            }
        }
        private List <ResultType> RunFixityCheck(FileInfo binaryFiles, AlgorithmTypes useAlgorithm, string valueToCompare = null)
        {
            List <ResultType> checkResult = new List <ResultType>();

            string currentCalculation = string.Empty, url = string.Empty, urlPart = string.Empty;

            try
            {
                switch (useAlgorithm)
                {
                default:
                case AlgorithmTypes.MD5:
                {
                    urlPart            = "checksum-md5";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateMD5Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA1:
                {
                    urlPart            = "checksum-sha1";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA1Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA224:
                {
                    urlPart            = "checksum-sha224";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA224Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA256:
                {
                    urlPart            = "checksum-sha256";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA256Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA384:
                {
                    urlPart            = "checksum-sha384";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA384Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA512:
                {
                    urlPart            = "checksum-sha512";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA512Checksum(binaryFiles, url);
                }
                break;
                }
            }
            catch (Exception e)
            {
                checkResult.Add(new ResultType
                {
                    Type = ResultType.InfoType.Message,
                    Data = new string[] { binaryFiles.FullName, "Failed to run fixity checksum!", e.Message, e.StackTrace }
                });
            }
            finally {
                if (!String.IsNullOrEmpty(currentCalculation) && HashType.ProcessingMode == ExecutionMode.OnlyCalculate)
                {
                    checkResult.Add(new ResultType
                    {
                        Type = ResultType.InfoType.Action,
                        Data = new string[] { binaryFiles.FullName, currentCalculation }
                    });
                }

                if (!String.IsNullOrEmpty(currentCalculation) && HashType.ProcessingMode == ExecutionMode.CalculateAndCompare)
                {
                    if (currentCalculation.Equals(valueToCompare, StringComparison.InvariantCultureIgnoreCase))
                    {
                        checkResult.Add(new ResultType
                        {
                            Type = ResultType.InfoType.Action,
                            Data = new string[] { binaryFiles.FullName,
                                                  useAlgorithm.ToString(),
                                                  string.Format("Our calculation : {0}", currentCalculation),
                                                  string.Format("Provided value : {0}", valueToCompare), }
                        });
                    }
                    else
                    {
                        checkResult.Add(new ResultType
                        {
                            Type = ResultType.InfoType.Message,
                            Data = new string[] { String.Format("Fixity comparison with file '{0}' using algorithm '{1}' failed!{2}Our calculation: {3}{2}Provided value:{4}  ", binaryFiles.FullName, useAlgorithm, Environment.NewLine, currentCalculation, valueToCompare) }
                        });
                    }
                }
            }

            return(checkResult);
        }