Skip to content

Commit fcc17de

Browse files
author
Roelant Vos
authored
Merge pull request #13 from mguent/freeformmapping
changed json parser to allow mapping files of arbitrary structure
2 parents 65daf19 + f25db9a commit fcc17de

23 files changed

Lines changed: 115 additions & 188 deletions

ClassLibrary/DataWarehouseAutomation/DataWarehouseAutomation.sln

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample Metadata", "Sample M
3131
Sample_Metadata\sampleVDW_Hub.json = Sample_Metadata\sampleVDW_Hub.json
3232
Sample_Metadata\sampleVDW_HubWithLookup.json = Sample_Metadata\sampleVDW_HubWithLookup.json
3333
Sample_Metadata\sampleVDW_StagingArea.json = Sample_Metadata\sampleVDW_StagingArea.json
34+
Sample_Metadata\sampleFreeForm.json = Sample_Metadata\sampleFreeForm.json
3435
EndProjectSection
3536
EndProject
3637
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample Templates", "Sample Templates", "{968E4A48-A2A3-4F7E-B8D9-243D1F4CCE17}"
@@ -41,6 +42,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample Templates", "Sample
4142
Sample_Templates\TemplateSampleMultipleDataItemMappings.Handlebars = Sample_Templates\TemplateSampleMultipleDataItemMappings.Handlebars
4243
Sample_Templates\TemplateSampleSimpleDDL.Handlebars = Sample_Templates\TemplateSampleSimpleDDL.Handlebars
4344
Sample_Templates\TemplateSatelliteView.Handlebars = Sample_Templates\TemplateSatelliteView.Handlebars
45+
Sample_Templates\TemplateSampleFreeForm.Handlebars = Sample_Templates\TemplateSampleFreeForm.Handlebars
4446
EndProjectSection
4547
EndProject
4648
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Examples", "Example_Project\Examples.csproj", "{F77AC518-6300-4927-8775-B92CDF15CC8E}"

ClassLibrary/DataWarehouseAutomation/DataWarehouseAutomation/DataConnection.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
1+
using System.Collections.Generic;
42
using Newtonsoft.Json;
53

64
namespace DataWarehouseAutomation

ClassLibrary/DataWarehouseAutomation/DataWarehouseAutomation/DataWarehouseAutomation.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
</PropertyGroup>
66

77
<ItemGroup>
8+
<PackageReference Include="Handlebars.Net" Version="2.0.4" />
89
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
910
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.13" />
1011
</ItemGroup>

ClassLibrary/DataWarehouseAutomation/Example_Project/HandleBarsHelpers.cs renamed to ClassLibrary/DataWarehouseAutomation/DataWarehouseAutomation/HandleBarsHelpers.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using System.IO;
33
using HandlebarsDotNet;
44

