internal FileTransmitterEncoderBuilder(FluentJdfLibrary fluentJdfLibrary, EncodingSettings encodingSettings, FileTransmitterEncoder encoder) : base(fluentJdfLibrary) { ParameterCheck.ParameterRequired(encodingSettings, "encodingSettings"); this.fluentJdfLibrary = fluentJdfLibrary; this.encodingSettings = encodingSettings; this.encoder = encoder; }
/// <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); }
/// <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); }
/// <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; }