Added: struts/sandbox/trunk/overdrive/Nexus/Test/bin/Debug/log4net.dll URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Test/bin/Debug/log4net.dll?rev=280025&view=auto ============================================================================== Binary file - no diff available.
Propchange: struts/sandbox/trunk/overdrive/Nexus/Test/bin/Debug/log4net.dll ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx Sat Sep 10 12:04:14 2005 @@ -0,0 +1 @@ +<%@ Control Language="c#" AutoEventWireup="false" Codebehind="GridControl.ascx.cs" Inherits="Nexus.Web.Controls.GridControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> Added: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs Sat Sep 10 12:04:14 2005 @@ -0,0 +1,658 @@ +using System; +using System.Collections; +using System.Web.UI; +using System.Web.UI.WebControls; +using Nexus.Core; +using Nexus.Core.Helpers; + +namespace Nexus.Web.Controls +{ + public class GridControl : ViewControl + { + #region Runtime state Properties + + /// <summary> + /// Attribute token for List_Criteria. + /// </summary> + private string LIST_CRITERIA_KEY = "list_Criteria"; + + /// <summary> + /// Values to use with a query statement. + /// </summary> + public virtual IDictionary list_Criteria + { + get + { + IDictionary criteria = ViewState[LIST_CRITERIA_KEY] as IDictionary; + return criteria; + } + set { ViewState[LIST_CRITERIA_KEY] = value; } + } + + /// <summary> + /// Attribute token for List_ItemIndex + /// </summary> + private const string LIST_ITEM_INDEX = "list_ItemIndex"; + + /// <summary> + /// Current item index, used mainly to signal editing. + /// </summary> + public virtual int list_ItemIndex + { + get + { + object value = ViewState[LIST_ITEM_INDEX]; + if (value == null) return -1; + return (int) value; + } + set + { + ViewState[LIST_ITEM_INDEX] = value; + if (Grid != null) Grid.EditItemIndex = value; + } + } + + /// <summary> + /// Attribute token for List_ItemKey. + /// </summary> + private const string LIST_ITEM_KEY = "list_ItemKey"; + + /// <summary> + /// The data key for the selected item. + /// </summary> + public virtual string list_ItemKey + { + get { return ViewState[LIST_ITEM_KEY] as string; } + set { ViewState[LIST_ITEM_KEY] = value; } + } + + /// <summary> + /// Attribute token for List_Insert. + /// </summary> + private const string LIST_INSERT_KEY = "list_Insert"; + + /// <summary> + /// Insert mode - are we adding or modifying? + /// </summary> + public virtual bool list_Insert + { + get + { + object value = ViewState[LIST_INSERT_KEY]; + if (value == null) return false; + return (bool) value; + } + set { ViewState[LIST_INSERT_KEY] = value; } + } + + private bool _HasCriteria = true; + + public virtual bool HasCriteria + { + get { return _HasCriteria; } + set { _HasCriteria = value; } + } + + #endregion + + #region Command properties to set + + private string _FindCommand; + + public virtual string FindCommand + { + get { return _FindCommand; } + set { _FindCommand = value; } + } + + private string _ListCommand; + + public virtual string ListCommand + { + get { return _ListCommand; } + set { _ListCommand = value; } + } + + private string _SaveCommand; + + public virtual string SaveCommand + { + get { return _SaveCommand; } + set { _SaveCommand = value; } + } + + #endregion + + #region Column properties to set + + private string _DataKeyField; + + public virtual string DataKeyField + { + get { return _DataKeyField; } + set { _DataKeyField = value; } + } + + private IList _DataFields; + + public virtual IList DataFields + { + get { return _DataFields; } + set { _DataFields = value; } + } + + private IList _DataLabels; + + public virtual IList DataLabels + { + get { return _DataLabels; } + set { _DataLabels = value; } + } + + #endregion + + #region Column properties with defaults + + public const string msg_EDIT_TEXT = "EDIT"; + public const string msg_QUIT_TEXT = "CANCEL"; + public const string msg_SAVE_TEXT = "SAVE"; + public const string msg_ITEM_TEXT = "#"; + public const string msg_ITEM_COMMAND = "Item"; + + private string _EditText = msg_EDIT_TEXT; + + public virtual string EditText + { + get { return _EditText; } + set { _EditText = value; } + } + + private string _QuitText = msg_QUIT_TEXT; + + public virtual string QuitText + { + get { return _QuitText; } + set { _QuitText = value; } + } + + private string _SaveText = msg_SAVE_TEXT; + + public virtual string SaveText + { + get { return _SaveText; } + set { _SaveText = value; } + } + + private string _ItemText = msg_ITEM_TEXT; + + public virtual string ItemText + { + get { return _ItemText; } + set { _ItemText = value; } + } + + private string _ItemCommand = msg_ITEM_COMMAND; + + public virtual string ItemCommandName + { + get { return _ItemCommand as string; } + set { _ItemCommand = value; } + } + + private bool _HasItemColumn = false; + + public virtual bool HasItemColumn + { + get { return _HasItemColumn; } + set { _HasItemColumn = value; } + } + + public virtual bool HasEditColumn + { + get { return (SaveCommand != null); } + set { throw new NotImplementedException(); } + } + + #endregion + + #region Binding methods + + public virtual void DataSource(IViewHelper helper) + { + IList list = helper.Outcome as IList; + Grid.DataSource = list; + } + + public virtual void DataBind() + { + Grid.DataBind(); + } + + public virtual int BindItemColumn(int i) + { + ButtonColumn column = new ButtonColumn(); + column.ButtonType = ButtonColumnType.PushButton; + column.Text = ItemText; + column.CommandName = ItemCommandName; + Grid.Columns.AddAt(i, column); + return ++i; + } + + public virtual int BindEditColumn(int i) + { + EditCommandColumn column = new EditCommandColumn(); + column.ButtonType = ButtonColumnType.PushButton; + column.EditText = EditText; + column.CancelText = QuitText; + column.UpdateText = SaveText; + Grid.Columns.AddAt(i, column); + return ++i; + } + + public virtual int BindColumns(int i) + { + DataGrid grid = Grid; + grid.DataKeyField = DataKeyField; + int colCount = DataFields.Count; + int lblCount = DataLabels.Count; + for (int c = 0; c < colCount; c++) + { + string column = DataFields[c] as string; + string label = (lblCount < c) ? column : DataLabels[c] as string; + i = BindColumn(i, label, column); + } + return i; + } + + public int BindColumn(int pos, string headerText, string dataField, string sortExpression, string dataFormat) + { + BoundColumn column = new BoundColumn(); + column.HeaderText = headerText; + column.DataField = dataField; + column.SortExpression = sortExpression; // See DataGridColumn.SortExpression Property + column.DataFormatString = dataFormat; // See Formatting Types in .NET Dev Guide + Grid.Columns.AddAt(pos, column); + return pos + 1; + } + + public int BindColumn(int pos, string headerText, string dataField) + { + return BindColumn(pos, headerText, dataField, String.Empty, String.Empty); + } + + private bool bind = true; + + public virtual void InitGrid() + { + bind = true; + } + + public virtual void BindGrid(IViewHelper helper) + { + // Only bind columns once + // WARNING: Won't work with a singleton + if (bind) + { + bind = false; + int i = 0; + if (HasEditColumn) i = BindEditColumn(i); + if (HasItemColumn) i = BindItemColumn(i); + BindColumns(i); + + } + DataSource(helper); + DataBind(); + } + + #endregion + + #region Command methods + + /// <summary> + /// If "Add Row" feature is going to be used, + /// Override getter to return new instance of the Context list + /// for this application. + /// </summary> + public virtual IEntryList NewContextList + { + get { throw new NotImplementedException(); } + } + + public virtual IViewHelper DataInsert() + { + DataGrid grid = Grid; + IEntryList list = NewContextList; + // Fake a blank row + IViewHelper helper = GetHelperFor(ListCommand); + list.Insert(String.Empty); + // ISSUE: FIXME: Do we need helper.Outcome = list; + grid.DataSource = list; + grid.CurrentPageIndex = 0; + grid.EditItemIndex = 0; + DataBind(); + return helper; + } + + public virtual IViewHelper Find(string key, ControlCollection controls) + { + IViewHelper helper = ExecuteBind(FindCommand); + return helper; + } + + public virtual IViewHelper Save(string key, ControlCollection controls) + { + IViewHelper h = GetHelperFor(SaveCommand); + if (h.IsNominal) + { + h.Criteria[DataKeyField] = key; + int cols = DataFields.Count; + string[] keys = new string[2 + cols]; + // reconstruct the standard edit column keys + // just as placeholders, really + keys[0] = SaveText; + keys[1] = QuitText; + int index = 2; + // append our field names to the array of keys + for (int i = 0; i < cols; i++) + keys[index++] = DataFields[i] as string; + ReadControls(h.Criteria, keys, true); + h.Execute(); + } + return h; + } + + #endregion + + #region Loading methods + + public virtual IViewHelper ExecuteList() + { + IViewHelper helper = Execute(ListCommand); + bool okay = helper.IsNominal; + if (okay) BindGrid(helper); + return helper; + } + + public virtual IViewHelper ExecuteList(IDictionary criteria) + { + IViewHelper helper = GetHelperFor(ListCommand); + helper.ReadExecute(criteria); + bool okay = helper.IsNominal; + if (okay) BindGrid(helper); + return helper; + } + + public virtual IViewHelper LoadGrid(IDictionary criteria) + { + IViewHelper helper; + if (HasCriteria) + helper = ExecuteList(criteria); + else + helper = ExecuteList(); + return helper; + } + + #endregion + + #region List properties to set + + private DataGrid _Grid; + + public DataGrid Grid + { + get { return _Grid; } + set { _Grid = value; } + } + + #endregion + + #region List methods + + public virtual bool Open() + { + IViewHelper helper = this.LoadGrid(list_Criteria); + bool okay = helper.IsNominal; + if (!okay) + { + Page_Error = helper; + } + return okay; + } + + protected virtual void list_Item(string commandName, int index) + { + switch (commandName) + { + case "Page": + // Handled by StepList_PageIndexChanged + break; + case msg_ITEM_COMMAND: + list_Item_Click(index); + break; + default: + { + if (list_Insert) + // ISSUE: If insert fails, old input is not retained. [WNE-67] + list_Add_Load(); + else + list_Refresh(); + break; + } + } + } + + protected virtual void list_Edit(int index) + { + // ISSUE: Event? Page_Prompt = msg_EDIT_HINT; + list_ItemIndex = index; + list_Refresh(); + } + + protected virtual void list_Quit() + { + // ISSUE: Event? Page_Prompt = msg_QUIT_SUCCESS; + list_Insert = false; + list_ItemIndex = -1; + list_Refresh(); + } + + protected virtual void list_Refresh() + { + DataBind(); + } + + protected virtual void list_Add_Load() + { + IViewHelper helper = DataInsert(); + bool okay = helper.IsNominal; + if (okay) + { + // ISSUE: Event? Page_Prompt = msg_EDIT_HINT; + list_Insert = true; + list_ItemIndex = 0; + } + else Page_Error = helper; + } + + #endregion + + #region List events + + private string GetDataKey () + { + DataGrid grid = Grid; + int index = grid.EditItemIndex; + string key = grid.DataKeys [index] as string; + return key; + } + + private ControlCollection GetControls (DataGridCommandEventArgs e) + { + DataGrid grid = Grid; + ControlCollection controls = new ControlCollection (grid); + foreach (TableCell t in e.Item.Cells) + { + for (int i = 0; i < t.Controls.Count; i++) + controls.Add (t.Controls [i]); + } + return controls; + } + + private bool GetList () + { + IViewHelper helper = Execute (ListCommand); + bool okay = helper.IsNominal; + if (okay) + { + DataSource (helper); + DataBind (); + } + return okay; + } + + // postback events + + protected void list_Edit(object source, DataGridCommandEventArgs e) + { + list_Edit(e.Item.ItemIndex); + } + + protected void list_Save(object source, DataGridCommandEventArgs e) + { + string key = (list_Insert) ? null : GetDataKey(); + ControlCollection controls = GetControls(e); + IViewHelper helper = Save(key, controls); + bool okay = helper.IsNominal; + if (okay) + { + okay = GetList(); + // ISSUE: Event? Page_Prompt = (List_Insert) ? msg_ADD_SUCCESS : msg_SAVE_SUCCESS; + list_Insert = false; + list_ItemIndex = -1; + list_Refresh(); + } + // ISSUE: Event? if (!okay) Page_Error = Helper; + } + + protected void list_Quit(object source, DataGridCommandEventArgs e) + { + list_Quit(); + } + + protected virtual void list_Add(object sender, EventArgs e) + { + list_Add_Load(); + } + + protected void List_Item(object source, DataGridCommandEventArgs e) + { + int index = e.Item.ItemIndex; + list_Item(e.CommandName, index); + } + + protected void list_PageIndexChanged(object sender, DataGridPageChangedEventArgs e) + { + Grid.CurrentPageIndex = e.NewPageIndex; + list_Refresh(); + } + + #endregion + + public void list_Item_Click(int index) + { + // + } + + private void Page_Load(object sender, EventArgs e) + { + Grid.AutoGenerateColumns = false; + Grid.EditItemIndex = list_ItemIndex; + Grid.CancelCommand += new DataGridCommandEventHandler(list_Quit); + Grid.EditCommand += new DataGridCommandEventHandler(list_Edit); + Grid.UpdateCommand += new DataGridCommandEventHandler(list_Save); + Grid.ItemCommand += new DataGridCommandEventHandler(List_Item); + Grid.PageIndexChanged += new DataGridPageChangedEventHandler(list_PageIndexChanged); + if (this.Visible) Open(); + } + + #region Web Form Designer generated code + + protected override void OnInit(EventArgs e) + { + // + // CODEGEN: This call is required by the ASP.NET Web Form Designer. + // + InitializeComponent(); + base.OnInit(e); + InitGrid(); + } + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.Load += new EventHandler(this.Page_Load); + } + + #endregion + } + + + /* + + + #region List Panel + + protected Panel pnlList; + protected DataGridControl list_report; + // from BaseGrid: Button cmdListAdd; + + private void List_Init() + { + list_report.Helper = this.Helper; + list_report.List_Init(); + pnlList.Visible = false; + } + + /// <summary> + /// Select only those items in control + /// whose Value property matches the given value. + /// If the value is null, no action is taken. + /// </summary> + /// <param name="control">ListControl to process</param> + /// <param name="text">Text label to match</param> + /// + static void SelectItemText (ListControl control, string text) + { + if (text != null) + { + foreach (ListItem i in control.Items) + i.Selected = false; + + foreach (ListItem i in control.Items) + { + if (text.Equals (i.Text)) + i.Selected = true; + } + } + } + + private void List_Edit_Submit(IDictionary context) + { + Helper.BindControls(pnlEdit.Controls,context,null); + string county_name = context[App.COUNTY_NAME] as string; + SelectItemText(county_key_list,county_name); + Template_Load (App.msg_ROUTING_HEADING, App.msg_ROUTING_EDIT_PROMPT); + pnlEdit.Visible = true; + pnlFind.Visible = false; + pnlList.Visible = false; + } + + #endregion + + + + */ +} \ No newline at end of file Added: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.resx URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.resx?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.resx (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.resx Sat Sep 10 12:04:14 2005 @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8" ?> +<root> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="ResMimeType"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="Version"> + <value>1.0.0.0</value> + </resheader> + <resheader name="Reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="Writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> Added: struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx Sat Sep 10 12:04:14 2005 @@ -0,0 +1 @@ +<%@ Control Language="c#" AutoEventWireup="false" Codebehind="ViewControl.ascx.cs" Inherits="Nexus.Web.Controls.ViewControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> Added: struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.cs URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.cs?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.cs (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.cs Sat Sep 10 12:04:14 2005 @@ -0,0 +1,577 @@ +using System; +using System.Collections; +using System.Web.UI; +using System.Web.UI.WebControls; +using Nexus.Core; +using Nexus.Core.Helpers; +using UserControl = Spring.Web.UI.UserControl; + +namespace Nexus.Web.Controls +{ + /// <summary> + /// Base class for view controls (sub forms). + /// </summary> + public class ViewControl : UserControl + { + private string _TitleText; + public virtual string TitleText + { + get { return _TitleText; } + set { _TitleText = value; } + } + + private string _HeadingText; + public virtual string HeadingText + { + get { return _HeadingText; } + set { _HeadingText = value; } + } + + private string _PromptText; + public virtual string PromptText + { + get { return _PromptText; } + set { _PromptText = value; } + } + + private IRequestCatalog _Catalog; + + /// <summary> + /// Helper passed by an enclosing control (e.g. Page). + /// </summary> + /// <remarks><p> + /// Subclasses adding EventHandlers + /// should pass a reference to themselves with a ViewArgs instance, + /// encapsulating the Helper. + /// </p></remarks> + public virtual IRequestCatalog Catalog + { + get { return _Catalog; } + set { _Catalog = value; } + } + + /// <summary> + /// Psuedo property to generate an Error event encapsulating + /// our Helper property, containing the error. + /// </summary> + protected IViewHelper Page_Error + { + set { View_Error_Send(this, new ViewArgs(value)); } + } + + #region Control utilities + + #region String utilities + + private string NullIfEmpty(string input) + { + return (string.Empty.Equals(input)) ? null : input; + } + + /// <summary> + /// Extract the root name from the id, allowing for a prefix and suffix. + /// </summary> + /// <param name="id">The full id, including prefix and suffix.</param> + /// <param name="prefix">The prefix to omit.</param> + /// <param name="suffix">The suffix to omit.</param> + /// <returns></returns> + private string RootId(string id, string prefix, string suffix) + { + int v = id.LastIndexOf(suffix); + string fore = id.Substring(0, v); + string root = ToColumn(fore, prefix); + return root; + } + + /// <summary> + /// Trim Sany QL wildcards that may have been added to a search string. + /// </summary> + /// <param name="input">String to trim</param> + /// <returns>Input without SQL wildcards</returns> + protected string TrimWildCards(string input) + { + string trimmed = null; + if (input!=null) trimmed = input.Trim('%'); + return trimmed; + } + + private static KeyValue _NullKey = new KeyValue(String.Empty, "--v--"); + + /// <summary> + /// Default value for dropdown lists. + /// </summary> + protected KeyValue NullKey + { + get { return _NullKey; } + } + + /// <summary> + /// The default list suffix. + /// </summary> + private string _ListSuffix = "_list"; + + protected string ListSuffix + { + get { return _ListSuffix; } + set { _ListSuffix = value; } + } + + #endregion + + /// <summary> + /// Return true if control is a Label. + /// </summary> + /// <param name="control">Control to test.</param> + /// <returns>True if control is a Label</returns> + /// + protected bool IsLabel(Control control) + { + return (typeof (Label).Equals(control.GetType())); + } + + /// <summary> + /// Return true if control is a TextBox. + /// </summary> + /// <param name="control">Control to test.</param> + /// <returns>True if control is a TextBox</returns> + /// + protected bool IsTextBox(Control control) + { + return (typeof (TextBox).Equals(control.GetType())); + } + + /// <summary> + /// Return true if control is a List Control or one of the standard subclasses. + /// </summary> + /// <param name="control">Control to test.</param> + /// <returns>True if control is a TextBox</returns> + /// + protected bool IsListControl(Control control) + { + bool isList = false; + Type type = control.GetType(); + isList = (isList) || typeof (ListControl).Equals(type); + isList = (isList) || typeof (CheckBoxList).Equals(type); + isList = (isList) || typeof (DropDownList).Equals(type); + isList = (isList) || typeof (ListBox).Equals(type); + isList = (isList) || typeof (RadioButtonList).Equals(type); + return isList; + } + + /// <summary> + /// Return true if control is a Checkbox. + /// </summary> + /// <param name="control">Control to test.</param> + /// <returns>True if control is a Checkbox</returns> + /// + protected bool IsCheckBox(Control control) + { + return (typeof (CheckBox).Equals(control.GetType())); + } + + /// <summary> + /// Return true if control is a RadioButton. + /// </summary> + /// <param name="control">Control to test.</param> + /// <returns>True if control is a RadioButton</returns> + /// + protected bool IsRadioButton(Control control) + { + return (typeof (RadioButton).Equals(control.GetType())); + } + + /// <summary> + /// Select only those items in control + /// whose Text property matches the given text. + /// If the value is null, no action is taken. + /// </summary> + /// <param name="control">Control to set</param> + /// <param name="text">Text to match</param> + /// + protected void SelectItemText(ListControl control, string text) + { + if (text != null) + { + foreach (ListItem i in control.Items) + i.Selected = false; + + foreach (ListItem i in control.Items) + { + if (text.Equals(i.Text)) + i.Selected = true; + } + } + } + + /// <summary> + /// Set Labels and TextBoxes to an empty string + /// to ensure inappropriate values are not carried over. + /// </summary> + /// + protected void ResetControls() + { + + ControlCollection controls = this.Controls; + foreach (Control control in controls) + { + if (IsLabel(control)) + { + Label x = (Label) control; + x.Text = String.Empty; + } + if (IsTextBox(control)) + { + TextBox x = (TextBox) control; + x.Text = String.Empty; + } + if (IsListControl(control)) + { + ListControl x = (ListControl) control; + x.SelectedIndex = -1; + } + } + } + + protected IViewHelper GetHelperFor(string command) + { + IViewHelper helper = Catalog.GetHelperFor(command); + return helper; + } + + protected IViewHelper Execute(string command) + { + IViewHelper helper = GetHelperFor(command); + helper.Execute(); + return helper; + } + + protected void BindControls(IDictionary dictionary, string prefix, string list_suffix) + { + ControlCollection controls = this.Controls; + foreach (Control t in controls) + { + if (IsTextBox(t)) + { + TextBox x = (TextBox) t; + object v = dictionary[ToColumn(x.ID, prefix)]; + if (v != null) x.Text = v.ToString(); + } + if (IsLabel(t)) + { + Label x = (Label) t; + object v = dictionary[ToColumn(x.ID, prefix)]; + if (v != null) x.Text = v.ToString(); + } + if (IsListControl(t)) + { + ListControl x = (ListControl) t; + string root = RootId(x.ID, prefix, list_suffix); + IList s = dictionary[root + list_suffix] as IList; // this_key_list + string r = dictionary[root] as string; // this_key + if ((null == r) || (0 == r.Length)) + BindListControl(x, s); + else + BindListControl(x, s, r); + } + } + } + + protected void BindControls(IDictionary dictionary, string prefix) + { + BindControls(dictionary, prefix, ListSuffix); + } + + protected void BindControls(IDictionary dictionary) + { + BindControls(dictionary, null, ListSuffix); + } + + protected IViewHelper ExecuteBind(string command) + { + IViewHelper helper = GetHelperFor(command); + helper.Execute(); + BindControls(helper.Criteria); + return helper; + } + + protected void ExecuteBind(IViewHelper helper) + { + helper.Execute(); + BindControls(helper.Criteria); + if (helper.IsNominal) helper.Execute(); + } + + /// <summary> + /// Render a control id as a column name + /// by trimming a prefix from the id, if any. + /// </summary> + /// <param name="id">String to process.</param> + /// <param name="prefix">Prefix to remove.</param> + /// <returns>id without prefix.</returns> + /// + private string ToColumn(string id, string prefix) + { + string trimmed; + if (null == prefix) trimmed = id; + else trimmed = id.Substring(prefix.Length); + return trimmed; + } + + + protected void ReadControls(IDictionary dictionary, string[] keys, bool nullIfEmpty) + { + ControlCollection controls = this.Controls; + int i = 0; + foreach (Control t in controls) + { + string key = keys[i]; + if (IsTextBox(t)) + { + TextBox x = (TextBox) t; + string value = (nullIfEmpty) ? NullIfEmpty(x.Text) : x.Text; + dictionary.Add(key, value); + } + if (IsLabel(t)) + { + Label x = (Label) t; + string value = (nullIfEmpty) ? NullIfEmpty(x.Text) : x.Text; + dictionary.Add(key, value); + } + if (IsListControl(t)) + { + ListControl x = (ListControl) t; + string value = (nullIfEmpty) ? NullIfEmpty(x.SelectedValue) : x.SelectedValue; + dictionary.Add(key, value); + } + if (IsCheckBox(t)) + { + CheckBox x = (CheckBox) t; + string value = (x.Checked) ? key : null; + dictionary.Add(key, value); + } + if (IsRadioButton(t)) + { + RadioButton x = (RadioButton) t; + string value = (x.Checked) ? key : null; + dictionary.Add(key, value); + } + i++; + } + } + + protected void ReadControls(IDictionary dictionary, string prefix, string list_suffix, bool nullIfEmpty) + { + ControlCollection controls = this.Controls; + foreach (Control t in controls) + { + if (IsTextBox(t)) + { + TextBox x = (TextBox) t; + string value = (nullIfEmpty) ? NullIfEmpty(x.Text) : x.Text; + dictionary.Add(ToColumn(x.ID, prefix), value); + } + if (IsLabel(t)) + { + Label x = (Label) t; + string value = (nullIfEmpty) ? NullIfEmpty(x.Text) : x.Text; + dictionary.Add(ToColumn(x.ID, prefix), value); + } + if (IsListControl(t)) + { + ListControl x = (ListControl) t; + string root = RootId(x.ID, prefix, list_suffix); + string value = (nullIfEmpty) ? NullIfEmpty(x.SelectedValue) : x.SelectedValue; + dictionary.Add(root, value); + } + if (IsCheckBox(t)) + { + CheckBox x = (CheckBox) t; + string key = ToColumn(x.ID, prefix); + string value = (x.Checked) ? key : null; + dictionary.Add(key, value); + } + if (IsRadioButton(t)) + { + RadioButton x = (RadioButton) t; + string key = ToColumn(x.ID, prefix); + string value = (x.Checked) ? key : null; + dictionary.Add(key, value); + } + } + } + + protected void ReadControls(IDictionary dictionary, bool nullIfEmpty) + { + ReadControls(dictionary,null,ListSuffix,nullIfEmpty); + } + + protected IViewHelper Read(string command, bool nullIfEmpty) + { + IViewHelper helper = GetHelperFor(command); + ReadControls(helper.Criteria,nullIfEmpty); + return helper; + } + + protected IViewHelper Read(string command) + { + return Read(command,true); + } + + protected IViewHelper ReadExecute(string command, bool nullIfEmpty) + { + IViewHelper helper = Read(command,nullIfEmpty); + helper.Execute(); + return helper; + } + + protected IViewHelper ReadExecute(string command) + { + return ReadExecute(command,true); + } + + protected IViewHelper Read(string command, IDictionary criteria, bool nullIfEmpty) + { + IViewHelper helper = GetHelperFor(command); + helper.Read(criteria,nullIfEmpty); + return helper; + } + + protected IViewHelper ReadExecute(string command, IDictionary criteria, bool nullIfEmpty) + { + IViewHelper helper = Read(command, criteria, nullIfEmpty); + helper.Execute(); + return helper; + } + + protected IViewHelper ReadExecute(string command, IDictionary criteria) + { + return ReadExecute(command,criteria,true); + } + + + #region ListControl methods + + /// <summary> + /// Select only those items in control + /// whose Value property matches the given value. + /// If the value is null, no action is taken. + /// </summary> + /// <param name="control"></param> + /// <param name="value"></param> + /// + protected void SelectItem(ListControl control, string value) + { + if (value != null) + { + foreach (ListItem i in control.Items) + i.Selected = false; + + foreach (ListItem i in control.Items) + { + if (value.Equals(i.Value)) + i.Selected = true; + } + } + } + + /// <summary> + /// Deactivate the selected item, and select any item matching value. + /// </summary> + /// <param name="control"></param> + /// <param name="value"></param> + /// + protected void SelectListItem(ListControl control, string value) + { + try + { + control.SelectedIndex = -1; + SelectItem(control, value); + } + catch (NullReferenceException e1) + { + if (e1 == null) value = string.Empty; // placate the IDE + } + } + + /// <summary> + /// Bind a list of KeyValue objects to a ListControl, + /// select any item matching value. + /// </summary> + /// <param name="control">ListControl to process</param> + /// <param name="list">List of TextKey objects.</param> + /// <param name="value">Value to select, or null if nothing is selected.</param> + /// + private void BindListControl(ListControl control, IList list, string value) + { + control.DataTextField = "Value"; + control.DataValueField = "Key"; + control.DataSource = list; + control.DataBind(); + SelectListItem(control, value); + } + + protected void BindListControl(ListControl control, IList list) + { + bool insertKey = ((list != null) && (!list.Contains(NullKey))); + if (insertKey) list.Insert(0, NullKey); + BindListControl(control, list, null); + } + + #endregion + + #endregion + + /// <summary> + /// Signal when an error is exposed. + /// </summary> + public event EventHandler View_Error; + + /// <summary> + /// Pass an error to another control registered to received it. + /// </summary> + /// <param name="sender">This object</param> + /// <param name="e">A ViewArgs instance with the IViewHelper containing the error messages(s).</param> + private void View_Error_Send(object sender, ViewArgs e) + { + if (View_Error != null) + { + View_Error(sender, e); + } + } + + /// <summary> + /// Reset controls to default state, usually after a Quit or Save event. + /// </summary> + public virtual void Page_Reset() + { + ResetControls(); + } + + private void Page_Load(object sender, EventArgs e) + { + // Put user code to initialize the page here + } + + #region Web Form Designer generated code + + protected override void OnInit(EventArgs e) + { + // + // CODEGEN: This call is required by the ASP.NET Web Form Designer. + // + InitializeComponent(); + base.OnInit(e); + } + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.Load += new EventHandler(this.Page_Load); + } + + #endregion + } + } \ No newline at end of file Added: struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.resx URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.resx?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.resx (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/ViewControl.ascx.resx Sat Sep 10 12:04:14 2005 @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8" ?> +<root> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="ResMimeType"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="Version"> + <value>1.0.0.0</value> + </resheader> + <resheader name="Reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="Writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> Modified: struts/sandbox/trunk/overdrive/Nexus/Web/Web.config URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Web.config?rev=280025&r1=280024&r2=280025&view=diff ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/Web.config (original) +++ struts/sandbox/trunk/overdrive/Nexus/Web/Web.config Sat Sep 10 12:04:14 2005 @@ -97,5 +97,18 @@ /> </system.web> + <runtime> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity + name="log4net" + publicKeyToken="b32731d11ce58905" + culture="neutral"/> + <bindingRedirect + oldVersion="1.2.0.30714" + newVersion="1.2.9.0"/> + </dependentAssembly> + </assemblyBinding> + </runtime> </configuration> Modified: struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj?rev=280025&r1=280024&r2=280025&view=diff ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj (original) +++ struts/sandbox/trunk/overdrive/Nexus/Web/Web.csproj Sat Sep 10 12:04:14 2005 @@ -12,12 +12,12 @@ AssemblyName = "Nexus.Web" AssemblyOriginatorKeyFile = "" DefaultClientScript = "JScript" - DefaultHTMLPageLayout = "Grid" + DefaultHTMLPageLayout = "Flow" DefaultTargetSchema = "IE50" DelaySign = "false" OutputType = "Library" PreBuildEvent = "" - PostBuildEvent = "" + PostBuildEvent = "$(SolutionDir)postbuild.bat $(TargetDir) $(TargetName) $(SolutionName) $(SolutionDir)" RootNamespace = "Nexus.Web" RunPostBuildEvent = "OnBuildSuccess" StartupObject = "" @@ -90,29 +90,24 @@ HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll" /> <Reference - Name = "Core" - Project = "{7C8CAFD4-1E45-41B4-9963-F51199B12EA7}" - Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" - /> - <Reference - Name = "Extras" - Project = "{7931CACD-0E73-4DD2-A373-FF6A01CE6186}" - Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" + Name = "Spring.Web" + AssemblyName = "Spring.Web" + HintPath = "..\..\local-cache\SpringNet\Spring.Web.dll" /> <Reference Name = "Spring.Core" AssemblyName = "Spring.Core" - HintPath = "..\..\SpringNet.bin\Spring.Core.dll" - /> - <Reference - Name = "Spring.Web" - AssemblyName = "Spring.Web" - HintPath = "..\..\SpringNet.bin\Spring.Web.dll" + HintPath = "..\..\local-cache\SpringNet\Spring.Core.dll" /> <Reference Name = "Agility.Core" AssemblyName = "Agility.Core" - HintPath = "..\..\Agility\Core\bin\Debug\Agility.Core.dll" + HintPath = "..\..\local-cache\Agility\Agility.Core.dll" + /> + <Reference + Name = "Core" + Project = "{7C8CAFD4-1E45-41B4-9963-F51199B12EA7}" + Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" /> </References> </Build> @@ -155,6 +150,21 @@ BuildAction = "EmbeddedResource" /> <File + RelPath = "GridControl.ascx" + BuildAction = "Content" + /> + <File + RelPath = "GridControl.ascx.cs" + DependentUpon = "GridControl.ascx" + SubType = "ASPXCodeBehind" + BuildAction = "Compile" + /> + <File + RelPath = "GridControl.ascx.resx" + DependentUpon = "GridControl.ascx.cs" + BuildAction = "EmbeddedResource" + /> + <File RelPath = "GridViewHelper.cs" SubType = "Code" BuildAction = "Compile" @@ -174,8 +184,28 @@ BuildAction = "Compile" /> <File + RelPath = "ViewControl.ascx" + BuildAction = "Content" + /> + <File + RelPath = "ViewControl.ascx.cs" + DependentUpon = "ViewControl.ascx" + SubType = "ASPXCodeBehind" + BuildAction = "Compile" + /> + <File + RelPath = "ViewControl.ascx.resx" + DependentUpon = "ViewControl.ascx.cs" + BuildAction = "EmbeddedResource" + /> + <File RelPath = "Web.config" BuildAction = "Content" + /> + <File + RelPath = "WebHelper.cs" + SubType = "Code" + BuildAction = "Compile" /> <File RelPath = "WebViewHelper.cs" Added: struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs?rev=280025&view=auto ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs (added) +++ struts/sandbox/trunk/overdrive/Nexus/Web/WebHelper.cs Sat Sep 10 12:04:14 2005 @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using System.Text; +using Nexus.Core.Helpers; + +namespace Nexus.Web +{ + /// <summary> + /// Summary description for WebHelper. + /// </summary> + public class WebHelper : ViewHelper + { + 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(); + } + + public override string ErrorsText + { + get { return HtmlMessageBuilder(Alerts); } + } + + public override string HintsText + { + get { return HtmlMessageBuilder(Hints); } + } + + #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]