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 23:07:38 UTC
svn commit: r190021 - in /struts/sandbox/trunk/overdrive/Nexus:
Core/Core.csproj Core/IController.cs Core/IRequestContext.cs
Core/RequestContext.cs Core/Tokens.cs Extras/Spring/Controller.cs
Test/BaseNexusTest.cs Web/Web.csproj Web/WebHelper.cs Web/WebViewHelper.cs
Author: husted
Date: Fri Jun 10 14:07:37 2005
New Revision: 190021
URL: http://svn.apache.org/viewcvs?rev=190021&view=rev
Log:
OVR-10
* Design interface and begin default implementation.
Added:
struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs
struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs
Modified:
struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj
struts/sandbox/trunk/overdrive/Nexus/Core/IController.cs
struts/sandbox/trunk/overdrive/Nexus/Core/IRequestContext.cs
struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs
struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs
struts/sandbox/trunk/overdrive/Nexus/Extras/Spring/Controller.cs
struts/sandbox/trunk/overdrive/Nexus/Test/BaseNexusTest.cs
struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj
Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Core.csproj Fri Jun 10 14:07:37 2005
@@ -123,6 +123,31 @@
SubType = "Code"
BuildAction = "Compile"
/>
+ <File
+ RelPath = "Helpers\IViewHelper.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Helpers\ViewHelper.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Tables\IFieldContext.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Tables\IFieldTable.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Validators\IValidatorContext.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
</Include>
</Files>
</CSHARP>
Modified: struts/sandbox/trunk/overdrive/Nexus/Core/IController.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/IController.cs?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/IController.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/IController.cs Fri Jun 10 14:07:37 2005
@@ -35,11 +35,33 @@
object GetObject (string name);
/// <summary>
+ /// Obtain new NexusContext for command, including embedded resources.
+ /// </summary>
+ /// <param name="command">Our command</param>
+ /// <returns>NexusContext with embedded resources.</returns>
+ ///
+ IRequestContext GetContext (IRequestCommand command);
+
+ /// <summary>
/// Obtain and execute the IRequestContext.
/// </summary>
/// <param name="command">Our command name</param>
/// <returns>Context after execution</returns>
///
IRequestContext ExecuteContext (string command);
+
+
+ /// <summary>
+ /// Execute a Command as part of a View layer chain.
+ /// </summary>
+ /// <remarks><p>
+ /// Among other things, the View layer chain may transfer
+ /// data between the FieldState and the root Context.
+ /// The View layer chain acts as a Front Controller.
+ /// </p></remarks>
+ /// <param name="context">Context to execute</param>
+ ///
+ void ExecuteView (IRequestContext context);
+
}
}
Modified: struts/sandbox/trunk/overdrive/Nexus/Core/IRequestContext.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/IRequestContext.cs?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/IRequestContext.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/IRequestContext.cs Fri Jun 10 14:07:37 2005
@@ -14,7 +14,9 @@
* limitations under the License.
*/
using System;
+using System.Collections;
using Agility.Core;
+using Nexus.Core.Tables;
namespace Nexus.Core
{
@@ -36,6 +38,7 @@
/// <remarks>
/// Corresponds to ID of INexusCommand for the initial Command or Chain.
/// </remarks>
+ ///
string Command { get; set; }
/// <summary>
@@ -44,12 +47,31 @@
/// <remarks>
/// Corresponds to ID of INexusCommand for the initial Command or Chain.
/// </remarks>
+ ///
IRequestCommand CommandBin { get; set; }
+
+ /// <summary>
+ /// Instance of the global Field Table for this application.
+ /// </summary>
+ /// <remarks>
+ /// Corresponds to ID of INexusCommand for the initial Command or Chain.
+ /// </remarks>
+ ///
+ IFieldTable FieldTable { get; set; }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ IList FieldSet { get; set; }
+
+
/// <summary>
/// Return true if an Outcome object is present.
/// </summary>
/// <returns>True if an Outcome context is present.</returns>
+ ///
bool HasOutcome { get; }
/// <summary>
@@ -93,6 +115,7 @@
/// in its own right.
/// </p>
/// </remarks>
+ ///
object Outcome { get; set; }
/// <summary>
@@ -101,18 +124,21 @@
/// <remark>
/// TODO: Refactor as NameValueCollection ?
/// </remark>
- IContext Errors { get; set; }
+ ///
+ IDictionary Errors { get; set; }
/// <summary>
/// Add an error message under the "global" key.
/// </summary>
/// <param name="template">Message template.</param>
+ ///
void AddError (string template);
/// <summary>
/// Indicate whether errors exist.
/// </summary>
/// <returns>True if there are errors. False otherwise.</returns>
+ ///
bool HasErrors { get; }
/// <summary>
@@ -122,18 +148,49 @@
/// A IViewContext is readonly,
/// but another interface (e.g. IHelperContext) may extend to add a setter, if needed.
/// </remark>
+ ///
Exception Fault { get; set; }
/// <summary>
/// Indicate whether an Exception was caught.
/// </summary>
/// <returns>True if an Exception was caught.</returns>
+ ///
bool HasFault { get; }
/// <summary>
/// Indicate whether context is free of faults and errors.
/// </summary>
/// <returns>True if there are no faults or errors.</returns>
+ ///
bool IsNominal { get; }
+
+ /// <summary>
+ /// A list of error messages, keyed by the field causing the error, or to a magic global key.
+ /// </summary>
+ IDictionary Messages { get; set; }
+
+ /// <summary>
+ /// Add a message, creating the context if needed.
+ /// </summary>
+ /// <remarks>
+ /// Multiple messages can be added for a key and retrieved as a List.
+ /// </remarks>
+ /// <param name="template">Message template.</param>
+ /// <param name="message">Message key.</param>
+ void AddMessage (string template, string message);
+
+ /// <summary>
+ /// Add a message under the "global" key.
+ /// </summary>
+ /// <param name="template">Message template.</param>
+ void AddMessage (string template);
+
+ /// <summary>
+ /// Indicate whether messages exist.
+ /// </summary>
+ /// <returns>True if there are messages. False otherwise.</returns>
+ bool HasMessages {get;}
+
}
}
Modified: struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/RequestContext.cs Fri Jun 10 14:07:37 2005
@@ -16,6 +16,7 @@
using System;
using System.Collections;
using Agility.Core;
+using Nexus.Core.Tables;
namespace Nexus.Core
{
@@ -52,6 +53,17 @@
set { this [Tokens.COMMAND_BIN] = value; }
}
+ public IFieldTable FieldTable
+ {
+ get { return this [Tokens.FIELD_TABLE] as IFieldTable; }
+ set { this [Tokens.FIELD_TABLE] = value; }
+ }
+
+ public IList FieldSet
+ {
+ get { return this [Tokens.FIELD_SET] as IList; }
+ set { this [Tokens.FIELD_SET] = value; }
+ }
public bool HasOutcome
{
@@ -64,12 +76,6 @@
set { this [Command] = value; }
}
- public IContext Errors
- {
- get { return this [Tokens.ERRORS] as IContext; }
- set { this [Tokens.ERRORS] = value; }
- }
-
/// <summary>
/// Convenience method to lazily instantiate a message store.
/// </summary>
@@ -95,12 +101,17 @@
list.Add (template);
}
+ public IDictionary Errors
+ {
+ get { return this [Tokens.ERRORS] as IDictionary; }
+ set { this [Tokens.ERRORS] = value; }
+ }
+
public void AddError (string template)
{
AddStore (template, Tokens.GENERIC_MESSAGE, Tokens.ERRORS);
}
-
public bool HasErrors
{
get { return this.ContainsKey (Tokens.ERRORS); }
@@ -125,6 +136,27 @@
public bool IsNominal
{
get { return (!HasErrors && !HasFault); }
+ }
+
+ public IDictionary Messages
+ {
+ get { return this [Tokens.MESSAGES] as IDictionary; }
+ set { this [Tokens.MESSAGES] = value; }
+ }
+
+ public void AddMessage (string template)
+ {
+ AddStore (template, Tokens.GENERIC_MESSAGE, Tokens.MESSAGES);
+ }
+
+ public void AddMessage (string template, string queue)
+ {
+ AddStore (template, queue, Tokens.MESSAGES);
+ }
+
+ public bool HasMessages
+ {
+ get { return this.ContainsKey (Tokens.MESSAGES); }
}
}
Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Tokens.cs Fri Jun 10 14:07:37 2005
@@ -42,6 +42,26 @@
public const string ERRORS = "__ERRORS";
/// <summary>
+ /// Token for Messages property.
+ /// </summary>
+ public const string MESSAGES = "__MESSAGES";
+
+ /// <summary>
+ /// Token for FieldTable property.
+ /// </summary>
+ public const string FIELD_TABLE = "__FIELD_TABLE";
+
+ /// <summary>
+ /// Token for IFieldTable object.
+ /// </summary>
+ public const string FIELD_ID = "FieldTable";
+
+ /// <summary>
+ /// Token for FieldSet property.
+ /// </summary>
+ public const string FIELD_SET = "__FIELD_SET";
+
+ /// <summary>
/// Token for a generic message.
/// </summary>
public const string GENERIC_MESSAGE = "__GENERIC_MESSAGE";
@@ -51,6 +71,15 @@
/// </summary>
public const string FAULT = "__FAULT";
+ /// <summary>
+ /// Token for pre-op command.
+ /// </summary>
+ public const string PRE_OP = "pre-op";
+
+ /// <summary>
+ /// Token for post-op command.
+ /// </summary>
+ public const string POST_OP = "post-op";
}
}
Modified: struts/sandbox/trunk/overdrive/Nexus/Extras/Spring/Controller.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Extras/Spring/Controller.cs?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Extras/Spring/Controller.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Extras/Spring/Controller.cs Fri Jun 10 14:07:37 2005
@@ -14,7 +14,9 @@
* limitations under the License.
*/
using System;
+using Agility.Core;
using Nexus.Core;
+using Nexus.Core.Tables;
using Spring.Context;
namespace Nexus.Extras.Spring
@@ -75,11 +77,26 @@
return command;
}
- /// <summary>
- /// Token for Command object.
- /// </summary>
- private string COMMAND_BIN = Tokens.COMMAND_BIN;
+ public IRequestContext GetContext (IRequestCommand command)
+ {
+ IRequestContext context = null;
+ try
+ {
+ context = command.NewContext ();
+ context [Tokens.COMMAND_BIN] = command;
+ context [Tokens.FIELD_TABLE] = GetFieldTable ();
+ }
+ catch (Exception e)
+ {
+ context = new RequestContext ();
+ context.Fault = e;
+ // TODO: Log exception(faults) (Log all errors in verbose mode?)
+ // TODO: Provide an alternate location on fault? -- Declarative exception handing
+ }
+ return context;
+ }
+
public IRequestContext GetContext (string name)
{
IRequestContext context = null;
@@ -87,7 +104,7 @@
{
IRequestCommand command = GetCommand (name);
context = command.NewContext ();
- context [COMMAND_BIN] = command;
+ context [Tokens.COMMAND_BIN] = command;
}
catch (Exception e)
{
@@ -99,6 +116,22 @@
return context;
}
+ /// <summary>
+ /// Field for GetFieldTable method.
+ /// </summary>
+ private IFieldTable _FieldTable = null;
+
+ /// <summary>
+ /// Access method for the Controller's FieldTable.
+ /// </summary>
+ /// <returns></returns>
+ public IFieldTable GetFieldTable ()
+ {
+ if (_FieldTable == null)
+ _FieldTable = GetObject (Tokens.FIELD_ID) as IFieldTable;
+ return _FieldTable;
+ }
+
public void Execute (IRequestContext context)
{
if (null == context)
@@ -107,7 +140,7 @@
// TODO: Add a message about null context
}
- IRequestCommand command = context [COMMAND_BIN] as IRequestCommand;
+ IRequestCommand command = context [Tokens.COMMAND_BIN] as IRequestCommand;
if (null == command)
{
@@ -135,6 +168,24 @@
Execute (context);
return context;
}
+
+ public void ExecuteView (IRequestContext context)
+ {
+ IRequestCommand command = context [Tokens.COMMAND_BIN] as IRequestCommand;
+ IChain chain = new Chain ();
+ chain.AddCommand (GetCommand (Tokens.PRE_OP));
+ chain.AddCommand (command);
+ chain.AddCommand (GetCommand (Tokens.POST_OP));
+ try
+ {
+ chain.Execute (context);
+ }
+ catch (Exception e)
+ {
+ context.Fault = e;
+ }
+ }
+
}
}
Modified: struts/sandbox/trunk/overdrive/Nexus/Test/BaseNexusTest.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Test/BaseNexusTest.cs?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Test/BaseNexusTest.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Test/BaseNexusTest.cs Fri Jun 10 14:07:37 2005
@@ -15,7 +15,6 @@
*/
using System.Collections;
using System.Text;
-using Agility.Core;
using Agility.Extras.Spring;
using Nexus.Extras.Spring;
using NUnit.Framework;
@@ -73,7 +72,7 @@
if (hasErrors)
{
StringBuilder outer = new StringBuilder ();
- IContext store = context.Errors;
+ IDictionary store = context.Errors;
ICollection keys = store.Keys;
foreach (string key in keys)
{
Modified: struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj?rev=190021&r1=190020&r2=190021&view=diff
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj Fri Jun 10 14:07:37 2005
@@ -89,6 +89,16 @@
AssemblyName = "System.Xml"
HintPath = "..\..\..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
/>
+ <Reference
+ Name = "Nexus.Core"
+ AssemblyName = "Nexus.Core"
+ HintPath = "..\Core\bin\Debug\Nexus.Core.dll"
+ />
+ <Reference
+ Name = "Agility.Core"
+ AssemblyName = "Agility.Core"
+ HintPath = "..\..\Agility\Core\bin\Debug\Agility.Core.dll"
+ />
</References>
</Build>
<Files>
@@ -117,6 +127,16 @@
<File
RelPath = "Web.config"
BuildAction = "Content"
+ />
+ <File
+ RelPath = "WebHelper.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "WebViewHelper.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
/>
</Include>
</Files>
Added: struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs?rev=190021&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs (added)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs Fri Jun 10 14:07:37 2005
@@ -0,0 +1,17 @@
+using System;
+
+namespace Nexus
+{
+ /// <summary>
+ /// Summary description for WebHelper.
+ /// </summary>
+ public class WebHelper
+ {
+ public WebHelper()
+ {
+ //
+ // TODO: Add constructor logic here
+ //
+ }
+ }
+}
Added: struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs?rev=190021&view=auto
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs (added)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/WebViewHelper.cs Fri Jun 10 14:07:37 2005
@@ -0,0 +1,95 @@
+using System;
+using System.Collections;
+using System.Text;
+using Nexus.Core.Helpers;
+
+namespace Nexus.Web.Helpers
+{
+ /// <summary>
+ /// Summary description for WebViewHelper.
+ /// </summary>
+ 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, Errors);
+ }
+
+ #endregion
+
+ #region IViewHelper
+
+ public override void ExecuteBind (ICollection controls)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public override void ReadExecute (ICollection controls)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public override void Bind (ICollection controls)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public override void Read (ICollection controls)
+ {
+ throw new NotImplementedException ();
+ }
+
+ #endregion
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org