summaryrefslogtreecommitdiffstats
path: root/src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2008-11-02 21:46:06 -0800
committerAndrew <andrewarnott@gmail.com>2008-11-02 21:46:06 -0800
commit71e99449ee02155f34bb4928313c2200246b8a78 (patch)
tree8368303d42afe232a460c6cf7afc062d1270fc17 /src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs
parent916966f88a3ed3246374efb625804b11bdda6fa5 (diff)
downloadDotNetOpenAuth-71e99449ee02155f34bb4928313c2200246b8a78.zip
DotNetOpenAuth-71e99449ee02155f34bb4928313c2200246b8a78.tar.gz
DotNetOpenAuth-71e99449ee02155f34bb4928313c2200246b8a78.tar.bz2
First stab at building specific application Consumer classes for ease of adoption.
Diffstat (limited to 'src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs')
-rw-r--r--src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs b/src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs
new file mode 100644
index 0000000..c3f9209
--- /dev/null
+++ b/src/DotNetOAuth/CommonConsumers/CommonConsumerBase.cs
@@ -0,0 +1,61 @@
+//-----------------------------------------------------------------------
+// <copyright file="CommonConsumerBase.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOAuth.CommonConsumers {
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Text;
+ using DotNetOAuth.ChannelElements;
+
+ /// <summary>
+ /// A useful base class to derive from for Consumers written against a specific Service Provider.
+ /// </summary>
+ public abstract class CommonConsumerBase {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CommonConsumerBase"/> class.
+ /// </summary>
+ /// <param name="serviceDescription">The service description.</param>
+ /// <param name="tokenManager">The token manager.</param>
+ /// <param name="consumerKey">The consumer key.</param>
+ protected CommonConsumerBase(ServiceProviderDescription serviceDescription, ITokenManager tokenManager, string consumerKey) {
+ if (serviceDescription == null) {
+ throw new ArgumentNullException("serviceDescription");
+ }
+ if (tokenManager == null) {
+ throw new ArgumentNullException("tokenManager");
+ }
+ if (consumerKey == null) {
+ throw new ArgumentNullException("consumerKey");
+ }
+ this.Consumer = new WebConsumer(serviceDescription, tokenManager) {
+ ConsumerKey = consumerKey,
+ };
+ }
+
+ /// <summary>
+ /// Gets the consumer.
+ /// </summary>
+ protected WebConsumer Consumer { get; private set; }
+
+ /// <summary>
+ /// Enumerates through the individual set bits in a flag enum.
+ /// </summary>
+ /// <param name="flags">The flags enum value.</param>
+ /// <returns>An enumeration of just the <i>set</i> bits in the flags enum.</returns>
+ protected static IEnumerable<long> GetIndividualFlags(Enum flags) {
+ long flagsLong = Convert.ToInt64(flags);
+ for (int i = 0; i < sizeof(long) * 8; i++) { // long is the type behind the largest enum
+ // Select an individual application from the scopes.
+ long individualFlagPosition = (long)Math.Pow(2, i);
+ long individualFlag = flagsLong & individualFlagPosition;
+ if (individualFlag == individualFlagPosition) {
+ yield return individualFlag;
+ }
+ }
+ }
+ }
+}