using System; using System.Collections.Generic; using System.Text; using System.Xml.Xsl; using System.Xml; using System.Diagnostics; using System.IO; // copyright 2008 Dexter Legaspi namespace AP.Utilities.BizTalkDynamicMap { interface IDynamicMapLoader { XslCompiledTransform LoadDynamicMap(object key); } public class BizTalkDynamicMap { public string Transform(object key, object input) { try { IDynamicMapLoader loader = DynamicMapLoaderFactory.GetDefaultDynamicMapLoader(); Trace.Assert(loader != null); XslCompiledTransform map = loader.LoadDynamicMap(key); XmlReader input_doc = XmlReader.Create(new StringReader(input.ToString())); StringWriter output_doc = new StringWriter(); XmlWriterSettings xs = map.OutputSettings.Clone(); map.Transform(input_doc, XmlWriter.Create(output_doc, xs)); return output_doc.ToString(); } catch { return ""; } } } internal class DynamicMapLoaderFactory { public static IDynamicMapLoader GetDefaultDynamicMapLoader() { return new BasicDynamicMapLoader(); } public static IDynamicMapLoader GetDynamicMapLoader(string loader_name) { switch (loader_name) { default: return new BasicDynamicMapLoader(); } } } internal class BasicDynamicMapLoader : IDynamicMapLoader { #region IDynamicMapLoader Members const string LOOKUPS_FILE = @"c:\eai\components\maplookups.xml"; public XslCompiledTransform LoadDynamicMap(object key) { XmlDocument doc = new XmlDocument(); XslCompiledTransform xsl = new XslCompiledTransform(); try { doc.Load(LOOKUPS_FILE); Trace.WriteLine("map lookups file load ok."); Trace.WriteLine("key = " + key.ToString()); string xsl_uri = doc.SelectSingleNode(String.Format("//Map[@Name='{0}']/@Uri", key.ToString())).Value; Trace.WriteLine("xsl_uri = " + key.ToString()); xsl.Load(xsl_uri); return xsl; } catch (Exception e) { // I got an exception, bitch! Trace.WriteLine("exception: " + e); return null; } } #endregion } }