Files
hangfire-ravendb/src/Hangfire.SqlServer/JobQueues/PersistentJobQueueProviderCollection.cs
T
2015-10-16 16:07:20 -05:00

71 lines
2.4 KiB
C#

// This file is part of Hangfire.
// Copyright © 2013-2014 Sergey Odinokov.
//
// Hangfire is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3
// of the License, or any later version.
//
// Hangfire is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with Hangfire. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections;
using System.Collections.Generic;
namespace Hangfire.Raven.JobQueues
{
public class PersistentJobQueueProviderCollection : IEnumerable<IPersistentJobQueueProvider>
{
private readonly List<IPersistentJobQueueProvider> _providers
= new List<IPersistentJobQueueProvider>();
private readonly Dictionary<string, IPersistentJobQueueProvider> _providersByQueue
= new Dictionary<string, IPersistentJobQueueProvider>(StringComparer.OrdinalIgnoreCase);
private readonly IPersistentJobQueueProvider _defaultProvider;
public PersistentJobQueueProviderCollection(IPersistentJobQueueProvider defaultProvider)
{
defaultProvider.ThrowIfNull("defaultProvider");
_defaultProvider = defaultProvider;
_providers.Add(_defaultProvider);
}
public void Add(IPersistentJobQueueProvider provider, IEnumerable<string> queues)
{
provider.ThrowIfNull("provider");
queues.ThrowIfNull("queues");
_providers.Add(provider);
foreach (var queue in queues)
{
_providersByQueue.Add(queue, provider);
}
}
public IPersistentJobQueueProvider GetProvider(string queue)
{
return _providersByQueue.ContainsKey(queue)
? _providersByQueue[queue]
: _defaultProvider;
}
public IEnumerator<IPersistentJobQueueProvider> GetEnumerator()
{
return _providers.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}