forked from pnp/pnpframework
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update Json provider to support schema and hierarchy
- Loading branch information
Paul Schaeflein
committed
Nov 17, 2022
1 parent
e0e0e24
commit 41d1e30
Showing
14 changed files
with
1,199 additions
and
107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
|
||
[*.{cs,vb}] | ||
#### Naming styles #### | ||
|
||
# Naming rules | ||
|
||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion | ||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface | ||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i | ||
|
||
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types | ||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case | ||
|
||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case | ||
|
||
# Symbol specifications | ||
|
||
dotnet_naming_symbols.interface.applicable_kinds = interface | ||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.interface.required_modifiers = | ||
|
||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum | ||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.types.required_modifiers = | ||
|
||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method | ||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.non_field_members.required_modifiers = | ||
|
||
# Naming styles | ||
|
||
dotnet_naming_style.begins_with_i.required_prefix = I | ||
dotnet_naming_style.begins_with_i.required_suffix = | ||
dotnet_naming_style.begins_with_i.word_separator = | ||
dotnet_naming_style.begins_with_i.capitalization = pascal_case | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
dotnet_style_operator_placement_when_wrapping = beginning_of_line | ||
tab_width = 4 | ||
indent_size = 4 | ||
end_of_line = crlf | ||
dotnet_style_coalesce_expression = true:suggestion | ||
dotnet_style_null_propagation = true:suggestion | ||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion | ||
dotnet_style_prefer_auto_properties = true:silent | ||
dotnet_style_object_initializer = true:suggestion | ||
dotnet_style_collection_initializer = true:suggestion | ||
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion | ||
dotnet_style_prefer_conditional_expression_over_assignment = true:silent | ||
dotnet_style_prefer_conditional_expression_over_return = true:silent | ||
dotnet_style_explicit_tuple_names = true:suggestion | ||
dotnet_style_prefer_inferred_tuple_names = true:suggestion | ||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion | ||
dotnet_style_prefer_compound_assignment = true:suggestion | ||
dotnet_style_prefer_simplified_interpolation = true:suggestion | ||
dotnet_style_namespace_match_folder = true:suggestion | ||
|
||
[*.cs] | ||
csharp_indent_labels = one_less_than_current | ||
csharp_using_directive_placement = outside_namespace:silent | ||
csharp_prefer_simple_using_statement = true:suggestion | ||
csharp_prefer_braces = true:silent | ||
csharp_style_namespace_declarations = block_scoped:silent | ||
csharp_style_prefer_method_group_conversion = true:silent | ||
csharp_style_prefer_top_level_statements = true:silent | ||
csharp_style_expression_bodied_methods = false:silent | ||
csharp_style_expression_bodied_constructors = false:silent | ||
csharp_style_expression_bodied_operators = false:silent | ||
csharp_style_expression_bodied_properties = true:silent | ||
csharp_style_expression_bodied_indexers = true:silent | ||
csharp_style_expression_bodied_accessors = true:silent | ||
csharp_style_expression_bodied_lambdas = true:silent | ||
csharp_style_expression_bodied_local_functions = false:silent | ||
csharp_style_throw_expression = true:suggestion |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
.../PnP.Framework/Provisioning/Providers/Json/Converters/SiteCollectionsAndSitesConverter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
using Newtonsoft.Json; | ||
using Newtonsoft.Json.Linq; | ||
using PnP.Framework.Provisioning.Model; | ||
using PnP.Framework.Provisioning.Providers.Xml; | ||
using System; | ||
|
||
namespace PnP.Framework.Provisioning.Providers.Json.Converters | ||
{ | ||
public class SiteCollectionsAndSitesConverter : JsonConverter | ||
{ | ||
public override bool CanConvert(Type objectType) | ||
{ | ||
var siteTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.SiteCollection, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; | ||
var siteType = Type.GetType(siteTypeName, true); | ||
return siteType.IsAssignableFrom(objectType); | ||
} | ||
|
||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | ||
{ | ||
// Define the specific source schema types | ||
var communicationSiteTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.CommunicationSite, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; | ||
var communicationSiteType = Type.GetType(communicationSiteTypeName, true); | ||
var teamSiteTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.TeamSite, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; | ||
var teamSiteType = Type.GetType(teamSiteTypeName, true); | ||
var teamSiteNoGroupTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.TeamSiteNoGroup, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; | ||
var teamSiteNoGroupType = Type.GetType(teamSiteNoGroupTypeName, true); | ||
var teamSubSiteNoGroupTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.TeamSubSiteNoGroup, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; | ||
var teamSubSiteNoGroupType = Type.GetType(teamSubSiteNoGroupTypeName, true); | ||
|
||
JObject sourceJObject = JObject.Load(reader); | ||
JToken discriminatorToken = sourceJObject.SelectToken("Type"); | ||
string discriminator = discriminatorToken?.Value<string>() ?? "CommunicationSite"; | ||
discriminatorToken.Parent.Remove(); | ||
|
||
Object targetItem = null; | ||
switch (discriminator) | ||
{ | ||
case "CommunicationSite": | ||
targetItem = sourceJObject.ToObject(communicationSiteType); | ||
break; | ||
case "TeamSite": | ||
targetItem = sourceJObject.ToObject(teamSiteType); | ||
break; | ||
case "TeamSiteNoGroup": | ||
targetItem = sourceJObject.ToObject(teamSiteNoGroupType); | ||
break; | ||
case "TeamNoGroupSubSite": | ||
targetItem = sourceJObject.ToObject(teamSubSiteNoGroupType); | ||
break; | ||
} | ||
|
||
return targetItem; | ||
} | ||
|
||
|
||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | ||
{ | ||
JToken t = JToken.FromObject(value); | ||
|
||
if (t.Type != JTokenType.Object) | ||
{ | ||
t.WriteTo(writer); | ||
} | ||
else | ||
{ | ||
string typeProperty =value.GetType().Name; | ||
|
||
JObject o = (JObject)t; | ||
o.AddFirst(new JProperty("Type", typeProperty)); | ||
|
||
o.WriteTo(writer); | ||
} | ||
} | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
src/lib/PnP.Framework/Provisioning/Providers/Json/Converters/SiteColumnsConverter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
using Newtonsoft.Json; | ||
using Newtonsoft.Json.Linq; | ||
using PnP.Framework.Extensions; | ||
using PnP.Framework.Provisioning.Providers.Xml; | ||
using System; | ||
|
||
namespace PnP.Framework.Provisioning.Providers.Json.Converters | ||
{ | ||
public class SiteColumnsConverter : JsonConverter | ||
{ | ||
public override bool CanConvert(Type objectType) | ||
{ | ||
var fieldsTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.ProvisioningTemplateSiteFields, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; | ||
var fieldsType = Type.GetType(fieldsTypeName, true); | ||
return fieldsType.IsAssignableFrom(objectType); | ||
} | ||
|
||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | ||
{ | ||
JArray sourceJObject = JArray.Load(reader); | ||
var e = sourceJObject.ToObject<System.Xml.XmlElement[]>(); | ||
|
||
var fields = Activator.CreateInstance(objectType); | ||
fields.SetPublicInstancePropertyValue("Any", e); | ||
|
||
return fields; | ||
} | ||
|
||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | ||
{ | ||
JToken t = JToken.FromObject(value); | ||
|
||
if (t.Type != JTokenType.Object) | ||
{ | ||
t.WriteTo(writer); | ||
} | ||
else | ||
{ | ||
JArray a = (JArray)t.SelectToken("Any"); | ||
a.WriteTo(writer); | ||
} | ||
} | ||
} | ||
} |
53 changes: 0 additions & 53 deletions
53
src/lib/PnP.Framework/Provisioning/Providers/Json/JsonPnPFormatter.cs
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.