You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2005/06/10 22:53:07 UTC

svn commit: r190017 - in /struts/sandbox/trunk/overdrive/Nexus/Core/Helpers: EditHelper.cs IEditHelper.cs IListHelper.cs IViewHelper.cs ListHelper.cs ViewHelper.cs

Author: husted
Date: Fri Jun 10 13:53:06 2005
New Revision: 190017

URL: http://svn.apache.org/viewcvs?rev=190017&view=rev
Log:
OVR-10
* Define IViewHelper interface and begin implementation.

Removed:
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/EditHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IEditHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IListHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ListHelper.cs
Modified:
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs

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=190017&r1=190016&r2=190017&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/IViewHelper.cs Fri Jun 10 13:53:06 2005
@@ -14,27 +14,74 @@
  * limitations under the License.
  */
 using System;
-using Agility.Core;
+using System.Collections;
+using Nexus.Core.Tables;
 
 namespace Nexus.Core.Helpers
 {
 	/// <summary>
-	/// An encapsulation of the IRequestContext that hides some methods and exposes others in a more convenient way. 
+	/// A facade for use by a code-behind to simplify access to the IRequestContext and IRequestCommand. 
 	/// </summary>
-	/// <remarks>
-	/// An IViewHelper implementation may also act as a "front controller" to ensure routine tasks are carried out.
-	/// </remarks>
+	/// <remarks><p>
+	/// The controller for a helper may also act as a "front controller" to ensure routine tasks are carried out.
+	/// These tasks can include input validation, data conversion, text formatting, command logging, and so forth.
+	/// </p></remarks>
 	public interface IViewHelper
 	{
+
+		/// <summary>
+		/// Invoke the helper's command and bind the output to controls in the given collection.
+		/// </summary>
+		/// <remarks><p>
+		/// Most code behinds will call either ExecuteBind or ReadExecute by passing in the collection of controls from a panel control. 
+		/// </p></remarks>
+		/// <param name="controls">Collection of controls to populate.</param>
+		/// 
+		void ExecuteBind (ICollection controls);
+
+
+		/// <summary>
+		/// Read input from the controls in the given collection, and invoke the helper's command.
+		/// </summary>
+		/// <param name="controls">Collection of controls to populate.</param>
+		/// <remarks><p>
+		/// Most code behinds will call either ExecuteBind or ReadExecute by passing in the collection of controls from a panel control. 
+		/// </p></remarks>
+		/// 
+		void ReadExecute (ICollection controls);
+
+
 		/// <summary>
-		/// The IRequestContext we are processing.
+		/// Bind the output of the helper's command to controls in the given collection.
 		/// </summary>
-		IRequestContext Context { get; set; }
+		/// <param name="controls">Collection of controls to populate.</param>
+		/// 
+		void Bind (ICollection controls);
+
 
 		/// <summary>
+		/// Invoke the helper's command.
+		/// </summary>
 		/// 
+		void Execute();
+
+
+		/// <summary>
+		/// Read input from the controls in the given collection.
 		/// </summary>
-		IContext Errors { get; }
+		/// <param name="controls">Collection of controls to populate.</param>
+		/// 
+		void Read (ICollection controls);
+
+
+		// ----
+		
+		/// <summary>
+		/// A list of error messages, keyed by the field causing the error, or to a magic global key.
+		/// </summary>
+		/// 
+		IDictionary Errors { get; }
+
 
 		/// <summary>
 		/// Return true if errors are queued.
@@ -42,8 +89,9 @@
 		/// <returns>True if errors are queued.</returns>
 		bool HasErrors { get; }
 
+
 		/// <summary>
-		/// 
+		/// An Exception, if thrown.
 		/// </summary>
 		Exception Fault { get; }
 
@@ -53,11 +101,123 @@
 		/// <returns>True if an exception is caught.</returns>
 		bool HasFault { get; }
 
+
 		/// <summary>
 		/// Return true if there are no errors or exception pending.
 		/// </summary>
 		/// <returns>True if all is well.</returns>
 		bool IsNominal { get; }
+
+
+		/// <summary>
+		/// A list of text messages, keyed by a field or other identifier, or to a magic global key.
+		/// </summary>
+		/// 
+		IDictionary Messages { get; }
+
+
+		/// <summary>
+		/// Return true if Messages are queued.
+		/// </summary>
+		/// <returns>True if Messages are queued.</returns>
+		bool HasMessages { get; }
+
+
+		// ----
+
+		/// <summary>
+		/// Set of IFieldContext definitions available to the application, usually set by the controller.
+		/// </summary>
+		/// <remarks><p>
+		/// The FieldTable can be used to convert display strings to native types on input, 
+		/// and from native types to display strings on output. 
+		/// The FieldTable can also be used to generate UI controls. 
+		/// </p></remarks>
+		IFieldTable FieldTable { get;}
+
+
+		/// <summary>
+		/// Set of IFieldContext definitions to be used with this helper, usually set by dependency injection.
+		/// </summary>
+		/// <remarks><p>
+		/// Some helpers generate DataGrids or DataForms based on the FieldDefinitions 
+		/// </p></remarks>
+		IList FieldSet {get;}
+		
+		/* 
+			// TODO: 
+			string Text(string key); 
+			string TextIndex {get;}
+			ITextTable TextTable {get;}
+		*/
+
+		
+		// ----
+
+		/// <summary>
+		/// Prefix to trim from the id of a control during Read and Bind.
+		/// </summary>
+		/// <remarks><p>
+		/// The Prefix is needed when a single page uses a control more than once  
+		/// often in separate panels.
+		/// </p></remarks>
+		/// 
+		string Prefix { get; set; }
+
+
+		/// <summary>
+		/// Suffix to truncate from a list control id in order to set a corresponding value field ["_list"].
+		/// </summary>
+		/// <remark><p>
+		/// When processing a single-value list control, if the id ends with the list suffix, 
+		/// the suffix is removed, and a field with the remaining name is set to the selected item value.
+		/// </p><P>
+		/// So, the selected item from a list control with the id "facility_key_list" will be 
+		/// set to a field named "facility_key".
+		/// </P></remark>
+		/// 
+		string ListSuffix {get; set;}
+
+		/* 
+			// TODO: 
+			string AlertSuffix {get; set}
+			string HintSuffix {get; set}
+			string LabelSuffix {get; set}
+		*/
+
+
+		/// <summary>
+		/// If a control value is an empty string, set the value to null instead [TRUE].
+		/// </summary>
+		/// 
+		bool NullIfEmpty {get; set;}
+
+
+		/// <summary>
+		/// String token to insert as item 0 to a list controls ["--v---"].
+		/// </summary>
+		/// <remarks><p>
+		/// To disable feature, set to a null string.
+		/// </p></remarks>
+		/// 
+		string SelectItemPrompt {get; set;}
+
+
+		// ----
+
+		/// <summary>
+		/// The controller for this helper, usually set by dependency injection.
+		/// </summary>
+		/// 
+		IController Controller { get; set; }
+
+
+		/// <summary>
+		/// The command (or chain of commands) for this helper, usually set by dependency injection.
+		/// </summary>
+		/// 
+		IRequestCommand Command { get; set; }
+
 	}
 
 }

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=190017&r1=190016&r2=190017&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs Fri Jun 10 13:53:06 2005
@@ -15,104 +15,138 @@
  */
 using System;
 using System.Collections;
