[asp.net] Ignore JavaScript blocks enclosed in HTML comments
[mono.git] / mcs / class / System.Web / System.Web.Compilation / ConnectionStringsExpressionBuilder.cs
index dd93eeef322e755c521986a765681f3f66e5585f..20169411de189580e3aad9ad0a12584e4a326627 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
 
 using System;
 using System.CodeDom;
+using System.Configuration;
+using System.Web.Configuration;
 using System.Web.UI;
-#if notyet
-using System.Web.UI.Design;
-#endif
 
 namespace System.Web.Compilation {
 
-#if notyet
-       [ExpressionEditor(typeof (ConnectionStringsExpressionEditor))]
-#endif
+       [ExpressionEditor("System.Web.UI.Design.ConnectionStringsExpressionEditor, " + Consts.AssemblySystem_Design)]
        [ExpressionPrefix("ConnectionStrings")]
        public class ConnectionStringsExpressionBuilder : ExpressionBuilder {
 
-               public ConnectionStringsExpressionBuilder ()
+               public override object EvaluateExpression (object target, BoundPropertyEntry entry,
+                                                          object parsedData, ExpressionBuilderContext context)
                {
+                       return GetConnectionString (entry.Expression.Trim());
                }
 
-               [MonoTODO]
-               public override object EvaluateExpression (object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
-               {
-                       throw new NotImplementedException ();
+               public override CodeExpression GetCodeExpression (BoundPropertyEntry entry, object parsedData,
+                                                                 ExpressionBuilderContext context)
+               {                       
+                       Pair connString = parsedData as Pair;
+                       return new CodeMethodInvokeExpression (
+                               new CodeTypeReferenceExpression (typeof (ConnectionStringsExpressionBuilder)),
+                               (bool)connString.Second ? "GetConnectionStringProviderName" : "GetConnectionString",
+                               new CodeExpression [] {new CodePrimitiveExpression (connString.First)}
+                       );
                }
 
-               [MonoTODO]
-               public override CodeExpression GetCodeExpression (BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
-               {
-                       throw new NotImplementedException ();
-               }
-
-               [MonoTODO]
                public static string GetConnectionString (string connectionStringName)
                {
-                       throw new NotImplementedException ();
+                       ConnectionStringSettings conn = WebConfigurationManager.ConnectionStrings [connectionStringName];
+                       if (conn == null)
+                               return String.Empty;
+                       else
+                               return conn.ConnectionString;
                }
 
-               [MonoTODO]
                public static string GetConnectionStringProviderName (string connectionStringName)
                {
-                       throw new NotImplementedException ();
+                       ConnectionStringSettings conn = WebConfigurationManager.ConnectionStrings [connectionStringName];
+                       if (conn == null)
+                               return String.Empty;
+                       else
+                               return conn.ProviderName;
                }
 
-               [MonoTODO]
                public override object ParseExpression (string expression, Type propertyType, ExpressionBuilderContext context)
                {
-                       throw new NotImplementedException ();
+                       bool wantsProviderName = false;
+                       string connStringName = String.Empty;
+
+                       if (!String.IsNullOrEmpty (expression)) {
+                               int subidx = expression.Length;
+                               
+                               if (expression.EndsWith (".providername", StringComparison.InvariantCultureIgnoreCase)) {
+                                       wantsProviderName = true;
+                                       subidx -= 13;
+                               } else if (expression.EndsWith (".connectionstring", StringComparison.InvariantCultureIgnoreCase))
+                                       subidx -= 17;
+
+                               connStringName = expression.Substring (0, subidx);
+                       }
+                       
+                       return new Pair (connStringName, wantsProviderName);
                }
 
                public override bool SupportsEvaluate {
@@ -86,6 +103,6 @@ namespace System.Web.Compilation {
 
 }
 
-#endif
+