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]