using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using UDDI; using UDDI.API.Business; using UDDI.API.Service; using UDDI.API.ServiceType; namespace UDDI.Web { public delegate void SelectEventHandler( object sender, string key, string name ); public abstract class SelectionControl : UserControl { public event SelectEventHandler Select; protected Panel resultsPanel = null; protected TextBox query = null; protected DataGrid grid = null; protected Label count = null; protected RequiredFieldValidator requiredField = null; public SelectionControl() { } public void ResetControl() { resultsPanel.Visible = false; } protected override void OnInit( EventArgs e ) { requiredField.ErrorMessage = Localization.GetString( "ERROR_FIELD_REQUIRED" ); } protected void Grid_OnItemCommand( object sender, DataGridCommandEventArgs e ) { switch( e.CommandName ) { case "select": OnSelect( this, e ); break; } } protected void Grid_OnPageIndexChange( object sender, DataGridPageChangedEventArgs e ) { Page.Validate(); if( Page.IsValid ) { grid.CurrentPageIndex = e.NewPageIndex; OnSearch( this, query.Text ); } } protected void Search_OnClick( object sender, EventArgs e ) { Page.Validate(); if( Page.IsValid ) { OnSearch( this, query.Text ); } } protected virtual void OnSelect( object sender, DataGridCommandEventArgs e ) { switch( e.CommandName ) { case "select": string key = ((UddiLabel)e.Item.Cells[ 0 ].FindControl( "key" )).Text; string name = ((LinkButton)e.Item.Cells[ 1 ].FindControl( "name" )).Text; name = HttpUtility.HtmlDecode( name ); if( null != Select ) Select( this, key, name ); break; } } protected virtual void OnSearch( object sender, string query ) { resultsPanel.Visible = true; } } public class PublisherSelector : SelectionControl { public PublisherSelector() { } protected override void OnSearch( object sender, string query ) { base.OnSearch( sender, query ); if( query.IndexOf( "%" ) < 0 ) query += "%"; SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor(); DataSet ds = new DataSet(); sp.ProcedureName = "ADM_findPublisher"; sp.Parameters.Add( "@name", SqlDbType.NVarChar, UDDI.Constants.Lengths.Name ); sp.Parameters.SetString( "@name", query ); sp.Fill( ds, "Publishers" ); if( null != ds.Tables[ "Publishers" ] ) { DataView view; // // To eliminate the system account from the list // we should not do it this way. we should change the SP to accept a role // and then elimiate the rows before they placed in the DataSet. // // // If the user is an Admin, don't filter the data // if( UDDI.Context.User.IsAdministrator ) { view = ds.Tables[ "Publishers" ].DefaultView; } else { view = new DataView( ds.Tables[ "Publishers" ],//use the publisher table "PUID <> 'System'", //filter by puid. "name", //name is the sort column DataViewRowState.CurrentRows ); // Show all current rows after filtering } grid.DataSource = view; grid.DataBind(); count.Text = String.Format( Localization.GetString( "TEXT_QUERY_COUNT" ), view.Count ); } else { grid.DataSource = null; grid.DataBind(); count.Text = String.Format( Localization.GetString( "TEXT_QUERY_COUNT" ), 0 ); } } } public class TModelSelector : SelectionControl { public TModelSelector() { } protected override void OnSearch( object sender, string query ) { base.OnSearch( sender, query ); if( query.IndexOf( "%" ) < 0 ) query += "%"; FindTModel find = new FindTModel(); find.Name = query; TModelList list = find.Find(); grid.DataSource = list.TModelInfos; grid.DataBind(); count.Text = String.Format( Localization.GetString( "TEXT_QUERY_COUNT" ), list.TModelInfos.Count ); } } public class BusinessSelector : SelectionControl { public BusinessSelector() { } protected override void OnSearch( object sender, string query ) { if( null == query ) return; query = query.Trim(); if( 0 == query.Length ) return; base.OnSearch( sender, query ); if( query.IndexOf( "%" ) < 0 ) query += "%"; FindBusiness find = new FindBusiness(); find.Names.Add( null, query ); BusinessList list = find.Find(); grid.DataSource = list.BusinessInfos; grid.DataBind(); count.Text = String.Format( Localization.GetString( "TEXT_QUERY_COUNT" ), list.BusinessInfos.Count ); } } public class ServiceSelector : SelectionControl { public ServiceSelector() { } protected override void OnSearch( object sender, string query ) { if( null == query ) return; query = query.Trim(); if( 0 == query.Length ) return; base.OnSearch( sender, query ); if( query.IndexOf( "%" ) < 0 ) query += "%"; FindService find = new FindService(); find.Names.Add( null, query ); ServiceList list = find.Find(); grid.DataSource = list.ServiceInfos; grid.DataBind(); count.Text = String.Format( Localization.GetString( "TEXT_QUERY_COUNT" ), list.ServiceInfos.Count ); } } }