Line data Source code
1 : #region Copyright
2 : // // -----------------------------------------------------------------------
3 : // // <copyright company="cdmdotnet Limited">
4 : // // Copyright cdmdotnet Limited. All rights reserved.
5 : // // </copyright>
6 : // // -----------------------------------------------------------------------
7 : #endregion
8 :
9 : using System;
10 : using System.Collections.Generic;
11 : using System.Linq;
12 : using Cqrs.Configuration;
13 : using cdmdotnet.Logging;
14 : using Cqrs.Entities;
15 :
16 : namespace Cqrs.Azure.BlobStorage.DataStores
17 : {
18 : public class BlobStorageDataStoreConnectionStringFactory : IBlobStorageDataStoreConnectionStringFactory
19 0 : {
20 : public static string BlobStorageReadableDataStoreConnectionStringKey = "Cqrs.Azure.BlobStorage.DataStore.Read.ConnectionStringName";
21 :
22 : public static string BlobStorageWritableDataStoreConnectionStringKey = "Cqrs.Azure.BlobStorage.DataStore.Write.ConnectionStringName";
23 :
24 : public static string BlobStorageDataStoreConnectionStringKey = "Cqrs.Azure.BlobStorage.DataStore.ConnectionStringName";
25 :
26 : public static string BlobStorageBaseContainerNameKey = "Cqrs.Azure.BlobStorage.DataStore.BaseContainerName";
27 :
28 : public static string BlobStorageIsContainerPublicKey = "Cqrs.Azure.BlobStorage.DataStore.{0}.IsPublic";
29 :
30 : protected IConfigurationManager ConfigurationManager { get; private set; }
31 :
32 : protected ILogger Logger { get; private set; }
33 :
34 0 : public BlobStorageDataStoreConnectionStringFactory(IConfigurationManager configurationManager, ILogger logger)
35 : {
36 : ConfigurationManager = configurationManager;
37 : Logger = logger;
38 : }
39 :
40 0 : public virtual IEnumerable<string> GetWritableConnectionStrings()
41 : {
42 : Logger.LogDebug("Getting blob storage writable connection strings", "BlobStorageDataStoreConnectionStringFactory\\GetWritableConnectionStrings");
43 : try
44 : {
45 : var collection = new List<string> ();
46 :
47 : string blobStorageWritableDataStoreConnectionString = ConfigurationManager.GetSetting(BlobStorageWritableDataStoreConnectionStringKey);
48 : if (blobStorageWritableDataStoreConnectionString == null)
49 : {
50 : Logger.LogDebug(string.Format("No application settings named '{0}' was found in the configuration file with the cloud storage connection string.", BlobStorageWritableDataStoreConnectionStringKey), "BlobStorageDataStoreConnectionStringFactory\\GetWritableConnectionStrings");
51 : blobStorageWritableDataStoreConnectionString = ConfigurationManager.GetSetting(BlobStorageDataStoreConnectionStringKey);
52 : }
53 :
54 : int writeIndex = 1;
55 : while (!string.IsNullOrWhiteSpace(blobStorageWritableDataStoreConnectionString))
56 : {
57 : collection.Add(blobStorageWritableDataStoreConnectionString);
58 :
59 : blobStorageWritableDataStoreConnectionString = ConfigurationManager.GetSetting(string.Format("{0}.{1}", BlobStorageWritableDataStoreConnectionStringKey, writeIndex));
60 : writeIndex++;
61 : }
62 :
63 : if (!collection.Any())
64 : throw new NullReferenceException();
65 :
66 : return collection;
67 : }
68 : catch (NullReferenceException exception)
69 : {
70 : throw new NullReferenceException(string.Format("No application settings named '{0}' was found in the configuration file with the cloud storage connection string.", BlobStorageDataStoreConnectionStringKey), exception);
71 : }
72 : finally
73 : {
74 : Logger.LogDebug("Getting blob storage writable connection string... Done", "BlobStorageDataStoreConnectionStringFactory\\GetWritableConnectionStrings");
75 : }
76 : }
77 :
78 0 : public virtual string GetReadableConnectionString()
79 : {
80 : Logger.LogDebug("Getting blob storage readable connection strings", "BlobStorageDataStoreConnectionStringFactory\\GetReadableConnectionStrings");
81 : try
82 : {
83 : string blobStorageWritableDataStoreConnectionString = ConfigurationManager.GetSetting(BlobStorageReadableDataStoreConnectionStringKey);
84 : if (blobStorageWritableDataStoreConnectionString == null)
85 : {
86 : Logger.LogDebug(string.Format("No application settings named '{0}' was found in the configuration file with the cloud storage connection string.", BlobStorageReadableDataStoreConnectionStringKey), "BlobStorageDataStoreConnectionStringFactory\\GetReadableConnectionStrings");
87 : blobStorageWritableDataStoreConnectionString = ConfigurationManager.GetSetting(BlobStorageDataStoreConnectionStringKey);
88 : }
89 :
90 : if (string.IsNullOrWhiteSpace(blobStorageWritableDataStoreConnectionString))
91 : throw new NullReferenceException();
92 :
93 : return blobStorageWritableDataStoreConnectionString;
94 : }
95 : catch (NullReferenceException exception)
96 : {
97 : throw new NullReferenceException(string.Format("No application settings named '{0}' was found in the configuration file with the cloud storage connection string.", BlobStorageDataStoreConnectionStringKey), exception);
98 : }
99 : finally
100 : {
101 : Logger.LogDebug("Getting blob storage readable connection string... Done", "BlobStorageDataStoreConnectionStringFactory\\GetReadableConnectionStrings");
102 : }
103 : }
104 :
105 0 : public virtual string GetBaseContainerName()
106 : {
107 : Logger.LogDebug("Getting blob storage base container name", "BlobStorageDataStoreConnectionStringFactory\\GetBaseContainerName");
108 : try
109 : {
110 : string result = ConfigurationManager.GetSetting(BlobStorageBaseContainerNameKey);
111 :
112 : if (string.IsNullOrWhiteSpace(result))
113 : throw new NullReferenceException();
114 :
115 : return result;
116 : }
117 : catch (NullReferenceException exception)
118 : {
119 : throw new NullReferenceException(string.Format("No application setting named '{0}' in the configuration file.", BlobStorageBaseContainerNameKey), exception);
120 : }
121 : finally
122 : {
123 : Logger.LogDebug("Getting blob storage base container name... Done", "BlobStorageDataStoreConnectionStringFactory\\GetBaseContainerName");
124 : }
125 : }
126 :
127 0 : public virtual string GetContainerName<TData>()
128 : where TData : Entity
129 : {
130 : Logger.LogDebug("Getting blob storage container name", "BlobStorageDataStoreConnectionStringFactory\\GetContainerName");
131 :
132 : string name = string.Format("{0}\\{1}", GetBaseContainerName(), GetEntityName<TData>());
133 :
134 : Logger.LogDebug("Getting blob storage container name... Done", "BlobStorageDataStoreConnectionStringFactory\\GetContainerName");
135 :
136 : return name;
137 : }
138 :
139 0 : public virtual bool IsContainerPublic<TData>()
140 : where TData : Entity
141 : {
142 : bool result;
143 : // We default to false to protect the data
144 : if (!ConfigurationManager.TryGetSetting(string.Format(BlobStorageIsContainerPublicKey, GetEntityName<TData>()), out result))
145 : result = false;
146 :
147 : return result;
148 : }
149 :
150 0 : public virtual string GetEntityName<TData>()
151 : where TData : Entity
152 : {
153 : Type type = typeof (TData);
154 : string name = type.AssemblyQualifiedName;
155 : int index1 = name.IndexOf(",");
156 : int index2 = -1;
157 : if (index1 > -1)
158 : index2 = name.IndexOf(",", index1 + 1);
159 : if (index2 > -1)
160 : return name.Substring(0, index2);
161 : if (index1 > -1)
162 : return name.Substring(0, index1);
163 : return name;
164 : }
165 : }
166 : }
|