public static XslTransformExecutionContext GetXslt(string nodePath, bool resolveScripts) { string nodeKey = "xslt:" + nodePath; XslTransformExecutionContext context = (XslTransformExecutionContext)(Cache.Get(nodeKey)); if (context == null) { context = new XslTransformExecutionContext(); context.XslCompiledTransform = new XslCompiledTransform(Debugger.IsAttached); RepositoryPathResolver resolver = new RepositoryPathResolver(); try { context.XslCompiledTransform.Load(nodePath, XsltSettings.Default, resolver); } catch (NullReferenceException e) // rethrow { throw new NullReferenceException(e.Message + "<br/>" + nodePath + " (or include)"); } AggregateCacheDependency aggregatedDependency = new AggregateCacheDependency(); context.NamespaceExtensions = resolver.ImportNamespaceCollection.Distinct().ToArray(); context.ImportScriptCollection = resolver.ImportScriptCollection; context.ImportCssCollection = resolver.ImportCssCollection; foreach (var dependencyPath in resolver.DependencyPathCollection) { // Create an aggregate cache dependeny that includes NodeId, Path, NodeTypeId // Our cache item will be invalidated if the dependency node is invalidated // - by node id // - by path // - by nodeType string fsFilePath = null; if (HttpContext.Current != null && WebApplication.DiskFSSupportMode == DiskFSSupportMode.Prefer) { fsFilePath = HttpContext.Current.Server.MapPath(dependencyPath); } if (!string.IsNullOrEmpty(fsFilePath) && System.IO.File.Exists(fsFilePath)) { SnTrace.Repository.Write("Cannot create cache dependency for a filesystem entry: {0}", fsFilePath); } else { var nodeHead = NodeHead.Get(dependencyPath); aggregatedDependency.Add( new PathDependency(nodeHead.Path), new NodeIdDependency(nodeHead.Id), new NodeTypeDependency(nodeHead.NodeTypeId) ); } } Cache.Insert(nodeKey, context, aggregatedDependency); } if (resolveScripts) { foreach (var script in context.ImportScriptCollection) { UITools.AddScript(script); } foreach (var css in context.ImportCssCollection) { UITools.AddStyleSheetToHeader(UITools.GetHeader(), css); } } return(context); }
public static XslTransformExecutionContext GetXslt(string nodePath, bool resolveScripts) { string nodeKey = "xslt:" + nodePath; XslTransformExecutionContext context = (XslTransformExecutionContext)(DistributedApplication.Cache.Get(nodeKey)); if (context == null) { context = new XslTransformExecutionContext(); context.XslCompiledTransform = new XslCompiledTransform(Debugger.IsAttached); RepositoryPathResolver resolver = new RepositoryPathResolver(); try { context.XslCompiledTransform.Load(nodePath, XsltSettings.Default, resolver); } catch (NullReferenceException e) // rethrow { throw new NullReferenceException(e.Message + "<br/>" + nodePath + " (or include)"); } AggregateCacheDependency aggregatedDependency = new AggregateCacheDependency(); context.NamespaceExtensions = resolver.ImportNamespaceCollection.Distinct().ToArray(); context.ImportScriptCollection = resolver.ImportScriptCollection; context.ImportCssCollection = resolver.ImportCssCollection; foreach (var dependencyPath in resolver.DependencyPathCollection) { // Create an aggregate cache dependeny that includes NodeId, Path, NodeTypeId // Our cache item will be invalidated if the dependency node is invalidated // - by node id // - by path // - by nodeType string fsFilePath = null; if (HttpContext.Current != null && RepositoryPathProvider.DiskFSSupportMode == DiskFSSupportMode.Prefer) fsFilePath = HttpContext.Current.Server.MapPath(dependencyPath); if (!string.IsNullOrEmpty(fsFilePath) && System.IO.File.Exists(fsFilePath)) { aggregatedDependency.Add(new CacheDependency(fsFilePath)); } else { var nodeHead = NodeHead.Get(dependencyPath); aggregatedDependency.Add( new PathDependency(nodeHead.Path), new NodeIdDependency(nodeHead.Id), new NodeTypeDependency(nodeHead.NodeTypeId) ); } } DistributedApplication.Cache.Insert(nodeKey, context, aggregatedDependency); } if (resolveScripts) { foreach (var script in context.ImportScriptCollection) { UITools.AddScript(script); } foreach (var css in context.ImportCssCollection) { UITools.AddStyleSheetToHeader(UITools.GetHeader(), css); } } return context; }