コード例 #1
0
        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);
        }
コード例 #2
0
 public bool LoadDefinition(TemplateDefinition baseDefinition, string xslsource)
 {
     return(LoadDefinition(baseDefinition));
 }