Author: husted
Date: Tue Jun 21 09:53:34 2005
New Revision: 191681

URL: http://svn.apache.org/viewcvs?rev=191681&view=rev
Log:
OVR-10
OVR-12
OVR-16
OVR-14
* IViewHelper, ViewHelper, Tokens: Add ErrorsText and HintsText members. 
Provide defaults for settings. 
* FieldTable: Pass through collection types as well as string types. 
* KeyValue: Add KeyValueList member. 
* RequestContext: Default to Hashtable rather than Context for message stores. 
* WebViewHelper: Refactor HtmlMessageBuilders.

Added:
    struts/sandbox/trunk/overdrive/Nexus/Core/IKeyValueList.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/KeyValueList.cs
Modified:
    struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldContext.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldTable.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs
    struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj Tue Jun 21 09:53:34 
2005
@@ -99,6 +99,11 @@
                     BuildAction = "Compile"
                 />
                 <File
+                    RelPath = "IKeyValueList.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
                     RelPath = "IRequestCatalog.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
@@ -120,6 +125,11 @@
                 />
                 <File
                     RelPath = "KeyValue.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "KeyValueList.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs Tue Jun 21 
09:53:34 2005
@@ -93,6 +93,9 @@
                /// keyed by the field causing the message, 
                /// or to a magic global key.
                /// </summary>
+               /// <remarks>
+               /// When recalling Alerts, by default include the Fault.
+               /// </remarks>
                /// 
                IDictionary Alerts { get; }
 
@@ -108,6 +111,9 @@
                /// <summary>
                /// Record an Exception, if thrown.
                /// </summary>
+               /// <remarks>
+               /// By default, the Fault will be included in the list of 
Alerts.
+               /// </remarks>
                /// 
                Exception Fault { get; }
 
@@ -126,6 +132,16 @@
                /// 
                bool IsNominal { get; }
 
+               /// <summary>
+               /// Return the Alerts, including any Fault, formatted for 
display by a UI control.
+               /// </summary>
+               /// <remarks>
+               /// If messages are localized or customized, 
+               /// the helper will return correct version for the user.
+               /// UI specific implementation may markup the errors as needed.
+               /// </remarks>
+               /// 
+               string ErrorsText { get; } 
 
                /// <summary>
                /// Record a list of hint (or advisory) messages, 
@@ -143,6 +159,17 @@
                /// 
                bool HasHints { get; }
 
+
+               /// <summary>
+               /// Return Hints formatted for display by a UI control.
+               /// </summary>
+               /// <remarks>
+               /// If messages are localized or customized, 
+               /// the helper will return correct version for the user.
+               /// UI specific implementatiosn may markup the messages as 
needed.
+               /// </remarks>
+               /// 
+               string HintsText { get; } 
 
                // ----
 

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs Tue Jun 21 
09:53:34 2005
@@ -25,20 +25,26 @@
        /// 
        public abstract class ViewHelper : IViewHelper
        {
-               #region Context
 
-               private IRequestContext _Context;
-               public IRequestContext Context
-               {
-                       get
-                       {
-                               if (_Context == null)
-                                       _Context = Catalog.GetRequest (Command);
-                               return _Context;
-                       }
-               }
-
-               #endregion
+               /// <summary>
+               /// Default setting for ListSuffix ["_list"].
+               /// </summary>
+               public const string LIST_SUFFIX = "_list";
+
+               /// <summary>
+               /// Default setting for NullIfEmpty [true].
+               /// </summary>
+               public const bool NULL_IF_EMPTY = true;
+
+               /// <summary>
+               /// Default setting for Prefix [""].
+               /// </summary>
+               public const string PREFIX = "";
+
+               /// <summary>
+               /// Default setting for SelectItemPrompt ["--v--"].
+               /// </summary>
+               public const string SELECT_ITEM_PROMPT = "--v--";
 
                #region Read and Bind (abstract)
 
@@ -57,6 +63,14 @@
 
                #endregion
 
+               #region Messages (abstract) 
+
+               public abstract string ErrorsText { get; }
+
+               public abstract string HintsText { get; }
+
+               #endregion
+
                #region Messages
 
                public IDictionary Alerts
@@ -84,6 +98,7 @@
                        get { return (!HasAlerts && !HasFault); }
                }
 
+
                public IDictionary Hints
                {
                        get { return Context.Hints; }
@@ -110,55 +125,97 @@
                        set { _FieldSet = value; }
                }
 
+               #endregion 
+
+               #region Options
+
+               private string _Prefix = PREFIX;
                public string Prefix
                {
-                       get { return Context [Tokens.Prefix] as string; }
-                       set { Context [Tokens.Prefix] = value; }
+                       get { return _Prefix; }
+                       set { _Prefix = value; }
                }
 
