Skip to content

Commit e155fbd

Browse files
committed
Refactored/removed redundant code (Load/SaveSetting & MiniMapper)
1 parent b69e51b commit e155fbd

30 files changed

Lines changed: 562 additions & 880 deletions

File tree

src/Libraries/SmartStore.Core/ComponentModel/MiniMapper.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Threading.Tasks;
66
using System.Reflection;
77
using System.Globalization;
8+
using SmartStore.Utilities;
89

910
namespace SmartStore.ComponentModel
1011
{
@@ -77,11 +78,12 @@ public static void Map<TFrom, TTo>(TFrom from, TTo to, CultureInfo culture = nul
7778
continue;
7879
}
7980

80-
object value;
81+
object value = null;
8182
try
8283
{
8384
// Get the value from source instance and try to convert it to target props type
8485
value = fromProp.GetValue(from).Convert(toProp.Property.PropertyType, culture);
86+
8587
// Set it
8688
toProp.SetValue(to, value);
8789
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Dynamic;
4+
using System.Globalization;
5+
using System.Web.Routing;
6+
using SmartStore.Utilities;
7+
8+
namespace SmartStore.ComponentModel
9+
{
10+
public class DictionaryTypeConverter<T> : TypeConverterBase where T : IDictionary<string, object>
11+
{
12+
public DictionaryTypeConverter()
13+
: base(typeof(object))
14+
{
15+
}
16+
17+
public override bool CanConvertFrom(Type type)
18+
{
19+
return !type.IsPredefinedType() && type.IsClass;
20+
}
21+
22+
public override bool CanConvertTo(Type type)
23+
{
24+
return !type.IsPredefinedType() && DictionaryConverter.CanCreateType(type);
25+
}
26+
27+
public override object ConvertFrom(CultureInfo culture, object value)
28+
{
29+
// Obj > Dict
30+
var dict = CommonHelper.ObjectToDictionary(value);
31+
var to = typeof(T);
32+
33+
if (to == typeof(RouteValueDictionary))
34+
{
35+
return new RouteValueDictionary(dict);
36+
}
37+
if (to == typeof(Dictionary<string, object>))
38+
{
39+
return (Dictionary<string, object>)dict;
40+
}
41+
else if (to == typeof(ExpandoObject))
42+
{
43+
var expando = new ExpandoObject();
44+
expando.Merge(dict);
45+
return expando;
46+
}
47+
else
48+
{
49+
return dict;
50+
}
51+
}
52+
53+
public override object ConvertTo(CultureInfo culture, string format, object value, Type to)
54+
{
55+
// Dict > Obj
56+
var dict = value as IDictionary<string, object>;
57+
58+
if (dict != null)
59+
{
60+
ICollection<ConvertProblem> problems;
61+
return DictionaryConverter.CreateAndPopulate(to, dict, out problems);
62+
}
63+
64+
return base.ConvertTo(culture, format, value, to);
65+
}
66+
}
67+
}

src/Libraries/SmartStore.Core/ComponentModel/TypeConversion/TypeConverterFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using System.Collections.Concurrent;
33
using System.Collections.Generic;
44
using System.ComponentModel;
5+
using System.Dynamic;
6+
using System.Web.Routing;
57
using SmartStore.Core.Domain.Catalog;
68
using SmartStore.Core.Domain.Shipping;
79

@@ -33,6 +35,12 @@ private static void CreateDefaultConverters()
3335
_typeConverters.TryAdd(typeof(IList<ProductBundleItemOrderData>), converter);
3436
_typeConverters.TryAdd(typeof(List<ProductBundleItemOrderData>), converter);
3537
_typeConverters.TryAdd(typeof(ProductBundleItemOrderData), new ProductBundleDataConverter(false));
38+
39+
converter = new DictionaryTypeConverter<IDictionary<string, object>>();
40+
_typeConverters.TryAdd(typeof(IDictionary<string, object>), converter);
41+
_typeConverters.TryAdd(typeof(Dictionary<string, object>), converter);
42+
_typeConverters.TryAdd(typeof(RouteValueDictionary), new DictionaryTypeConverter<RouteValueDictionary>());
43+
_typeConverters.TryAdd(typeof(ExpandoObject), new DictionaryTypeConverter<ExpandoObject>());
3644
}
3745

3846
public static void RegisterConverter<T>(ITypeConverter typeConverter)

src/Libraries/SmartStore.Core/Extensions/TypeExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public static bool IsStruct(this Type type)
5454
{
5555
return !type.IsPredefinedSimpleType();
5656
}
57+
5758
return false;
5859
}
5960

