From 2a71c435f6b7a7f0030dbdb80e815fba25b3edd1 Mon Sep 17 00:00:00 2001 From: moh-hassan Date: Sun, 17 Apr 2022 12:09:53 +0200 Subject: [PATCH] Add feature: Generating model directly from xml contents, fix #41 --- OData2Poco.Tests/O2PTest.cs | 15 ++++++++++++++- OData2PocoLib/Api/O2P.cs | 17 +++++++++++++++-- OData2PocoLib/PocoFactory.cs | 10 +++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/OData2Poco.Tests/O2PTest.cs b/OData2Poco.Tests/O2PTest.cs index 36f70f0..ed020e8 100644 --- a/OData2Poco.Tests/O2PTest.cs +++ b/OData2Poco.Tests/O2PTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Threading.Tasks; using NUnit.Framework; using OData2Poco.Api; @@ -27,7 +28,7 @@ public async Task GenerateDefaultTest(string url, string version, int n) var code = await o2p.GenerateAsync(connString); Assert.IsTrue(code.Contains("public partial class Product")); } - + [Test] public async Task GenerateDefaultTestV4() { @@ -59,5 +60,17 @@ public async Task Filter_by_namespace_Test() var code = await o2p.GenerateAsync(connString); Assert.IsTrue(code.Contains("public partial class Product")); } + + [Test] + [TestCaseSource(typeof(TestSample), nameof(TestSample.FileCases))] + public async Task GenerateFromXmlContents(string fileName, string version, int n) + { + string xml = File.ReadAllText(fileName); + var o2p = new O2P(); + var code = await o2p.GenerateAsync(xml); + Console.WriteLine(code); + Assert.IsTrue(code.Contains("public partial class Product")); + } + } } diff --git a/OData2PocoLib/Api/O2P.cs b/OData2PocoLib/Api/O2P.cs index b26ba27..51ebdaf 100644 --- a/OData2PocoLib/Api/O2P.cs +++ b/OData2PocoLib/Api/O2P.cs @@ -34,7 +34,12 @@ internal async Task GenerateModel(OdataConnectionString odataCon MetaData=gen.MetaData; return gen; } - + internal async Task GenerateModel(string xmlContent) + { + IPocoGenerator gen = await PocoFactory.GenerateModel(xmlContent, Setting); + MetaData = gen.MetaData; + return gen; + } public async Task GenerateAsync(OdataConnectionString odataConnString) { var gen = await GenerateModel(odataConnString); @@ -43,8 +48,16 @@ public async Task GenerateAsync(OdataConnectionString odataConnString) CodeText = generatorCs.ToString(); return CodeText; } - + //feature request #41 + public async Task GenerateAsync(string xmlContent) + { + var gen = await GenerateModel(xmlContent); + var generatorCs = PocoClassGeneratorCs.GenerateCsPocoClass(gen, Setting); + ClassList = generatorCs.ClassList; + CodeText = generatorCs.ToString(); + return CodeText; + } public string GenerateProject() { var proj = new ProjectGenerator(Setting.Attributes); diff --git a/OData2PocoLib/PocoFactory.cs b/OData2PocoLib/PocoFactory.cs index ed1fa0c..1c27585 100644 --- a/OData2PocoLib/PocoFactory.cs +++ b/OData2PocoLib/PocoFactory.cs @@ -43,6 +43,14 @@ internal static async Task GenerateModel(OdataConnectionString c return generator; } + internal static async Task GenerateModel(string xmlContents, + PocoSetting setting) + { + var metaData = await Task.Run (()=> MetaDataReader.LoadMetaDataFromXml(xmlContents)); + IPocoGenerator generator = Create(metaData, setting); + return generator; + } + //internal static async Task GeneratePoco(OdataConnectionString connectionString, // PocoSetting setting) //{ @@ -62,7 +70,7 @@ internal static async Task GenerateModel(OdataConnectionString c //---------- //var generatorCs = new PocoClassGeneratorCs(gen, Setting); - + //public async Task GenerateAsync(OdataConnectionString odataConnString) //{ // var gen = await GenerateModel(odataConnString);