internal FileTransmitterEncoderBuilder(FluentJdfLibrary fluentJdfLibrary, EncodingSettings encodingSettings, FileTransmitterEncoder encoder)
     : base(fluentJdfLibrary) {
     ParameterCheck.ParameterRequired(encodingSettings, "encodingSettings");
     this.fluentJdfLibrary = fluentJdfLibrary;
     this.encodingSettings = encodingSettings;
     this.encoder = encoder;
 }
예제 #2
0
        /// <summary>
        /// Gets the encoder associated with a URI in a given transmitter configuration.
        /// </summary>
        /// <param name="uri">The destination URI.</param>
        /// <returns>The FileTransmitterEncoder for the URI or null if there is no FileTransmitterEncoder for the URI</returns>
        private static FileTransmitterEncoder GetFileTransmitterEncoder(Uri uri)
        {
            FileTransmitterEncoder retVal = null;

            var testPath = uri.GetLocalPath();

            retVal = FluentJdf.Configuration.FluentJdfLibrary.Settings.EncodingSettings.FileTransmitterEncoders
                     .FirstOrDefault(item => item.Value.LocalPath.Equals(testPath, StringComparison.OrdinalIgnoreCase)).Value;
            return(retVal);
        }
예제 #3
0
        /// <summary>
        /// If an item has no FolderInfo, we define the default order that the items will be inserted.
        /// </summary>
        /// <param name="transmissionEncoder">The encoder.</param>
        /// <returns></returns>
        internal static FileTransmitterEncoder BuildDefaultFolderInfoCollection(FileTransmitterEncoder transmissionEncoder)
        {
            FileTransmitterEncoder actualEncoder;

            actualEncoder = new FileTransmitterEncoder(transmissionEncoder.Id, transmissionEncoder.UrlBase, transmissionEncoder.UseMime, transmissionEncoder.NameValues);
            actualEncoder.AddFolderInfo(new FileTransmitterFolderInfo(FolderInfoTypeEnum.Attachment, actualEncoder.UrlBase.ToString(), actualEncoder.UrlBase.ToString(), 1));
            actualEncoder.AddFolderInfo(new FileTransmitterFolderInfo(FolderInfoTypeEnum.Jdf, actualEncoder.UrlBase.ToString(), actualEncoder.UrlBase.ToString(), 2));
            actualEncoder.AddFolderInfo(new FileTransmitterFolderInfo(FolderInfoTypeEnum.Jmf, actualEncoder.UrlBase.ToString(), actualEncoder.UrlBase.ToString(), 3));
            return(actualEncoder);
        }
        /// <summary>
        /// Add a new FileTransmitterEncoder
        /// </summary>
        /// <param name="id">The id of the encoder</param>
        /// <param name="urlBase">The url base</param>
        /// <param name="useMime">UseMime</param>
        /// <param name="nameValues">Extra Values</param>
        /// <returns></returns>
        public FileTransmitterEncoderBuilder FileTransmitterEncoder(string id, string urlBase, bool useMime = false, IDictionary<string, string> nameValues = null) {
            ParameterCheck.StringRequiredAndNotWhitespace(id, "id");
            ParameterCheck.StringRequiredAndNotWhitespace(urlBase, "urlBase");

            if (encodingSettings.FileTransmitterEncoders.ContainsKey(id)) {
                throw new JdfException(string.Format("FileTransmitterEncoder Id already exists {0}", id));
            }
            var newEncoder = new FileTransmitterEncoder(id, urlBase, useMime, nameValues);
            encodingSettings.AddFileTransmitterEncoders(newEncoder);
            return new FileTransmitterEncoderBuilder(fluentJdfLibrary, encodingSettings, newEncoder);
        }