+               private string _ListSuffix = LIST_SUFFIX;
                public string ListSuffix
                {
-                       get { return Context [Tokens.ListSuffix] as string; }
-                       set { Context [Tokens.ListSuffix] = value; }
+                       get { return _ListSuffix; }
+                       set { _ListSuffix = value; }
                }
 
-               #endregion 
-
-               #region Properties
-
+               private bool _NullIfEmpty = NULL_IF_EMPTY;
                public bool NullIfEmpty
                {
                        get
                        {
-                               bool v = (Boolean) Context [Tokens.NullIfEmpty];
-                               return v;
+                               return _NullIfEmpty;
                        }
                        set
                        {
-                               Boolean b = new Boolean ();
-                               bool v = b.Equals (true) ? true : false;
-                               Context [Tokens.NullIfEmpty] = v;
+                               _NullIfEmpty = value; 
                        }
                }
 
+               private string _SelectItemPrompt = SELECT_ITEM_PROMPT;
                public string SelectItemPrompt
                {
-                       get { return Context [Tokens.SelectItemPrompt] as 
string; }
-                       set { Context [Tokens.SelectItemPrompt] = value; }
+                       get { return _SelectItemPrompt; }
+                       set { _SelectItemPrompt = value; }
                }
 
+               #endregion
+
+               #region Properties
+
+               private IRequestCatalog _Catalog;
+               /// <summary>
+               /// Provide the application object catalog for this Helper.
+               /// </summary>
+               /// <remarks>
+               /// The Catalog is usually set through dependency injection. 
+               /// The Catalog and Command must be set before calling other 
methods.
+               /// </remarks>
+               /// 
                public IRequestCatalog Catalog
                {
-                       get { return Context [Tokens.Catalog] as 
IRequestCatalog; }
-                       set { Context [Tokens.Catalog] = value; }
+                       get { return _Catalog; }
+                       set { _Catalog = value; }
                }
 
+               private IRequestCommand _Command;
+               /// <summary>
+               /// Provide the command for this Helper.
+               /// </summary>
+               /// <remarks>
+               /// The Command is usually set through dependency injection. 
+               /// The Catalog and Command must be set before calling other 
methods.
+               /// </remarks>
+               /// 
                public IRequestCommand Command
                {
-                       get { return Context [Tokens.Command] as 
IRequestCommand; }
-                       set { Context [Tokens.Command] = value; }
+                       get { return _Command; }
+                       set { _Command  = value; }
                }
 
+               private IRequestContext _Context;
+               /// <summary>
+               /// Provide the runtime context for this Helper.
+               /// </summary>
+               /// <remarks>
+               /// The Context is obtained through reference to the Catalog 
and Command.
+               /// All other properties and methods of the Helper refer to the 
Context, 
+               /// making Context the cornerstone property.
+               /// </remarks>
+               /// 
+               public IRequestContext Context
+               {
+                       get
+                       {
+                               if (_Context == null)
+                                       _Context = Catalog.GetRequest (Command);
+                               return _Context;
+                       }
+               }
                #endregion 
        }
 }

Added: struts/sandbox/trunk/overdrive/Nexus/Core/IKeyValueList.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/IKeyValueList.cs?rev=191681&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/IKeyValueList.cs (added)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/IKeyValueList.cs Tue Jun 21 
09:53:34 2005
@@ -0,0 +1,11 @@
+using System.Collections;
+
+namespace Nexus.Core
+{
+       /// <summary>
+       /// List KeyValue objects.
+       /// </summary>
+       public interface IKeyValueList : IList
+       {
+       }
+}

