Newer
Older
using System.Text.RegularExpressions;
public class SubmissionBuilder : ISubmissionWithDestination,
ISubmissionWithServiceType, ISubmissionWithAttachments, ISubmissionWithData {
private readonly SendableSubmission _submissionToSend;
private SubmissionBuilder(string destinationId) {
_submissionToSend = new SendableSubmission(destinationId);
public static ISubmissionWithDestination WithDestination(string destinationId) {
throw new ArgumentException("The destination must be a valid GUID");
var result = new SubmissionBuilder(destinationId);
return result;
}
public ISubmissionWithServiceType WithServiceType(string serviceName, string leikaKey) {
if (string.IsNullOrWhiteSpace(leikaKey) || !Regex.IsMatch(leikaKey,
throw new ArgumentException("Invalid leika key");
}
_submissionToSend.ServiceName = serviceName;
_submissionToSend.LeikaKey = leikaKey;
return this;
}
public ISubmissionWithAttachments WithAttachments(List<Attachment> attachments) =>
WithAttachments(attachments.ToArray());
public ISubmissionWithAttachments WithAttachments(params Attachment[] attachments) {
_submissionToSend.Attachments = attachments;
return this;
}
public ISubmissionWithData WithXmlData(string data) {
try {
var doc = new XmlDocument();
doc.LoadXml(data);
}
catch (Exception e) {
throw new ArgumentException("The data must be valid XML string", e);
}
_submissionToSend.Data = data;
_submissionToSend.DataMimeType = System.Net.Mime.MediaTypeNames.Application.Xml;
try {
JsonConvert.DeserializeObject(data);
}
catch (Exception e) {
throw new ArgumentException("The data must be valid JSON string", e);
}
_submissionToSend.DataMimeType = System.Net.Mime.MediaTypeNames.Application.Json;
public SendableSubmission Build() => _submissionToSend;
public class SendableSubmission {
public string DestinationId { get; internal set; }
public string? ServiceName { get; internal set; }
public string? LeikaKey { get; internal set; }
public Attachment[]? Attachments { get; internal set; }
public string? Data { get; internal set; }
internal SendableSubmission(string destinationId) {
DestinationId = destinationId;
}
}
public interface ISubmissionWithDestination {
ISubmissionWithServiceType WithServiceType(string serviceName, string leikaKey);
}
public interface ISubmissionWithServiceType {
ISubmissionWithAttachments WithAttachments(params Attachment[] attachments);
ISubmissionWithAttachments WithAttachments(List<Attachment> attachments);
}
public interface ISubmissionWithAttachments {
ISubmissionWithData WithJsonData(string data);
ISubmissionWithData WithXmlData(string data);
}
public interface ISubmissionWithData {
SendableSubmission Build();
}