[Fixes #6316] Update Alias when importing AutoroutePart (#7485)

Fixes #6316
This commit is contained in:
Hannan Azam Khan
2017-01-06 01:37:18 +05:00
committed by Sébastien Ros
parent 4f57ecb487
commit fe4a116cb4
2 changed files with 17 additions and 6 deletions

View File

@@ -3,14 +3,26 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using Orchard.Alias.Implementation.Map; using Orchard.Alias.Implementation.Map;
using Orchard.Alias.Implementation.Updater;
namespace Orchard.Alias.Implementation.Holder { namespace Orchard.Alias.Implementation.Holder {
public class AliasHolder : IAliasHolder { public class AliasHolder : IAliasHolder {
public AliasHolder() { private readonly Lazy<IAliasHolderUpdater> _aliasHolderUpdater;
private readonly ConcurrentDictionary<string, AliasMap> _aliasMaps;
public AliasHolder(Lazy<IAliasHolderUpdater> aliasHolderUpdater) {
_aliasHolderUpdater = aliasHolderUpdater;
_aliasMaps = new ConcurrentDictionary<string, AliasMap>(StringComparer.OrdinalIgnoreCase); _aliasMaps = new ConcurrentDictionary<string, AliasMap>(StringComparer.OrdinalIgnoreCase);
} }
private readonly ConcurrentDictionary<string, AliasMap> _aliasMaps; private ConcurrentDictionary<string, AliasMap> GetOrRefreshAliasMaps() {
lock (_aliasMaps) {
if (_aliasMaps.Count == 0)
_aliasHolderUpdater.Value.Refresh();
}
return _aliasMaps;
}
public void SetAliases(IEnumerable<AliasInfo> aliases) { public void SetAliases(IEnumerable<AliasInfo> aliases) {
var grouped = aliases.GroupBy(alias => alias.Area ?? String.Empty, StringComparer.InvariantCultureIgnoreCase); var grouped = aliases.GroupBy(alias => alias.Area ?? String.Empty, StringComparer.InvariantCultureIgnoreCase);
@@ -25,7 +37,7 @@ namespace Orchard.Alias.Implementation.Holder {
} }
public void SetAlias(AliasInfo alias) { public void SetAlias(AliasInfo alias) {
foreach (var map in _aliasMaps.Values) { foreach (var map in GetOrRefreshAliasMaps().Values) {
map.Remove(alias); map.Remove(alias);
} }
@@ -33,11 +45,11 @@ namespace Orchard.Alias.Implementation.Holder {
} }
public IEnumerable<AliasMap> GetMaps() { public IEnumerable<AliasMap> GetMaps() {
return _aliasMaps.Values; return GetOrRefreshAliasMaps().Values;
} }
public AliasMap GetMap(string areaName) { public AliasMap GetMap(string areaName) {
return _aliasMaps.GetOrAdd(areaName ?? String.Empty, key => new AliasMap(key)); return GetOrRefreshAliasMaps().GetOrAdd(areaName ?? String.Empty, key => new AliasMap(key));
} }
public void RemoveAlias(AliasInfo aliasInfo) { public void RemoveAlias(AliasInfo aliasInfo) {

View File

@@ -44,7 +44,6 @@
<tr> <tr>
<th scope="col">@T("Alias")</th> <th scope="col">@T("Alias")</th>
<th scope="col">@T("Route")</th> <th scope="col">@T("Route")</th>
<th scope="col">&nbsp;</th>
</tr> </tr>
</thead> </thead>
@foreach (var aliasEntry in Model.AliasEntries) { @foreach (var aliasEntry in Model.AliasEntries) {