5-
namespace Example_Handlebars
5+
namespace DataWarehouseAutomation
66
{
7-
class HandleBarsHelpers
7+
public class HandleBarsHelpers
88
{
99
public static void RegisterHandleBarsHelpers()
1010
{
@@ -47,6 +47,26 @@ public static void RegisterHandleBarsHelpers()
4747

4848
});
4949

50+
Handlebars.RegisterHelper("StringReplace", (writer, context, args) =>
51+
{
52+
if (args.Length < 3) throw new HandlebarsException("The {{StringReplace}} function requires at least three arguments.");
53+
54+
string expression = args[0] as string;
55+
56+
if (args[0] is Newtonsoft.Json.Linq.JValue)
57+
{
58+
expression = ((Newtonsoft.Json.Linq.JValue)args[0]).Value.ToString();
59+
}
60+
61+
string pattern = args[1] as string;
62+
string replacement = args[2] as string;
63+
64+
expression = expression.Replace(pattern, replacement);
65+
writer.WriteSafeString(expression);
66+
67+
});
68+
69+
5070
// BLOCK HELPER
5171
//_handlebars.RegisterHelper("if_kpi", (writer, options, context, parameters) =>
5272
//{
@@ -95,10 +115,11 @@ public static void RegisterHandleBarsHelpers()
95115
// }
96116
//})
97117

118+
98119
// Accept two values, and see if they are the same, use as block helper.
99120
// Usage {{#stringcompare string1 string2}} do something {{else}} do something else {{/stringcompare}}
100121
// Usage {{#stringcompare string1 string2}} do something {{/stringcompare}}
101-
Handlebars.RegisterHelper("stringequal", (TextWriter output, HelperOptions options, dynamic context, object[] arguments) =>
122+
Handlebars.RegisterHelper("stringequal", (output, options, context, arguments) =>
102123
{
103124
if (arguments.Length != 2) throw new HandlebarsException("The {{stringcompare}} functions requires exactly two arguments.");
104125

@@ -118,7 +139,7 @@ public static void RegisterHandleBarsHelpers()
118139
// Accept two values, and do something if they are the different.
119140
// Usage {{#stringdiff string1 string2}} do something {{else}} do something else {{/stringdiff}}
120141
// Usage {{#stringdiff string1 string2}} do something {{/strinstringdiffgcompare}}
121-
Handlebars.RegisterHelper("stringdiff", (TextWriter output, HelperOptions options, dynamic context, object[] arguments) =>
142+
Handlebars.RegisterHelper("stringdiff", (output, options, context, arguments) =>
122143
{
123144
if (arguments.Length != 2) throw new HandlebarsException("The {{stringdiff}} functions requires exactly two arguments.");
124145

ClassLibrary/DataWarehouseAutomation/Example_Project/Examples.csproj

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2+
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
44
<PropertyGroup>
55
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -32,8 +32,8 @@
3232
<WarningLevel>4</WarningLevel>
3333
</PropertyGroup>
3434
<ItemGroup>
35-
<Reference Include="Handlebars, Version=1.0.0.0, Culture=neutral, PublicKeyToken=623b39d890c8829c, processorArchitecture=MSIL">
36-
<HintPath>..\packages\Handlebars.Net.1.8.0.Signed.1.8.0\lib\portable-net45+sl50+win+wpa81\Handlebars.dll</HintPath>
35+
<Reference Include="Handlebars, Version=2.0.4.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL">
36+
<HintPath>..\packages\Handlebars.Net.2.0.4\lib\net46\Handlebars.dll</HintPath>
3737
</Reference>
3838
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
3939
<HintPath>..\..\ClassLibrary\DataWarehouseAutomation\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
@@ -51,7 +51,6 @@
5151
<Reference Include="System.Xml" />
5252
</ItemGroup>
5353
<ItemGroup>
54-
<Compile Include="HandleBarsHelpers.cs" />
5554
<Compile Include="Program.cs" />
5655
<Compile Include="Properties\AssemblyInfo.cs" />
5756
</ItemGroup>

ClassLibrary/DataWarehouseAutomation/Example_Project/Program.cs

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,66 +3,91 @@
33
using DataWarehouseAutomation;
44
using HandlebarsDotNet;
55
using Newtonsoft.Json;
6+
using Newtonsoft.Json.Linq;
67

78
namespace Example_Handlebars
89
{
910
class Program
1011
{
1112
static void Main(string[] args)
1213
{
13-
HandleBarsHelpers.RegisterHandleBarsHelpers();
14+
HandleBarsHelpers.RegisterHandleBarsHelpers();;
1415

15-
// Local variables
16+
// Local variables, for reuse
1617
string stringTemplate = "";
1718
string jsonInput = "";
1819
string result = "";
19-
DataObjectMappings deserialisedMapping = new DataObjectMappings();
20+
//DataObjectMappings deserialisedMapping = new DataObjectMappings();
21+
var deserialisedMapping = new JObject();
22+
var template = Handlebars.Compile("");
2023

2124
// Simple example template
22-
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleBasic.handlebars");
23-
var template = Handlebars.Compile(stringTemplate);
24-
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleBasic.json");
25-
deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
26-
result = template(deserialisedMapping);
27-
Console.WriteLine(result);
25+
try
26+
{
27+
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleBasic.handlebars");
28+
template = Handlebars.Compile(stringTemplate);
29+
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleBasic.json");
30+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
31+
deserialisedMapping = JObject.Parse(jsonInput);
32+
result = template(deserialisedMapping);
33+
Console.WriteLine(result);
34+
}
35+
catch (Exception ex)
36+
{
37+
Console.WriteLine($"An issue was encountered: {ex}");
38+
}
2839

2940
// Example using extensions
3041
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleBasicWithExtensions.handlebars");
3142
template = Handlebars.Compile(stringTemplate);
3243
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleBasicWithExtensions.json");
33-
deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
44+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
45+
deserialisedMapping = JObject.Parse(jsonInput);
3446
result = template(deserialisedMapping);
3547
Console.WriteLine(result);
3648

3749
// Example using more than one mapping at data item level
3850
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleMultipleDataItemMappings.handlebars");
3951
template = Handlebars.Compile(stringTemplate);
4052
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleMultipleDataItemMappings.json");
41-
deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
53+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
54+
deserialisedMapping = JObject.Parse(jsonInput);
4255
result = template(deserialisedMapping);
4356
Console.WriteLine(result);
4457

4558
// Example generating DDL statements
4659
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleSimpleDDL.handlebars");
4760
template = Handlebars.Compile(stringTemplate);
4861
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleSimpleDDL.json");
49-
deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
62+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
63+
deserialisedMapping = JObject.Parse(jsonInput);
5064
result = template(deserialisedMapping);
5165
Console.WriteLine(result);
5266

5367
// Example using OneOf / swapping a source for a query
5468
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleCalculation.handlebars");
5569
template = Handlebars.Compile(stringTemplate);
5670
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleCalculation.json");
57-
deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
71+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
72+
deserialisedMapping = JObject.Parse(jsonInput);
5873
result = template(deserialisedMapping);
5974
Console.WriteLine(result);
6075

6176
// Data Vault Satellite example
6277
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSatelliteView.handlebars");
6378
template = Handlebars.Compile(stringTemplate);
6479
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampeVDW_Sat_Customer_v161.json");
65-
deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
80+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
81+
deserialisedMapping = JObject.Parse(jsonInput);
82+
result = template(deserialisedMapping);
83+
Console.WriteLine(result);
84+
85+
//Free form example
86+
stringTemplate = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Templates\TemplateSampleFreeForm.handlebars");
87+
template = Handlebars.Compile(stringTemplate);
88+
jsonInput = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\Sample_Metadata\sampleFreeForm.json");
89+
//deserialisedMapping = JsonConvert.DeserializeObject<DataObjectMappings>(jsonInput);
90+
deserialisedMapping = JObject.Parse(jsonInput);
6691
result = template(deserialisedMapping);
6792
Console.WriteLine(result);
6893

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Handlebars.Net.1.8.0.Signed" version="1.8.0" targetFramework="net461" />
3+
<package id="Handlebars.Net" version="2.0.4" targetFramework="net461" />
44
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
55
<package id="Newtonsoft.Json.Schema" version="3.0.13" targetFramework="net461" />
66
</packages>

ClassLibrary/DataWarehouseAutomation/RunDwhAutomation/HandleBarsHelpers.cs

Lines changed: 0 additions & 140 deletions
This file was deleted.

0 commit comments

Comments
 (0)