using System; using System.Data; using System.Data.SqlClient; using System.IO; using System.Collections; using System.Xml.Serialization; using UDDI; using UDDI.Diagnostics; using UDDI.Replication; namespace UDDI.Web { /// /// Summary description for oepratorsearchcontrols. /// [ XmlRoot( "changeRecordCache" ) ] public class ChangeRecordsSessionCache { public ChangeRecordsSessionCache() { } private string key;//=Guid.NewGuid().ToString(); [ XmlAttribute( "key" ) ] public string Key { get{ return key; } set{ key=value; } } private FindChangeRecordsHelper findCache; [ XmlElement( "findChangeRecordCache" ) ] public FindChangeRecordsHelper FindCache { get { if( null==findCache ) { findCache = new FindChangeRecordsHelper(); } return findCache; } } private GetChangeRecords getCache; [ XmlElement( "getChangeRecordCache" ) ] public GetChangeRecords GetCache { get{ return getCache; } set{ getCache = (GetChangeRecords)value; } } private ChangeRecordDetail changes; [XmlIgnore] public ChangeRecordDetail Changes { get{ return changes; } } private ChangeRecordVectorCollection changelist; [XmlIgnore] public ChangeRecordVectorCollection ChangeList { get{ return changelist; } } public void GetChanges() { if( null!=GetCache ) { changes = GetCache.Get(); } } public void FindChanges() { } public void SaveCache() { Debug.Enter(); // // Serialize the data into a stream. // XmlSerializer serializer = new XmlSerializer( this.GetType() ); StringWriter writer = new StringWriter(); serializer.Serialize( writer, this ); // // Write the cache object to the database. // SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor( "UI_setSessionCache" ); sp.Parameters.Add( "@PUID", SqlDbType.NVarChar ); sp.Parameters.Add( "@cacheValue", SqlDbType.NText ); sp.Parameters.Add( "@context", SqlDbType.NVarChar ); sp.Parameters.SetString( "@PUID",Key ); sp.Parameters.SetString( "@cacheValue",writer.ToString() ); sp.Parameters.SetString( "@context","ReplicationServer" ); sp.ExecuteNonQuery(); sp.Close(); writer.Close(); Debug.Leave(); } public static ChangeRecordsSessionCache RetrieveCache( string key ) { ChangeRecordsSessionCache session = RetrieveCacheFromDB( key ); return session; } protected static ChangeRecordsSessionCache RetrieveCacheFromDB( string key ) { Debug.Enter(); // // Retrieve the cache object from the database. // string data = ""; SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor( "UI_getSessionCache" ); sp.Parameters.Add( "@PUID", SqlDbType.NVarChar ); sp.Parameters.Add( "@context", SqlDbType.NVarChar ); sp.Parameters.SetString( "@PUID" , key ); sp.Parameters.SetString("@context" , "ReplicationServer" ); data = (string)sp.ExecuteScalar(); // // Deserialize into a cache object. // ChangeRecordsSessionCache cache = null; if( !Utility.StringEmpty( data ) ) { XmlSerializer serializer = new XmlSerializer( typeof( ChangeRecordsSessionCache ) ); StringReader reader = new StringReader( data ); cache = (ChangeRecordsSessionCache)serializer.Deserialize( reader ); cache.Key = key; } Debug.Leave(); return cache; } } [XmlRoot( "findChangeRecordCache" )] public class FindChangeRecordsHelper { public FindChangeRecordsHelper() { } [ XmlAttribute( "startUSN" ) ] protected long StartUSN; [ XmlAttribute( "endUSN" ) ] protected long EndUSN; [ XmlAttribute( "maxRows" ) ] protected long MaxRows; [ XmlAttribute( "operatorID" ) ] protected string OperatorNodeID; private FindFilterCollection filters; [ XmlArray( "filters" ), XmlArrayItem( "filter" ) ] public FindFilterCollection Filters { get{ return filters; } set{ filters=(FindFilterCollection)value; } } public ChangeRecordCollection GetChangeRecords( ) { ChangeRecordCollection crc = new ChangeRecordCollection(); return crc; } } [ XmlRoot( "filters" ) ] public class FindFilterCollection : CollectionBase { public FindFilter this[ int index ] { get{ return (FindFilter)this.List[ index ]; } set{ this.List[ index] = value; } } public FindFilter Add( string field, FilterOperator oper, string val ) { return this.Add( field, oper, val, ( (this.Count > 0) ? FilterConjuctionOperator.And : FilterConjuctionOperator.None ) ); } public FindFilter Add( string field, FilterOperator oper, string val, FilterConjuctionOperator conj ) { return this.Add( new FindFilter( field,oper, val, conj ) ); } public FindFilter Add( FindFilter filter ) { this.List.Add( filter ); return filter; } public void Remove( int index ) { this.List.RemoveAt( index ); } public void Remove( FindFilter filter ) { this.List.Remove( filter ); } public FindFilter Insert( int index, FindFilter filter ) { this.List.Insert( index, filter ); return filter; } public string GetFullFilterString() { string fullstring = ""; foreach( FindFilter filter in this ) { fullstring += filter.GetFilterString(); } return fullstring; } } [ XmlRoot( "filter" ) ] public class FindFilter { public FindFilter( string field, FilterOperator oper, string val, FilterConjuctionOperator conj ) { this.fieldname = field; this.filteroperator = oper; this.filtervalue = val; this.conjuction = conj; } [ XmlAttribute( "conjuction" ) ] protected FilterConjuctionOperator conjuction; public FilterConjuctionOperator Conjuction { get{ return conjuction; } } [ XmlAttribute( "fieldName" ) ] protected string fieldname; public string FieldName { get{ return fieldname; } } [ XmlAttribute( "operator" ) ] protected FilterOperator filteroperator; public FilterOperator Operator { get{ return filteroperator; } } [ XmlText ] protected string filtervalue; public string FilterValue { get{ return filtervalue; } } protected bool Validate() { return ( IsValidFieldName() && IsValidOperator() && IsValidValue() ); } bool IsValidOperator() { return true; } bool IsValidValue() { return true; } bool IsValidFieldName() { return true; } // // TODO: Maybe make this a readonly property instead // and genarte the this string in the ctor. // public string GetFilterString() { string filter = ""; if( Validate() ) { // //if it is a valid filter, then fill the string. // //set the fielname filter = this.FieldName + " "; //set the operator filter+=GetFilterOperatorString(); //set the value filter += GetFilterValueString(); //set the conjuction operator filter += GetFilterConjuctionString(); } return filter; } protected string GetFilterConjuctionString() { string conj = ""; switch( this.Conjuction ) { case FilterConjuctionOperator.And: conj = " AND "; break; case FilterConjuctionOperator.AndNot: conj = " AND NOT "; break; case FilterConjuctionOperator.Or: conj = " OR "; break; case FilterConjuctionOperator.OrNot: conj = " OR NOT "; break; } return conj; } protected string GetFilterValueString() { string val = "'"; if( FilterOperator.Contains==this.Operator ) { val += "*" + this.FilterValue + "*"; } else { val += this.FilterValue ; } val += "'"; return val; } protected string GetFilterOperatorString() { switch( this.Operator ) { case FilterOperator.EqualTo: return " = "; case FilterOperator.NotEqualTo: return " <> "; case FilterOperator.LessThan: return " < "; case FilterOperator.GreaterThan: return " > "; case FilterOperator.Contains: return " LIKE "; default: return ""; } } } public enum FilterOperator { [ XmlEnum( "equalTo" ) ] EqualTo, [ XmlEnum( "notEqualTo" ) ] NotEqualTo, [ XmlEnum( "greaterThan" ) ] GreaterThan, [ XmlEnum( "lessThan" ) ] LessThan, [ XmlEnum( "contains" ) ] Contains } public enum FilterConjuctionOperator { [ XmlEnum( "" ) ] None, [ XmlEnum( "and" ) ] And, [ XmlEnum( "andNot" ) ] AndNot, [ XmlEnum( "or" ) ] Or, [ XmlEnum( "orNot" ) ] OrNot } }