@@ -133,6 +134,7 @@ public static bool IsAnonymous(this Type type)
133134
}
134135
}
135136
}
137+
136138
return false;
137139
}
138140

src/Libraries/SmartStore.Core/SmartStore.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@
181181
<Compile Include="Collections\TreeNodeBase.cs" />
182182
<Compile Include="ComponentModel\MiniMapper.cs" />
183183
<Compile Include="ComponentModel\TypeConversion\BooleanConverter.cs" />
184+
<Compile Include="ComponentModel\TypeConversion\DictionaryConverter.cs" />
184185
<Compile Include="ComponentModel\TypeConversion\EnumerableConverter.cs" />
185186
<Compile Include="ComponentModel\TypeConversion\NullableConverter.cs" />
186187
<Compile Include="ComponentModel\TypeConversion\ProductBundleDataConverter.cs" />

src/Libraries/SmartStore.Core/Utilities/DictionaryConverter.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
namespace SmartStore.Utilities
1111
{
12-
1312
[Serializable]
1413
public class ConvertProblem
1514
{
@@ -76,7 +75,6 @@ private static string CreateMessage(ICollection<ConvertProblem> problems)
7675

7776
public static class DictionaryConverter
7877
{
79-
8078
public static bool CanCreateType(Type itemType)
8179
{
8280
return itemType.IsClass && itemType.GetConstructor(Type.EmptyTypes) != null;

src/Libraries/SmartStore.Data/Migrations/MigrationsConfiguration.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ protected override void Seed(SmartObjectContext context)
3232
public void MigrateSettings(SmartObjectContext context)
3333
{
3434
// Change MediaSettings.MaximumImageSize to 2048 if eq 1200
35-
var setting = context.Set<Setting>().FirstOrDefault(x => x.Name == TypeHelper.NameOf<MediaSettings>(y => y.MaximumImageSize, true));
35+
var name = TypeHelper.NameOf<MediaSettings>(y => y.MaximumImageSize, true);
36+
var setting = context.Set<Setting>().FirstOrDefault(x => x.Name == name);
3637
if (setting != null && setting.Value.Convert<int>() == 1200)
3738
{
3839
setting.Value = "2048";

src/Plugins/SmartStore.AmazonPay/Controllers/AmazonPayController.cs

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -47,44 +47,26 @@ public override ProcessPaymentRequest GetPaymentInfo(FormCollection form)
4747
return paymentInfo;
4848
}
4949

50-
[AdminAuthorize]
51-
public ActionResult Configure()
50+
[AdminAuthorize, LoadSetting]
51+
public ActionResult Configure(AmazonPaySettings settings)
5252
{
5353
var model = new ConfigurationModel();
54-
int storeScope = this.GetActiveStoreScopeConfiguration(Services.StoreService, Services.WorkContext);
55-
var settings = Services.Settings.LoadSetting<AmazonPaySettings>(storeScope);
56-
5754
model.Copy(settings, true);
58-
5955
_apiService.SetupConfiguration(model);
60-
61-
var storeDependingSettingHelper = new StoreDependingSettingHelper(ViewData);
62-
storeDependingSettingHelper.GetOverrideKeys(settings, model, storeScope, Services.Settings);
63-
6456
return View(model);
6557
}
6658

67-
[HttpPost, AdminAuthorize]
68-
public ActionResult Configure(ConfigurationModel model, FormCollection form)
59+
[HttpPost, AdminAuthorize, SaveSetting]
60+
public ActionResult Configure(AmazonPaySettings settings, ConfigurationModel model, FormCollection form)
6961
{
7062
if (!ModelState.IsValid)
71-
return Configure();
63+
return Configure(settings);
7264

7365
ModelState.Clear();
74-
75-
var storeDependingSettingHelper = new StoreDependingSettingHelper(ViewData);
76-
var storeScope = this.GetActiveStoreScopeConfiguration(Services.StoreService, Services.WorkContext);
77-
var settings = Services.Settings.LoadSetting<AmazonPaySettings>(storeScope);
78-
7966
model.Copy(settings, false);
8067

81-
using (Services.Settings.BeginScope())
82-
{
83-
storeDependingSettingHelper.UpdateSettings(settings, form, storeScope, Services.Settings);
84-
85-
Services.Settings.SaveSetting(settings, x => x.DataFetching, 0, false);
86-
Services.Settings.SaveSetting(settings, x => x.PollingMaxOrderCreationDays, 0, false);
87-
}
68+
Services.Settings.SaveSetting(settings, x => x.DataFetching, 0, false);
69+
Services.Settings.SaveSetting(settings, x => x.PollingMaxOrderCreationDays, 0, false);
8870

8971
var task = _scheduleTaskService.Value.GetTaskByType<DataPollingTask>();
9072
if (task != null)
@@ -96,7 +78,7 @@ public ActionResult Configure(ConfigurationModel model, FormCollection form)
9678

9779
NotifySuccess(Services.Localization.GetResource("Plugins.Payments.AmazonPay.ConfigSaveNote"));
9880

99-
return Configure();
81+
return Configure(settings);
10082
}
10183

10284
[HttpPost, AdminAuthorize]

src/Plugins/SmartStore.AmazonPay/Models/ConfigurationModel.cs

Lines changed: 3 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.ComponentModel.DataAnnotations;
33
using System.Web.Mvc;
44
using SmartStore.AmazonPay.Services;
5+
using SmartStore.ComponentModel;
56
using SmartStore.Web.Framework;
67
using SmartStore.Web.Framework.Modelling;
78

@@ -124,57 +125,11 @@ public void Copy(AmazonPaySettings settings, bool fromSettings)
124125
{
125126
if (fromSettings)
126127
{
127-
UseSandbox = settings.UseSandbox;
128-
SellerId = settings.SellerId;
129-
AccessKey = settings.AccessKey;
130-
SecretKey = settings.SecretKey;
131-
ClientId = settings.ClientId;
132-
//ClientSecret = settings.ClientSecret;
133-
Marketplace = settings.Marketplace;
134-
135-
DataFetching = settings.DataFetching;
136-
PollingMaxOrderCreationDays = settings.PollingMaxOrderCreationDays;
137-
TransactionType = settings.TransactionType;
138-
SaveEmailAndPhone = settings.SaveEmailAndPhone;
139-
ShowButtonInMiniShoppingCart = settings.ShowButtonInMiniShoppingCart;
140-
AdditionalFee = settings.AdditionalFee;
141-
AdditionalFeePercentage = settings.AdditionalFeePercentage;
142-
AddOrderNotes = settings.AddOrderNotes;
143-
InformCustomerAboutErrors = settings.InformCustomerAboutErrors;
144-
InformCustomerAddErrors = settings.InformCustomerAddErrors;
145-
146-
PayButtonColor = settings.PayButtonColor;
147-
PayButtonSize = settings.PayButtonSize;
148-
AuthButtonType = settings.AuthButtonType;
149-
AuthButtonColor = settings.AuthButtonColor;
150-
AuthButtonSize = settings.AuthButtonSize;
128+
MiniMapper.Map(settings, this);
151129
}
152130
else
153131
{
154-
settings.UseSandbox = UseSandbox;
155-
settings.SellerId = SellerId;
156-
settings.AccessKey = AccessKey;
157-
settings.SecretKey = SecretKey;
158-
settings.ClientId = ClientId;
159-
//settings.ClientSecret = ClientSecret;
160-
settings.Marketplace = Marketplace;
161-
162-
settings.DataFetching = DataFetching;
163-
settings.PollingMaxOrderCreationDays = PollingMaxOrderCreationDays;
164-
settings.TransactionType = TransactionType;
165-
settings.SaveEmailAndPhone = SaveEmailAndPhone;
166-
settings.ShowButtonInMiniShoppingCart = ShowButtonInMiniShoppingCart;
167-
settings.AdditionalFee = AdditionalFee;
168-
settings.AdditionalFeePercentage = AdditionalFeePercentage;
169-
settings.AddOrderNotes = AddOrderNotes;
170-
settings.InformCustomerAboutErrors = InformCustomerAboutErrors;
171-
settings.InformCustomerAddErrors = InformCustomerAddErrors;
172-
173-
settings.PayButtonColor = PayButtonColor;
174-
settings.PayButtonSize = PayButtonSize;
175-
settings.AuthButtonType = AuthButtonType;
176-
settings.AuthButtonColor = AuthButtonColor;
177-
settings.AuthButtonSize = AuthButtonSize;
132+
MiniMapper.Map(this, settings);
178133
}
179134
}
180135
}

src/Plugins/SmartStore.Clickatell/Controllers/SmsClickatellController.cs

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Web.Mvc;
33
using SmartStore.Clickatell.Models;
4+
using SmartStore.ComponentModel;
45
using SmartStore.Core.Plugins;
56
using SmartStore.Services;
67
using SmartStore.Web.Framework.Controllers;
@@ -24,43 +25,24 @@ public SmsClickatellController(
2425
_pluginFinder = pluginFinder;
2526
}
2627

27-
public ActionResult Configure()
28+
[LoadSetting]
29+
public ActionResult Configure(ClickatellSettings settings)
2830
{
29-
var storeScope = this.GetActiveStoreScopeConfiguration(_services.StoreService, _services.WorkContext);
30-
var settings = _services.Settings.LoadSetting<ClickatellSettings>(storeScope);
31-
32-
var model = new SmsClickatellModel
33-
{
34-
Enabled = settings.Enabled,
35-
PhoneNumber = settings.PhoneNumber,
36-
ApiId = settings.ApiId
37-
};
38-
39-
var storeDependingSettingHelper = new StoreDependingSettingHelper(ViewData);
40-
storeDependingSettingHelper.GetOverrideKeys(settings, model, storeScope, _services.Settings);
41-
31+
var model = new SmsClickatellModel();
32+
MiniMapper.Map(settings, model);
4233
return View(model);
4334
}
4435

45-
[HttpPost]
46-
public ActionResult Configure(SmsClickatellModel model, FormCollection form)
36+
[HttpPost, SaveSetting]
37+
public ActionResult Configure(ClickatellSettings settings, SmsClickatellModel model, FormCollection form)
4738
{
4839
if (ModelState.IsValid)
4940
{
50-
var storeDependingSettingHelper = new StoreDependingSettingHelper(ViewData);
51-
int storeScope = this.GetActiveStoreScopeConfiguration(_services.StoreService, _services.WorkContext);
52-
var settings = _services.Settings.LoadSetting<ClickatellSettings>(storeScope);
53-
54-
settings.Enabled = model.Enabled;
55-
settings.PhoneNumber = model.PhoneNumber;
56-
settings.ApiId = model.ApiId;
57-
58-
storeDependingSettingHelper.UpdateSettings(settings, form, storeScope, _services.Settings);
59-
41+
MiniMapper.Map(model, settings);
6042
NotifySuccess(T("Admin.Common.DataSuccessfullySaved"));
6143
}
6244

63-
return Configure();
45+
return Configure(settings);
6446
}
6547

6648
[HttpPost, ActionName("Configure"), FormValueRequired("test-sms")]

0 commit comments

Comments
 (0)