Added: struts/sandbox/trunk/overdrive/Nexus/Core/KeyValueList.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/KeyValueList.cs?rev=191681&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/KeyValueList.cs (added)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/KeyValueList.cs Tue Jun 21 
09:53:34 2005
@@ -0,0 +1,31 @@
+using System.Collections;
+
+namespace Nexus.Core
+{
+       /// <summary>
+       /// Implement IKeyValueList.
+       /// </summary>
+       public class KeyValueList : ArrayList, IKeyValueList
+       {
+
+               /// <summary>
+               /// Construct instance without parameters.
+               /// </summary>
+               public KeyValueList() {}
+
+               /// <summary>
+               /// Add members of given list to this list.
+               /// </summary>
+               public virtual IList AddAll
+               {
+                       set
+                       {
+                               foreach (object o in value)
+                               {
+                                       this.Add (o);
+                               }
+                       }
+               }
+
+       }
+}
\ No newline at end of file

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs Tue Jun 21 
09:53:34 2005
@@ -134,10 +134,10 @@
                /// 
                private void AddStore (string template, string queue, string 
key)
                {
-                       IContext store = this [key] as IContext;
+                       IDictionary store = this [key] as IDictionary;
                        if (null == store)
                        {
-                               store = new Context (); // ISSUE: Spring?
+                               store = new Hashtable (); // ISSUE: Spring?
                                this [key] = store;
                        }
                        IList list;

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldContext.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldContext.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldContext.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldContext.cs Tue Jun 21 
09:53:34 2005
@@ -34,7 +34,12 @@
 
                public Type DataType
                {
-                       get { return this [Tokens.DataType] as Type; }
+                       get
+                       {
+                               Type v = this [Tokens.DataType] as Type;
+                               if (v==null) v = typeof(String);
+                               return v;
+                       }
                        set
                        {
                                this [Tokens.DataType] = value;

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldTable.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldTable.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldTable.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Tables/FieldTable.cs Tue Jun 21 
09:53:34 2005
@@ -56,7 +56,14 @@
 
                private bool IsStringType (Type dataType)
                {
-                       return ((typeof (String) == dataType) || (typeof 
(string) == dataType) || (null == dataType));
+                       bool v = (typeof (string).IsAssignableFrom (dataType));
+                       return v;
+               }
+
+               private bool IsCollectionType (Type dataType)
+               {
+                       bool v = (typeof (ICollection)).IsAssignableFrom 
(dataType);
+                       return (v);
                }
 
                public bool IsRichControl (string name)
@@ -78,7 +85,7 @@
                        if ((fieldContext == null))
                        {
                                if (Strict)
-                                       throw new ArgumentNullException 
("Agility.Nexus.FieldTable.Convert", id);
+                                       throw new ArgumentNullException 
("Nexus.Core.FieldTable.Convert", id);
                                else
                                {
                                        context.Target = source;
@@ -141,10 +148,17 @@
                        if ((fieldContext == null))
                        {
                                if (Strict)
-                                       throw new ArgumentNullException 
("Nexus.Core.FieldTable", "Format");
+                                       throw new ArgumentNullException 
("Nexus.Core.FieldTable.Format", id);
                                else
                                {
-                                       context.Target = (source == null) ? 
null : source.ToString ();
+                                       if (source == null)
+                                               context.Target = null;
+                                       else
+                                       {
+                                               Type sourceType = 
source.GetType ();
+                                               if (IsCollectionType 
(sourceType)) context.Target = source;
+                                               else context.Target = 
source.ToString ();
+                                       }
                                        return true;
                                }
                        }

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs Tue Jun 21 09:53:34 2005
@@ -59,12 +59,6 @@
                public const string Alerts = "_Alerts";
 
                /// <summary>
-               /// Token for Catalog property.
-               /// </summary>
-               /// 
-               public const string Catalog = "_Catalog";
-
-               /// <summary>
                /// Token for Command property.
                /// </summary>
                /// 
@@ -168,30 +162,6 @@
                /// </summary>
                /// 
                public const string Label = "_Label";
-
-               /// <summary>
-               /// Token for ListSuffix property.
-               /// </summary>
-               /// 
-               public const string ListSuffix = "_ListSuffix";
-
-               /// <summary>
-               /// Token for NullIfEmpty property.
-               /// </summary>
-               /// 
-               public const string NullIfEmpty = "_NullIfEmpty";
-
-               /// <summary>
-               /// Token for Prefix property.
-               /// </summary>
-               /// 
-               public const string Prefix = "_Prefix";
-
-               /// <summary>
-               /// Token for SelectItemPrompt property.
-               /// </summary>
-               /// 
-               public const string SelectItemPrompt = "_SelectItemPrompt";
 
                /// <summary>
                /// Token for Source property.

Modified: struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs?rev=191681&r1=191680&r2=191681&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs Tue Jun 21 
09:53:34 2005
@@ -18,6 +18,7 @@
 using System.Text;
 using System.Web.UI;
 using System.Web.UI.WebControls;
+using Nexus.Core;
 using Nexus.Core.Helpers;
 
 namespace Nexus.Web.Helpers
@@ -28,71 +29,12 @@
        /// 
        public class WebViewHelper : ViewHelper
        {
-               #region Error Builders
-
-               /// <summary>
-               /// Build a set of error messages using HTML markup.
-               /// </summary>
-               /// <param name="errors">A list of error messages</param>
-               /// <returns>HTML markup presenting the errors.</returns>
-               /// 
-               public static string HtmlErrorList (IList errors)
-               {
-                       StringBuilder sb = new StringBuilder ("<ul>");
-                       foreach (object o in errors)
-                       {
-                               sb.Append ("<li>");
-                               sb.Append (o.ToString ());
-                               sb.Append ("</li>");
-                       }
-                       sb.Append ("</ul>");
-
-                       return sb.ToString ();
-               }
-
-               /// <summary>
-               /// Build a set error messages using HTML markup.
-               /// </summary>
-               /// <param name="fault">An exception instance, if any</param>
-               /// <param name="store">A context listing errors, if any</param>
-               /// <returns>HTML markup presenting the errors.</returns>
-               /// 
-               public string HtmlErrorBuilder (Exception fault, IDictionary 
store)
-               {
-                       string errorMarkup = null;
-                       if (store != null)
-                       {
-                               IList errors = new ArrayList ();
-                               ICollection keys = Context.Keys;
-                               foreach (string key in keys)
-                               {
-                                       IList sublist = store [key] as IList;
-                                       foreach (string message in sublist) 
errors.Add (message);
-                               }
-                               errorMarkup = HtmlErrorList (errors);
-                       }
-
-                       if (errorMarkup != null)
-                       {
-                               StringBuilder sb = new StringBuilder 
(errorMarkup);
-                               return sb.ToString ();
-                       }
-                       return null;
-               }
-
-               public string HtmlErrorBuilder ()
-               {
-                       return HtmlErrorBuilder (Fault, Alerts);
-               }
-
-               #endregion 
-
                #region IViewHelper
 
                public override void ExecuteBind (ICollection controls)
                {
                        Execute ();
-                       Bind (controls);
+                       if (IsNominal) Bind (controls);
                }
 
                public override void ReadExecute (ICollection controls)
@@ -113,6 +55,23 @@
                        ReadControls (cc, Context.Criteria, Prefix, ListSuffix, 
NullIfEmpty);
                }
 
+               public override string ErrorsText
+               {
+                       get
+                       {
+                               return HtmlMessageBuilder (Alerts);
+                       }
+               }
+
+               public override string HintsText
+               {
+                       get
+                       {
+                               return HtmlMessageBuilder (Hints);
+                       }
+               }
+
+
                #endregion
 
                #region Bind methods
@@ -137,7 +96,7 @@
                                {
                                        ListControl x = (ListControl) t;
                                        string root = RootId (x.ID, prefix, 
list_suffix);
-                                       IList s = dictionary [root + 
list_suffix] as IList; // this_key_list
+                                       IList s = dictionary [x.ID] as IList; 
// this_key_list
                                        string r = dictionary [root] as string; 
// this_key
                                        if ((null == r) || (0 == r.Length))
                                                BindListControl (x, s);
@@ -162,7 +121,7 @@
                private void BindListControl (ListControl control, IList list)
                {
                        bool insertKey = ((list != null) && (!list.Contains 
(String.Empty)) && (!list.Contains (SelectItemPrompt)));
-                       if (insertKey) list.Insert (0, SelectItemPrompt);
+                       if (insertKey) list.Insert (0, new KeyValue 
(String.Empty, SelectItemPrompt));
                        BindListControl (control, list, null);
                }
 
@@ -287,6 +246,7 @@
                private string RootId (string id, string prefix, string suffix)
                {
                        int v = id.LastIndexOf (suffix);
+                       if (v<1) return id;
                        string fore = id.Substring (0, v);
                        string root = ToColumn (fore, prefix);
                        return root;
@@ -355,5 +315,58 @@
                }
 
                #endregion
+
+               #region Message utilities
+
+               /// <summary>
+               /// Build a set of messages using HTML markup.
+               /// </summary>
+               /// <param name="messages">A list of messages</param>
+               /// <returns>HTML markup presenting the messages.</returns>
+               /// 
+               private string HtmlMessageList (IList messages)
+               {
+                       StringBuilder sb = new StringBuilder ("<ul>");
+                       foreach (object o in messages)
+                       {
+                               sb.Append ("<li>");
+                               sb.Append (o.ToString ());
+                               sb.Append ("</li>");
+                       }
+                       sb.Append ("</ul>");
+
+                       return sb.ToString ();
+               }
+
+               /// <summary>
+               /// Build a set error messages using HTML markup.
+               /// </summary>
+               /// <param name="store">A context listing errors, if any</param>
+               /// <returns>HTML markup presenting the errors.</returns>
+               /// 
+               private string HtmlMessageBuilder (IDictionary store)
+               {
+                       string messageMarkup = null;
+                       if (store != null)
+                       {
+                               IList messages = new ArrayList ();
+                               ICollection keys = store.Keys;
+                               foreach (string key in keys)
+                               {
+                                       IList sublist = store [key] as IList;
+                                       foreach (string message in sublist) 
messages.Add (message);
+                               }
+                               messageMarkup = HtmlMessageList (messages);
+                       }
+
+                       if (messageMarkup != null)
+                       {
+                               StringBuilder sb = new StringBuilder 
(messageMarkup);
+                               return sb.ToString ();
+                       }
+                       return null;
+               }
+
+               #endregion 
        }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to