forked from johnzablocki/couchbase-aspnet
-
Notifications
You must be signed in to change notification settings - Fork 39
/
ProviderHelper.cs
121 lines (112 loc) · 5.06 KB
/
ProviderHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Collections.Specialized;
using System.Configuration;
using Couchbase.Configuration.Client;
using Couchbase.Configuration.Client.Providers;
using Couchbase.Core;
namespace Couchbase.AspNet
{
internal static class ProviderHelper
{
/// <summary>
/// Gets and removes an value from the configuration section
/// </summary>
/// <param name="config">Name value collection to examine</param>
/// <param name="name">Name of the value to retrieve</param>
/// <param name="required">True if the value is required, false if optional</param>
/// <returns>Value returned from the configuration section, null if not found</returns>
public static string GetAndRemove(
NameValueCollection config,
string name,
bool required)
{
var value = config[name];
if (value == null) {
if (required)
throw new System.Configuration.ConfigurationErrorsException("Missing parameter: " + name);
} else {
config.Remove(name);
}
return value;
}
/// <summary>
/// Helper to make sure there are no unknown attributes left over in the config section
/// </summary>
/// <param name="config">Name value collection to examine</param>
public static void CheckForUnknownAttributes(
NameValueCollection config)
{
if (config.Count > 0)
throw new System.Configuration.ConfigurationErrorsException("Unknown parameter: " + config.Keys[0]);
}
/// <summary>
/// Gets a Couchbase bucket using the couchbase factory configured in the Web.config file. If the factory is
/// not defined in the Web.config file section, then the default factory is used.
/// </summary>
/// <param name="name">Name of the bucket</param>
/// <param name="config">Name value collection from config file</param>
/// <param name="cluster">The <see cref="ICluster"/> instance.</param>
/// <returns>Instance of the couchbase bucket to use</returns>
public static IBucket GetBucket(
string name,
NameValueCollection config, ICluster cluster)
{
var bucketName = GetAndRemove(config, "bucket", false);
if (!string.IsNullOrEmpty(bucketName))
{
return cluster.OpenBucket(bucketName);
}
//if no bucket is provide use the default bucket
return cluster.OpenBucket();
}
public static ICluster GetCluster(
string name,
NameValueCollection config)
{
var section = (CouchbaseClientSection)ConfigurationManager.GetSection(name);
var clientConfig = new ClientConfiguration(section);
return new Cluster(clientConfig);
}
/// <summary>
/// Internal function to get the couchbase factory
/// </summary>
/// <param name="typeName">Name of the factory type extracted from the config file</param>
/// <returns>Instance of the couchbase factory to use</returns>
private static ICouchbaseBucketFactory GetFactoryInstance(
string typeName)
{
// If the factory type is not provided, use the default one
if (string.IsNullOrEmpty(typeName))
return new CouchbaseBucketFactory();
// Attempt to create the custom factory instance
var type = Type.GetType(typeName, false);
if (type == null)
throw new System.Configuration.ConfigurationErrorsException("Could not load type: " + typeName);
if (!typeof(ICouchbaseBucketFactory).IsAssignableFrom(type))
throw new System.Configuration.ConfigurationErrorsException("Type '" + typeName + "' must implement ICouchbaseBucketFactory");
return (ICouchbaseBucketFactory)Activator.CreateInstance(type);
}
}
}
#region [ License information ]
/* ************************************************************
*
* @author Couchbase <info@couchbase.com>
* @copyright 2012 Couchbase, Inc.
* @copyright 2012 Attila Kiskó, enyim.com
* @copyright 2015 AMain.com, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* ************************************************************/
#endregion