Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

475 lines
10 KiB

using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
using System.Xml.Serialization;
using UDDI;
using UDDI.Diagnostics;
namespace UDDI.API.Business
{
public class Contact
{
//
// Attribute: useType
//
[ XmlAttribute( "useType" ) ]
public string UseType;
//
// Element: description
//
private DescriptionCollection descriptions;
[ XmlElement( "description" ) ]
public DescriptionCollection Descriptions
{
get
{
if( null == descriptions )
descriptions = new DescriptionCollection();
return descriptions;
}
set { descriptions = value; }
}
//
// Element: personName
//
[ XmlElement( "personName" ) ]
public string PersonName
{
get{ return personName; }
set{ personName = value; }
}
private string personName;
//
// Element: phone
//
private PhoneCollection phones;
[ XmlElement( "phone" ) ]
public PhoneCollection Phones
{
get
{
if( null == phones )
phones = new PhoneCollection();
return phones;
}
set { phones = value; }
}
//
// Element: email
//
private EmailCollection emails;
[ XmlElement( "email" ) ]
public EmailCollection Emails
{
get
{
if( null == emails )
emails = new EmailCollection();
return emails;
}
set { emails = value; }
}
//
// Element: address
//
private AddressCollection addresses;
[ XmlElement( "address" ) ]
public AddressCollection Addresses
{
get
{
if( null == addresses )
addresses = new AddressCollection();
return addresses;
}
set { addresses = value; }
}
public Contact()
{
}
public Contact( string personName, string useType )
{
PersonName = personName;
UseType = useType;
}
internal void Validate()
{
Debug.Enter();
Utility.ValidateLength( ref UseType, "useType", UDDI.Constants.Lengths.UseType );
Utility.ValidateLength( ref personName, "personName", UDDI.Constants.Lengths.PersonName );
Descriptions.Validate();
Emails.Validate();
Phones.Validate();
Addresses.Validate();
Debug.Leave();
}
public void Save( string businessKey )
{
//
// Create a command object to invoke the stored procedure
//
SqlCommand cmd = new SqlCommand( "net_businessEntity_contact_save", ConnectionManager.GetConnection() );
cmd.Transaction = ConnectionManager.GetTransaction();
cmd.CommandType = CommandType.StoredProcedure;
//
// Parameters
//
cmd.Parameters.Add( new SqlParameter( "@businessKey", SqlDbType.UniqueIdentifier ) ).Direction = ParameterDirection.Input;
cmd.Parameters.Add( new SqlParameter( "@useType", SqlDbType.NVarChar, UDDI.Constants.Lengths.UseType ) ).Direction = ParameterDirection.Input;
cmd.Parameters.Add( new SqlParameter( "@personName", SqlDbType.NVarChar, UDDI.Constants.Lengths.PersonName ) ).Direction = ParameterDirection.Input;
cmd.Parameters.Add( new SqlParameter( "@contactID", SqlDbType.BigInt ) ).Direction = ParameterDirection.Output;
//
// Set parameter values and execute query
//
SqlParameterAccessor parmacc = new SqlParameterAccessor( cmd.Parameters );
parmacc.SetGuidFromString( "@businessKey", businessKey );
parmacc.SetString( "@personName", PersonName );
parmacc.SetString( "@useType", UseType );
cmd.ExecuteScalar();
//
// Move out parameters into local variables
//
long ContactID = parmacc.GetLong( "@contactID" );
//
// Save sub-objects
//
Descriptions.Save( ContactID, EntityType.Contact );
Phones.Save( ContactID );
Emails.Save( ContactID );
Addresses.Save( ContactID );
}
public void Get( int contactId )
{
SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor( "net_businessEntity_contact_get_batch" );
sp.Parameters.Add( "@contactId", SqlDbType.BigInt );
sp.Parameters.SetLong( "@contactId", contactId );
SqlDataReaderAccessor reader = null;
ArrayList addressIDs = new ArrayList();
try
{
//
// net_businessEntity_contact_get_batch will return the objects contained in a business in the following order:
//
// - descriptions
// - phones
// - emails
// - addresses
reader = sp.ExecuteReader();
//
// Read the descriptions
//
Descriptions.Read( reader );
//
// Read the phones
//
if ( true == reader.NextResult() )
{
Phones.Read( reader );
}
//
// Read the emails
//
if ( true == reader.NextResult() )
{
Emails.Read( reader );
}
//
// Read the addresses
//
if ( true == reader.NextResult() )
{
addressIDs = Addresses.Read( reader );
}
}
finally
{
if( reader != null )
{
reader.Close();
}
}
//
// These calls will make separate sproc calls, so we have to close our reader first.
//
Addresses.Populate( addressIDs );
#if never
//
// Call get method on sub-objects personName and UseType
// should have been populate by contacts.get() method;
//
Descriptions.Get( contactId, EntityType.Contact );
Phones.Get( contactId );
Emails.Get( contactId );
Addresses.Get( contactId );
#endif
}
}
public class ContactCollection : CollectionBase
{
internal void Validate()
{
foreach( Contact c in this )
{
c.Validate();
}
}
public void Save( string businessKey )
{
//
// Walk collection and call save on individual contact instances
//
foreach( Contact c in this )
{
c.Save( businessKey );
}
}
public void Get( string businessKey )
{
//
// Create a command object to invoke the stored procedure net_get_contacts
//
SqlStoredProcedureAccessor cmd = new SqlStoredProcedureAccessor( "net_businessEntity_contacts_get" );
//
// Input parameters
//
cmd.Parameters.Add( "@businessKey", SqlDbType.UniqueIdentifier, ParameterDirection.Input );
cmd.Parameters.SetGuidFromString( "@businessKey", businessKey );
//
// Run the stored procedure
//
SqlDataReaderAccessor reader = cmd.ExecuteReader();
ArrayList contactIds = null;
try
{
contactIds = Read( reader );
}
finally
{
reader.Close();
}
Populate( contactIds );
#if never
const int ContactIdIndex = 0;
const int UseTypeIndex = 1;
const int PersonNameIndex = 2;
ArrayList contactIds = new ArrayList();
//
// Create a command object to invoke the stored procedure net_get_contacts
//
SqlCommand cmd = new SqlCommand( "net_businessEntity_contacts_get", ConnectionManager.GetConnection() );
cmd.Transaction = ConnectionManager.GetTransaction();
cmd.CommandType = CommandType.StoredProcedure;
//
// Input parameters
//
cmd.Parameters.Add( new SqlParameter( "@businessKey", SqlDbType.UniqueIdentifier ) ).Direction = ParameterDirection.Input;
//
// Set parameter values
//
SqlParameterAccessor populator = new SqlParameterAccessor( cmd.Parameters );
populator.SetGuidFromString( "@businessKey", businessKey );
//
// Run the stored procedure
//
SqlDataReader rdr = cmd.ExecuteReader();
try
{
SqlDataReaderAccessor dracc = new SqlDataReaderAccessor( rdr );
//
// The contacts will be contained in the result set
//
while( rdr.Read() )
{
//
// construct a new contact from the data in this row, fully populate contact and add to collection
//
Add( new Contact( dracc.GetString( PersonNameIndex ), dracc.GetString( UseTypeIndex ) ) );
contactIds.Add( dracc.GetInt( ContactIdIndex ) );
}
}
finally
{
rdr.Close();
}
int i = 0;
foreach( Contact contact in this )
{
contact.Get( (int) contactIds[ i++ ] );
}
#endif
}
public ArrayList Read( SqlDataReaderAccessor reader )
{
const int ContactIdIndex = 0;
const int UseTypeIndex = 1;
const int PersonNameIndex = 2;
ArrayList contactIds = new ArrayList();
//
// The contacts will be contained in the result set
//
while( reader.Read() )
{
//
// construct a new contact from the data in this row, fully populate contact and add to collection
//
contactIds.Add( reader.GetInt( ContactIdIndex ) );
Add( new Contact( reader.GetString( PersonNameIndex ), reader.GetString( UseTypeIndex ) ) );
}
return contactIds;
}
public void Populate( ArrayList contactIds )
{
int i = 0;
foreach( Contact contact in this )
{
contact.Get( (int) contactIds[ i++ ] );
}
}
public Contact this[ int index ]
{
get { return ( Contact)List[index]; }
set { List[ index ] = value; }
}
public int Add()
{
return List.Add( new Contact() );
}
public int Add( string personName )
{
return List.Add( new Contact( personName, null ) );
}
public int Add( string personName, string useType )
{
return List.Add( new Contact( personName, useType ) );
}
public int Add( Contact value )
{
return List.Add( value );
}
public void Insert( int index, Contact value )
{
List.Insert( index, value );
}
public int IndexOf( Contact value )
{
return List.IndexOf( value );
}
public bool Contains( Contact value )
{
return List.Contains( value );
}
public void Remove( Contact value )
{
List.Remove( value );
}
public void CopyTo( Contact[] array )
{
foreach( Contact contact in array )
Add( contact );
}
public Contact[] ToArray()
{
return (Contact[])InnerList.ToArray( typeof( Contact ) );
}
public void Sort()
{
InnerList.Sort( new ContactComparer() );
}
internal class ContactComparer : IComparer
{
public int Compare( object x, object y )
{
Contact entity1 = (Contact)x;
Contact entity2 = (Contact)y;
//
// Check for null PersonName.
//
if( null==entity1.PersonName && null==entity2.PersonName )
return 0;
else if( null==entity1.PersonName )
return -1;
else if( null==entity2.PersonName )
return 1;
else
return string.Compare( entity1.PersonName, entity2.PersonName, true );
}
}
}
}