internal static TemplateDefinition FromManifest(string ClientId, string manifestUrl, bool load, string xslsource, bool useCache) { var httpContext = HttpContext.Current; var cache = httpContext.Cache; var manifestPath = httpContext.Server.MapPath(manifestUrl); TemplateDefinition baseDef = null; if (useCache) { baseDef = cache[ClientId] as TemplateDefinition; } if (baseDef == null) { baseDef = new TemplateDefinition { }; baseDef.clientId = ClientId; SPFile file = SPContext.Current.Site.RootWeb.GetFile(manifestUrl + "/definition.xml"); if (file != null && file.Exists) { var xml = new XmlDocument(); xml.Load(file.OpenBinaryStream(SPOpenBinaryOptions.None)); foreach (XmlNode node in xml.DocumentElement.ChildNodes) { if (node.NodeType == XmlNodeType.Element) { var elt = (XmlElement)node; switch (elt.LocalName) { case "template": var processorname = elt.GetAttribute("Processor"); baseDef.ProcessorName = String.IsNullOrEmpty(processorname) ? "Menu" : processorname; baseDef.TemplateVirtualPath = manifestUrl + "/" + elt.InnerText; baseDef.TemplatePath = httpContext.Server.MapPath(baseDef.TemplateVirtualPath); break; case "templateHead": baseDef.TemplateHeadPath = manifestUrl + "/" + elt.InnerText; break; case "scripts": foreach (XmlElement scriptElt in elt.GetElementsByTagName("script")) { var jsType = scriptElt.GetAttribute("jsType"); var jsObject = scriptElt.GetAttribute("jsObject"); var scriptText = scriptElt.InnerText.Trim(); //manifestUrl + "/" + scriptElt.InnerText; //var key = String.IsNullOrEmpty(jsObject) ? scriptPath : jsObject; if (String.IsNullOrEmpty(jsType)) { var script = CreateScript(jsObject, manifestUrl + "/" + scriptElt.InnerText); ScriptKey screy = new ScriptKey(); screy.key = jsObject; screy.type = jsType; screy.value = script; baseDef.Scripts.Add(screy); } else { ScriptKey screy = new ScriptKey(); screy.key = jsObject; screy.type = jsType; screy.value = scriptText; baseDef.Scripts.Add(screy); } } break; case "stylesheets": foreach (XmlElement cssElt in elt.GetElementsByTagName("stylesheet")) { var cssPath = manifestUrl + "/" + cssElt.InnerText; baseDef.StyleSheets.Add(cssPath); } break; case "defaultClientOptions": foreach (XmlElement optionElt in elt.GetElementsByTagName("clientOption")) { var optionName = optionElt.GetAttribute("name"); var optionType = optionElt.GetAttribute("type"); var optionValue = optionElt.GetAttribute("value"); if (String.IsNullOrEmpty(optionType)) { optionType = "passthrough"; } switch (optionType) { case "number": baseDef.DefaultClientOptions.Add(new ClientNumber(optionName, optionValue)); break; case "boolean": baseDef.DefaultClientOptions.Add(new ClientBoolean(optionName, optionValue)); break; case "string": baseDef.DefaultClientOptions.Add(new ClientString(optionName, optionValue)); break; default: baseDef.DefaultClientOptions.Add(new ClientOption(optionName, optionValue)); break; } } break; case "defaultTemplateArguments": foreach (XmlElement argElt in elt.GetElementsByTagName("templateArgument")) { var argName = argElt.GetAttribute("name"); var argValue = argElt.GetAttribute("value"); baseDef.DefaultTemplateArguments.Add(new TemplateArgument(argName, argValue)); } break; } } } } if (load) { try { foreach (var processor in Utilities.SupportedTemplateProcessors()) { if (string.IsNullOrEmpty(xslsource)) { if (processor.LoadDefinition(baseDef)) { baseDef.Processor = processor; break; } else { if (processor.ErrorMessage() != null) { throw processor.ErrorMessage(); } } } else { if (processor.LoadDefinition(baseDef, xslsource)) { baseDef.Processor = processor; break; } else { if (processor.ErrorMessage() != null) { throw processor.ErrorMessage(); } } } } } catch (XsltException) { throw; //throw new Exception(ex.Message + "Error : " + ex.Data.ToString()); } if (baseDef.Processor == null) { throw new ApplicationException(String.Format("Can't find processor for manifest {0}", manifestUrl)); } } if (useCache) { cache.Remove(ClientId); cache.Insert(ClientId, baseDef); } } var result = baseDef.Clone(); result.Reset(); return(result); }
public bool LoadDefinition(TemplateDefinition baseDefinition, string xslsource) { return(LoadDefinition(baseDefinition)); }