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.
465 lines
12 KiB
465 lines
12 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
|
|
{
|
|
public class Description
|
|
{
|
|
//
|
|
// Attribute: xml:lang
|
|
//
|
|
private string isoLangCode;
|
|
|
|
[XmlAttribute("xml:lang")]
|
|
public string IsoLangCode
|
|
{
|
|
get { return isoLangCode; }
|
|
set { isoLangCode = value; }
|
|
}
|
|
|
|
//
|
|
// Text
|
|
//
|
|
[XmlText]
|
|
public string Value;
|
|
|
|
public Description()
|
|
{
|
|
}
|
|
|
|
//
|
|
// 741019 - use the UDDI site language if one is not specified.
|
|
//
|
|
public Description( string description ) : this( Config.GetString( "Setup.WebServer.ProductLanguage", "en" ) , description )
|
|
{
|
|
}
|
|
|
|
public Description( string isoLangCode, string description )
|
|
{
|
|
IsoLangCode = isoLangCode;
|
|
Value = description;
|
|
}
|
|
|
|
public void Save( long parentID, EntityType parentType )
|
|
{
|
|
Debug.Enter();
|
|
|
|
SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();
|
|
|
|
switch( parentType )
|
|
{
|
|
case EntityType.Contact:
|
|
sp.ProcedureName = "net_contact_description_save";
|
|
|
|
sp.Parameters.Add( "@contactID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@contactID", parentID );
|
|
|
|
break;
|
|
|
|
case EntityType.TModelInstanceInfo:
|
|
sp.ProcedureName = "net_bindingTemplate_tModelInstanceInfo_description_save";
|
|
|
|
sp.Parameters.Add( "@instanceID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@instanceID", parentID );
|
|
|
|
break;
|
|
|
|
case EntityType.InstanceDetail:
|
|
sp.ProcedureName = "net_bindingTemplate_instanceDetails_description_save";
|
|
|
|
sp.Parameters.Add( "@instanceID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@instanceID", parentID );
|
|
|
|
break;
|
|
|
|
case EntityType.InstanceDetailOverviewDoc:
|
|
sp.ProcedureName = "net_bindingTemplate_instanceDetails_overviewDoc_description_save";
|
|
|
|
sp.Parameters.Add( "@instanceID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@instanceID", parentID );
|
|
|
|
break;
|
|
|
|
default:
|
|
throw new UDDIException( ErrorType.E_fatalError, "UDDI_ERROR_FATALERROR_DESCRPTION_INVALIDPARENTTYPE" , parentType.ToString() );
|
|
}
|
|
|
|
sp.Parameters.Add( "@isoLangCode", SqlDbType.VarChar, UDDI.Constants.Lengths.IsoLangCode );
|
|
sp.Parameters.Add( "@description", SqlDbType.NVarChar, UDDI.Constants.Lengths.Description );
|
|
|
|
sp.Parameters.SetString( "@isoLangCode", IsoLangCode );
|
|
sp.Parameters.SetString( "@description", Value );
|
|
|
|
sp.ExecuteNonQuery();
|
|
|
|
Debug.Leave();
|
|
}
|
|
|
|
public void Save( string parentKey, EntityType parentType )
|
|
{
|
|
Debug.Enter();
|
|
|
|
SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();
|
|
|
|
switch( parentType )
|
|
{
|
|
case EntityType.BusinessEntity:
|
|
sp.ProcedureName = "net_businessEntity_description_save";
|
|
|
|
sp.Parameters.Add( "@businessKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromString( "@businessKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.BusinessService:
|
|
sp.ProcedureName = "net_businessService_description_save";
|
|
|
|
sp.Parameters.Add( "@serviceKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromString( "@serviceKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.BindingTemplate:
|
|
sp.ProcedureName = "net_bindingTemplate_description_save";
|
|
|
|
sp.Parameters.Add( "@bindingKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromString( "@bindingKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.TModel:
|
|
sp.ProcedureName = "net_tModel_description_save";
|
|
|
|
sp.Parameters.Add( "@tModelKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromKey( "@tModelKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.TModelOverviewDoc:
|
|
sp.ProcedureName = "net_tModel_overviewDoc_description_save";
|
|
|
|
sp.Parameters.Add( "@tModelKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromKey( "@tModelKey", parentKey );
|
|
|
|
break;
|
|
|
|
default:
|
|
throw new UDDIException( ErrorType.E_fatalError, "UDDI_ERROR_FATALERROR_DESCRPTION_INVALIDPARENTTYPE" , parentType.ToString() );
|
|
}
|
|
|
|
sp.Parameters.Add( "@isoLangCode", SqlDbType.VarChar, UDDI.Constants.Lengths.IsoLangCode );
|
|
sp.Parameters.Add( "@description", SqlDbType.NVarChar, UDDI.Constants.Lengths.Description );
|
|
|
|
sp.Parameters.SetString( "@isoLangCode", IsoLangCode );
|
|
sp.Parameters.SetString( "@description", Value );
|
|
|
|
sp.ExecuteNonQuery();
|
|
|
|
Debug.Leave();
|
|
}
|
|
}
|
|
|
|
public class DescriptionCollection : CollectionBase
|
|
{
|
|
public DescriptionCollection()
|
|
{
|
|
}
|
|
|
|
public void Get( int parentID, EntityType parentType )
|
|
{
|
|
Debug.Enter();
|
|
|
|
SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();
|
|
|
|
switch( parentType )
|
|
{
|
|
case EntityType.Contact:
|
|
sp.ProcedureName = "net_contact_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@contactID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@contactID", parentID );
|
|
|
|
break;
|
|
|
|
case EntityType.TModelInstanceInfo:
|
|
sp.ProcedureName = "net_bindingTemplate_tModelInstanceInfo_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@instanceID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@instanceID", parentID );
|
|
|
|
break;
|
|
|
|
case EntityType.InstanceDetail:
|
|
sp.ProcedureName = "net_bindingTemplate_instanceDetails_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@instanceID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@instanceID", parentID );
|
|
|
|
break;
|
|
|
|
case EntityType.InstanceDetailOverviewDoc:
|
|
sp.ProcedureName = "net_bindingTemplate_instanceDetails_overviewDoc_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@instanceID", SqlDbType.BigInt );
|
|
sp.Parameters.SetLong( "@instanceID", parentID );
|
|
|
|
break;
|
|
|
|
default:
|
|
throw new UDDIException( ErrorType.E_fatalError, "UDDI_ERROR_FATALERROR_DESCRPTION_INVALIDPARENTTYPE" , parentType.ToString() );
|
|
}
|
|
|
|
SqlDataReaderAccessor reader = sp.ExecuteReader();
|
|
|
|
try
|
|
{
|
|
Read( reader );
|
|
#if never
|
|
while( reader.Read() )
|
|
{
|
|
Add( reader.GetString( "isoLangCode" ),
|
|
reader.GetString( "description" ) );
|
|
}
|
|
#endif
|
|
}
|
|
finally
|
|
{
|
|
reader.Close();
|
|
}
|
|
|
|
Debug.Leave();
|
|
}
|
|
|
|
public void Get( string parentKey, EntityType parentType )
|
|
{
|
|
Debug.Enter();
|
|
|
|
SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();
|
|
|
|
switch( parentType )
|
|
{
|
|
case EntityType.BusinessEntity:
|
|
sp.ProcedureName = "net_businessEntity_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@businessKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromString( "@businessKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.BusinessService:
|
|
sp.ProcedureName = "net_businessService_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@serviceKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromString( "@serviceKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.BindingTemplate:
|
|
sp.ProcedureName = "net_bindingTemplate_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@bindingKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromString( "@bindingKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.TModel:
|
|
sp.ProcedureName = "net_tModel_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@tModelKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromKey( "@tModelKey", parentKey );
|
|
|
|
break;
|
|
|
|
case EntityType.TModelOverviewDoc:
|
|
sp.ProcedureName = "net_tModel_overviewDoc_descriptions_get";
|
|
|
|
sp.Parameters.Add( "@tModelKey", SqlDbType.UniqueIdentifier );
|
|
sp.Parameters.SetGuidFromKey( "@tModelKey", parentKey );
|
|
|
|
break;
|
|
|
|
default:
|
|
throw new UDDIException( ErrorType.E_fatalError, "UDDI_ERROR_FATALERROR_DESCRPTION_INVALIDPARENTTYPE", parentType.ToString() );
|
|
}
|
|
|
|
SqlDataReaderAccessor reader = sp.ExecuteReader();
|
|
|
|
try
|
|
{
|
|
Read( reader );
|
|
#if never
|
|
while( reader.Read() )
|
|
{
|
|
Add( reader.GetString( "isoLangCode" ),
|
|
reader.GetString( "description" ) );
|
|
}
|
|
#endif
|
|
}
|
|
finally
|
|
{
|
|
reader.Close();
|
|
}
|
|
|
|
Debug.Leave();
|
|
}
|
|
|
|
public void Read( SqlDataReaderAccessor reader )
|
|
{
|
|
while( reader.Read() )
|
|
{
|
|
Add( reader.GetString( "isoLangCode" ),
|
|
reader.GetString( "description" ) );
|
|
}
|
|
}
|
|
|
|
internal void Validate()
|
|
{
|
|
int maxLength = UDDI.Constants.Lengths.Description;
|
|
int count = this.Count;
|
|
bool languageAssigned = false;
|
|
|
|
for( int i = 0; i < count; i ++ )
|
|
{
|
|
//
|
|
// Validate the description string length.
|
|
//
|
|
Utility.ValidateLength( ref this[ i ].Value, "description", maxLength );
|
|
|
|
//
|
|
// Validate the language code. If one was not specified,
|
|
// we'll use the publisher's default language.
|
|
//
|
|
if( Utility.StringEmpty( this[ i ].IsoLangCode ) )
|
|
{
|
|
//
|
|
// Only one description can have an unassigned language.
|
|
//
|
|
if( languageAssigned )
|
|
{
|
|
throw new UDDIException(
|
|
ErrorType.E_languageError,
|
|
"UDDI_ERROR_LANGUAGEERROR_MULTIPLEBLANKLANG" );
|
|
}
|
|
|
|
languageAssigned = true;
|
|
|
|
//
|
|
// Fix: Bug 2340 9/9/2002, creeves
|
|
//
|
|
|
|
// if( i > 0 )
|
|
// {
|
|
// throw new UDDIException(
|
|
// ErrorType.E_languageError,
|
|
// "Only the first description can have a blank or missing xml:lang attribute. All other descriptions must have a valid xml:lang attribute." );
|
|
// }
|
|
|
|
this[ i ].IsoLangCode = Context.User.IsoLangCode;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Fix: Bug 2397, 9/16/2002, a-kirkma
|
|
//
|
|
// Split loops and fill in default IsoLangCode first (if needed),
|
|
// then look for repeated languages
|
|
//
|
|
for( int i = 0; i < count; i ++ )
|
|
{
|
|
//
|
|
// Check to make sure there is only one description
|
|
// per language.
|
|
//
|
|
string isoLangCode = this[ i ].IsoLangCode;
|
|
|
|
Debug.Write( SeverityType.Info, CategoryType.Data, "Description[" + i + "]: " + this[ i ].Value + ", IsoLangCode: " + isoLangCode );
|
|
|
|
for( int j = i + 1; j < count; j ++ )
|
|
{
|
|
if (false == Utility.StringEmpty(this[ j ].IsoLangCode)
|
|
&& isoLangCode.ToLower() == this[ j ].IsoLangCode.ToLower() )
|
|
{
|
|
Debug.Write( SeverityType.Info, CategoryType.Data, "Error: Description[" + j + "]: " + this[ j ].Value + ", IsoLangCode " + this[ j ].IsoLangCode + " matches IsoLangCode[" + i + "]: " + isoLangCode );
|
|
|
|
throw new UDDIException(
|
|
ErrorType.E_languageError,
|
|
"UDDI_ERROR_LANGUAGEERROR_MULTIPLESAMELANG",isoLangCode );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Save( long ID, EntityType parentType )
|
|
{
|
|
Debug.Enter();
|
|
|
|
foreach( Description desc in this )
|
|
desc.Save( ID, parentType );
|
|
|
|
Debug.Leave();
|
|
}
|
|
|
|
public void Save( string key, EntityType parentType )
|
|
{
|
|
Debug.Enter();
|
|
|
|
foreach( Description desc in this )
|
|
desc.Save( key, parentType );
|
|
|
|
Debug.Leave();
|
|
}
|
|
|
|
public Description this[int index]
|
|
{
|
|
get
|
|
{ return (Description)List[index]; }
|
|
set
|
|
{ List[index] = value; }
|
|
}
|
|
|
|
public int Add(Description value)
|
|
{
|
|
return List.Add(value);
|
|
}
|
|
|
|
public int Add(string value)
|
|
{
|
|
return List.Add( new Description(value) );
|
|
}
|
|
|
|
public int Add(string isoLangCode, string description)
|
|
{
|
|
return List.Add( new Description(isoLangCode, description) );
|
|
}
|
|
|
|
public void Insert(int index, Description value)
|
|
{
|
|
List.Insert(index, value);
|
|
}
|
|
|
|
public int IndexOf(Description value)
|
|
{
|
|
return List.IndexOf(value);
|
|
}
|
|
|
|
public bool Contains(Description value)
|
|
{
|
|
return List.Contains(value);
|
|
}
|
|
|
|
public void Remove(Description value)
|
|
{
|
|
List.Remove(value);
|
|
}
|
|
|
|
public void CopyTo(Description[] array, int index)
|
|
{
|
|
List.CopyTo(array, index);
|
|
}
|
|
}
|
|
}
|