private XMLNodeInteraction FindNode(IInteraction parameters) { IInteraction candidate; XMLNodeInteraction nodeInteraction = null; // find an XmlNodeInteraction and hold on to that if (parameters.TryGetClosest(typeof(XMLNodeInteraction), out candidate)) { nodeInteraction = (XMLNodeInteraction)candidate; } // But if a new incoming body was acquired after that if (parameters.TryGetClosest(typeof(IIncomingBodiedInteraction), nodeInteraction, out candidate)) { // produce an XmlNodeInteraction from that instead. IIncomingBodiedInteraction source = (IIncomingBodiedInteraction)candidate; XmlDocument document = new XmlDocument(); document.Load(source.IncomingBody); nodeInteraction = new XMLNodeInteraction(parameters, document, source); } if (nodeInteraction == null) { // bitter failure throw new Exception("Couldn't find or produce XML document"); } return(nodeInteraction); }
protected override bool Process(IInteraction parameters) { IIncomingBodiedInteraction incoming = (IIncomingBodiedInteraction)parameters.GetClosest(typeof(IIncomingBodiedInteraction)); IOutgoingBodiedInteraction outgoing = (IOutgoingBodiedInteraction)parameters.GetClosest(typeof(IOutgoingBodiedInteraction)); incoming.IncomingBody.CopyTo(outgoing.OutgoingBody); return(true); }
public bool TryGetDatareader(IInteraction parameters, IInteraction until, out TextReader reader) { IInteraction candidate; bool success; if (IsForwardSourcing) { MemoryStream dataTarget = new MemoryStream(); SimpleOutgoingInteraction dataTargetInteraction; dataTargetInteraction = new SimpleOutgoingInteraction( dataTarget, this.Encoding, parameters); success = ForwardSource.TryProcess(dataTargetInteraction); dataTargetInteraction.Done(); dataTarget.Position = 0; reader = new StreamReader(dataTarget, this.Encoding); } else if (IsVariableSourcing) { string value; success = parameters.TryGetFallbackString(this.Variable, out value); if (success) { reader = new StringReader(value); } else { reader = null; } } else if (parameters.TryGetClosest(typeof(IIncomingBodiedInteraction), until, out candidate)) { IIncomingBodiedInteraction source = (IIncomingBodiedInteraction)candidate; success = CheckMimetype(source.ContentType); reader = source.GetIncomingBodyReader(); } else { success = false; reader = null; } return(success); }
public XMLNodeInteraction(IInteraction parameters, XmlNode node, IIncomingBodiedInteraction source) : base(parameters) { this.Node = node; this.Source = source; this["node_name"] = this.Node.LocalName; if (node.Attributes != null) { foreach (XmlAttribute attrib in node.Attributes) { this[attrib.Name] = attrib.Value; } } }