/// <summary> /// Writes the file. /// </summary> /// <param name="filename"> The filename. </param> /// <param name="e"> The e. </param> /// <remarks> /// </remarks> protected override void WriteFile(string filename, XElement e) { filename += ".bxl"; var opts = new BxlGeneratorOptions(); opts.InlineAlwaysAttributes = new[] {"id", "code", "name", "_file", "_line", "role", "ecoprocess", "idx"}.Union(Context.Project.InlineAttributes). ToArray(); var content = _bxl.Generate(e, opts); File.WriteAllText(filename, content); }
/// <summary> /// generates single bxl string from assembly manifests /// </summary> /// <param name="assemblies"> </param> /// <param name="options"> </param> /// <returns> </returns> public string GenerateManifest(Assembly[] assemblies, ManifestBxlGeneratorOptions options = null) { if (assemblies == null) { throw new ArgumentNullException("assemblies"); } if (0 == assemblies.Length) { throw new ArgumentException("no assemblies given"); } var gen = new BxlGenerator(); var genopts = new BxlGeneratorOptions { NoRootElement = true, UseTrippleQuotOnValues = false, InlineAlwaysAttributes = new[] {"code", "name", "priority"} }; options = options ?? new ManifestBxlGeneratorOptions(); var xml = new XElement("root"); IList<IComponentDefinition> componentsToGenerate = new List<IComponentDefinition>(); foreach (var assembly in assemblies.Distinct()) { Console.WriteLine("Enter: " + assembly.GetName().Name); var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { Console.WriteLine("IsConfigurable: " + assembly.GetName().Name); foreach (var classDefinition in def.ComponentDefinitions) { componentsToGenerate.Add(classDefinition.GetComponent()); } } } var useshortnames = false; if (options.UseShortNames) { useshortnames = CanUseShortNames(componentsToGenerate); } if (useshortnames) { foreach (var assembly in assemblies) { var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { xml.Add(new XElement("ref", new XAttribute("code", assembly.GetName().Name))); } } var namespaces = componentsToGenerate.Select(x => x.ServiceType).Union(componentsToGenerate.Select(x => x.ImplementationType)) .Distinct().Select(x => x.Namespace).Distinct(); foreach (var ns in namespaces) { xml.Add(new XElement("using", new XAttribute("code", ns))); } } foreach (var definition in componentsToGenerate) { var elementname = definition.Lifestyle.ToString().ToLowerInvariant(); var value = GetTypeName(definition.ServiceType, useshortnames); var e = new XElement(elementname, value); if (definition.Name.IsEmpty()) { e.Add(new XAttribute("code", GetTypeName(definition.ImplementationType, useshortnames))); } else { e.Add(new XAttribute("code", definition.Name)); e.Add(new XAttribute("name", GetTypeName(definition.ImplementationType, useshortnames))); } e.Add(new XAttribute("priority", definition.Priority)); if (definition.Role.IsNotEmpty()) { e.Add(new XAttribute("role", definition.Role)); } if (definition.Help.IsNotEmpty()) { e.Add(new XAttribute("help", definition.Help)); } xml.Add(e); } var result = gen.Convert(xml, genopts); return result; }
/// <summary> /// generates single bxl string from assembly manifests /// </summary> /// <param name="assemblies"> </param> /// <param name="options"> </param> /// <returns> </returns> public string GenerateManifest(Assembly[] assemblies, ManifestBxlGeneratorOptions options = null) { if (assemblies == null) { throw new ArgumentNullException("assemblies"); } if (0 == assemblies.Length) { throw new ArgumentException("no assemblies given"); } var gen = new BxlGenerator(); var genopts = new BxlGeneratorOptions { NoRootElement = true, UseTrippleQuotOnValues = false, InlineAlwaysAttributes = new[] { "code", "name", "priority" } }; options = options ?? new ManifestBxlGeneratorOptions(); var xml = new XElement("root"); IList <IComponentDefinition> componentsToGenerate = new List <IComponentDefinition>(); foreach (var assembly in assemblies.Distinct()) { Console.WriteLine("Enter: " + assembly.GetName().Name); var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { Console.WriteLine("IsConfigurable: " + assembly.GetName().Name); foreach (var classDefinition in def.ComponentDefinitions) { componentsToGenerate.Add(classDefinition.GetComponent()); } } } var useshortnames = false; if (options.UseShortNames) { useshortnames = CanUseShortNames(componentsToGenerate); } if (useshortnames) { foreach (var assembly in assemblies) { var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { xml.Add(new XElement("ref", new XAttribute("code", assembly.GetName().Name))); } } var namespaces = componentsToGenerate.Select(x => x.ServiceType).Union(componentsToGenerate.Select(x => x.ImplementationType)) .Distinct().Select(x => x.Namespace).Distinct(); foreach (var ns in namespaces) { xml.Add(new XElement("using", new XAttribute("code", ns))); } } foreach (var definition in componentsToGenerate) { var elementname = definition.Lifestyle.ToString().ToLowerInvariant(); var value = GetTypeName(definition.ServiceType, useshortnames); var e = new XElement(elementname, value); if (definition.Name.IsEmpty()) { e.Add(new XAttribute("code", GetTypeName(definition.ImplementationType, useshortnames))); } else { e.Add(new XAttribute("code", definition.Name)); e.Add(new XAttribute("name", GetTypeName(definition.ImplementationType, useshortnames))); } e.Add(new XAttribute("priority", definition.Priority)); if (definition.Role.IsNotEmpty()) { e.Add(new XAttribute("role", definition.Role)); } if (definition.Help.IsNotEmpty()) { e.Add(new XAttribute("help", definition.Help)); } xml.Add(e); } var result = gen.Convert(xml, genopts); return(result); }
protected override void Save(XElement x, string file) { var c = new BxlGenerator(); var opts = new BxlGeneratorOptions {SkipAttributes = new[] {"_line", "_file"}, NoRootElement = true}; File.WriteAllText(file, c.Convert(x)); }
/// <summary> /// Converts given Xml file to BXL code /// </summary> /// <param name="filename"> xml file to convert (default FileResolver will be used) </param> /// <param name="options"> </param> /// <returns> BXL code representing given data </returns> /// <remarks> /// Uses default BXL generation settings, if you need more complex generation, use <see cref="BxlGenerator" /> direcly /// </remarks> public static string ConvertFile(string filename, BxlGeneratorOptions options = null) { return new BxlGenerator().Convert(XElement.Load(filename), options); }
/// <summary> /// Converts given XElement to BXL code /// </summary> /// <param name="data"> xml to convert </param> /// <param name="options"> </param> /// <returns> BXL code representing given data </returns> /// <remarks> /// Uses default BXL generation settings, if you need more complex generation, use <see cref="BxlGenerator" /> direcly /// </remarks> public static string Convert(XElement data, BxlGeneratorOptions options = null) { return new BxlGenerator().Convert(data, options); }