예제 #5
0
        /// <summary>
        /// Transmit data to the given URI.
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="partsToSend"></param>
        /// <returns>A result that includes parsed JMF results if available.</returns>
        public IJmfResult Transmit(Uri uri, ITransmissionPartCollection partsToSend)
        {
            ParameterCheck.ParameterRequired(uri, "uri");
            ParameterCheck.ParameterRequired(partsToSend, "partsToSend");
            if (partsToSend.Count == 0)
            {
                throw new PreconditionException(Messages.FileTransmitter_Transmit_AtLeastOneTransmissionPartIsRequired);
            }
            if (!uri.IsFile && !uri.IsUnc)
            {
                throw new PreconditionException(Messages.FileTransmitter_Transmit_RequiresHttpUrl);
            }

            var transmissionEncoder = GetFileTransmitterEncoder(uri);

            if (transmissionEncoder != null)
            {
                FileTransmitterEncoder actualEncoder;

                if (transmissionEncoder.FolderInfo.Count == 0)
                {
                    actualEncoder = FileTransmitterEncoder.BuildDefaultFolderInfoCollection(transmissionEncoder);
                }
                else
                {
                    actualEncoder = transmissionEncoder;
                }

                List <FileTransmissionItem> results = null;
                try {
                    results = actualEncoder.PrepareTransmission(partsToSend, transmissionPartFactory, encodingfactory, transmissionLogger);

                    foreach (var item in results.OrderBy(item => item.Order))
                    {
                        if (item.Stream.CanSeek)
                        {
                            item.Stream.Seek(0, SeekOrigin.Begin);
                        }
                        var fileInfo = new FileInfo(item.DestinationUri.LocalPath);
                        DirectoryAndFileHelper.EnsureFolderExists(fileInfo.Directory, logger);
                        DirectoryAndFileHelper.SaveStreamToFile(item.Stream, fileInfo, false, logger);
                    }
                }
                catch (Exception err) {
                    logger.Error(string.Format(Messages.HttpTransmitter_Transmit_HttpTransmitter_UnexpectedException, uri), err);
                    throw;
                }
                finally {
                    if (results != null)
                    {
                        try {
                            foreach (var item in results)
                            {
                                item.Dispose();
                            }
                        }
                        finally {
                            //do nothing
                        }
                    }
                }

                return(new FileTransmissionJmfResult());
            }
            else
            {
                //This code is no longer valid
                //TODO delete this code since mime is no longer the default.
                var fileInfo = new FileInfo(uri.LocalPath);
                DirectoryAndFileHelper.EnsureFolderExists(fileInfo.Directory, logger);
                try {
                    var encodingResult = encodingfactory.GetEncodingForTransmissionParts(partsToSend).Encode(partsToSend);
                    transmissionLogger.Log(new TransmissionData(encodingResult.Stream, encodingResult.ContentType, "Request"));

                    if (encodingResult.Stream.CanSeek)
                    {
                        encodingResult.Stream.Seek(0, SeekOrigin.Begin);
                    }

                    DirectoryAndFileHelper.SaveStreamToFile(encodingResult.Stream, fileInfo, false, logger);

                    return(new FileTransmissionJmfResult());
                }
                catch (Exception err) {
                    logger.Error(string.Format(Messages.HttpTransmitter_Transmit_HttpTransmitter_UnexpectedException, uri), err);
                    throw;
                }
            }
        }
 /// <summary>
 /// If an item has no FolderInfo, we define the default order that the items will be inserted.
 /// </summary>
 /// <param name="transmissionEncoder">The encoder.</param>
 /// <returns></returns>
 internal static FileTransmitterEncoder BuildDefaultFolderInfoCollection(FileTransmitterEncoder transmissionEncoder) {
     FileTransmitterEncoder actualEncoder;
     actualEncoder = new FileTransmitterEncoder(transmissionEncoder.Id, transmissionEncoder.UrlBase, transmissionEncoder.UseMime, transmissionEncoder.NameValues);
     actualEncoder.AddFolderInfo(new FileTransmitterFolderInfo(FolderInfoTypeEnum.Attachment, actualEncoder.UrlBase.ToString(), actualEncoder.UrlBase.ToString(), 1));
     actualEncoder.AddFolderInfo(new FileTransmitterFolderInfo(FolderInfoTypeEnum.Jdf, actualEncoder.UrlBase.ToString(), actualEncoder.UrlBase.ToString(), 2));
     actualEncoder.AddFolderInfo(new FileTransmitterFolderInfo(FolderInfoTypeEnum.Jmf, actualEncoder.UrlBase.ToString(), actualEncoder.UrlBase.ToString(), 3));
     return actualEncoder;
 }