-using System.Text;
-using Agility.Core;
+using Nexus.Core.Tables;
 
 namespace Nexus.Core.Helpers
 {
 	/// <summary>
 	/// Standard implementation of IViewHelper.
 	/// </summary>
-	public class ViewHelper : IViewHelper
+	public abstract class ViewHelper : IViewHelper
 	{
-		public ViewHelper ()
-		{
-			Context = new RequestContext ();
-		}
+		#region private 
 
-		/// <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)
+		private IRequestContext _Context;
+		public IRequestContext Context
 		{
-			StringBuilder sb = new StringBuilder ("<ul>");
-			foreach (object o in errors)
+			get
 			{
-				sb.Append ("<li>");
-				sb.Append (o.ToString ());
-				sb.Append ("</li>");
+				if (_Context==null)
+				{
+					_Context = Controller.GetContext(Command);
+				}				
+				return _Context;
 			}
-			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 static string HtmlErrorBuilder (Exception fault, IContext store)
-		{
-			string errorMarkup = null;
-			if (store != null)
-			{
-				IList errors = new ArrayList ();
-				ICollection keys = store.Keys;
-				foreach (string key in keys)
-				{
-					IList sublist = store [key] as IList;
-					foreach (string message in sublist) errors.Add (message);
-				}
-				errorMarkup = HtmlErrorList (errors);
-			}
+		#endregion
 
-			if (errorMarkup != null)
-			{
-				StringBuilder sb = new StringBuilder (errorMarkup);
-				return sb.ToString ();
-			}
-			return null;
-		}
+		#region Read and Bind 
 
-		public static string HtmlErrorBuilder (IViewHelper helper)
-		{
-			return HtmlErrorBuilder (helper.Fault, helper.Errors);
-		}
+		public abstract void ExecuteBind (ICollection controls);
 
-		private IRequestContext _Context;
-		public IRequestContext Context
+		public abstract void ReadExecute (ICollection controls);
+
+		public abstract void Bind (ICollection controls);
+
+		public abstract void Read (ICollection controls);
+
+		public void Execute ()
 		{
-			get { return _Context; }
-			set { _Context = value; }
+			Controller.ExecuteView(Context);
 		}
 
-		public IContext Errors
+		#endregion
+
+		#region Errors ... 
+
+		public IDictionary Errors
 		{
-			get { return Context [Tokens.ERRORS] as IContext; }
+			get { return Context.Errors; }
 		}
 
 		public bool HasErrors
 		{
-			get { return Context.Contains (Tokens.ERRORS); }
+			get { return Context.HasErrors; }
 		}
 
 		public Exception Fault
 		{
-			get { return Context [Tokens.FAULT] as Exception; }
+			get { return Context.Fault; }
 		}
 
 		public bool HasFault
 		{
-			get { return Context.Contains (Tokens.FAULT); }
+			get { return Context.HasFault; }
 		}
 
 		public bool IsNominal
 		{
 			get { return (!HasErrors && !HasFault); }
 		}
+
+		public IDictionary Messages
+		{
+			get { return Context.Messages; }
+		}
+
+		public bool HasMessages
+		{
+			get { return Context.HasMessages; }
+		}
+
+		#endregion 
+
+		#region Tables
+
+		public IFieldTable FieldTable
+		{
+			get { return Context.FieldTable; }
+		}
+		
+		public IList FieldSet
+		{
+			get { return Context.FieldSet; }
+		}
+		
+		public string Prefix
+		{
+			get { throw new NotImplementedException (); }
+			set { throw new NotImplementedException (); }
+		}
+		
+		public string ListSuffix
+		{
+			get { throw new NotImplementedException (); }
+			set { throw new NotImplementedException (); }
+		}
+
+		#endregion 
+
+		#region Properties
+
+		public bool NullIfEmpty
+		{
+			get { throw new NotImplementedException (); }
+			set { throw new NotImplementedException (); }
+		}
+		public string SelectItemPrompt
+		{
+			get { throw new NotImplementedException (); }
+			set { throw new NotImplementedException (); }
+		}
+		public IController Controller
+		{
+			get { throw new NotImplementedException (); }
+			set { throw new NotImplementedException (); }
+		}
+		public IRequestCommand Command
+		{
+			get { throw new NotImplementedException (); }
+			set { throw new NotImplementedException (); }
+		
+		}
+
+		#endregion 
 	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org