LDAP addressbook code cleanup changes from John Marmion <john.marmion@ireland.sun.com> for bug 17879 review. r=dmose@netscape.com; sr=mscott@netscape.com

This commit is contained in:
dmose%netscape.com 2001-08-21 02:35:19 +00:00
Родитель 3318291f1b
Коммит d60b7a4256
5 изменённых файлов: 99 добавлений и 140 удалений

Просмотреть файл

@ -66,27 +66,27 @@ nsresult nsAbBoolExprToLDAPFilter::FilterExpression (
if (count == 0)
return NS_OK;
filter.Append ("(");
filter += NS_LITERAL_CSTRING("(");
switch (operation)
{
case nsIAbBooleanOperationTypes::AND:
filter.Append ("&");
filter += NS_LITERAL_CSTRING("&");
rv = FilterExpressions (childExpressions, filter, flags);
break;
case nsIAbBooleanOperationTypes::OR:
filter.Append ("|");
filter += NS_LITERAL_CSTRING("|");
rv = FilterExpressions (childExpressions, filter, flags);
break;
case nsIAbBooleanOperationTypes::NOT:
if (count > 1)
return NS_ERROR_FAILURE;
filter.Append ("!");
filter += NS_LITERAL_CSTRING("!");
rv = FilterExpressions (childExpressions, filter, flags);
break;
default:
break;
}
filter.Append (")");
filter += NS_LITERAL_CSTRING(")");
return rv;
}
@ -162,85 +162,77 @@ nsresult nsAbBoolExprToLDAPFilter::FilterCondition (
switch (conditionType)
{
case nsIAbBooleanConditionTypes::DoesNotExist:
filter.Append ("(!(");
filter.Append (ldapProperty);
filter.Append ("=*");
filter.Append ("))");
filter += NS_LITERAL_CSTRING("(!(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=*))");
break;
case nsIAbBooleanConditionTypes::Exists:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("=*");
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=*)");
break;
case nsIAbBooleanConditionTypes::Contains:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("=");
filter.Append ("*");
filter.Append (vUTF8);
filter.Append ("*");
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=*") +
vUTF8 +
NS_LITERAL_CSTRING("*)");
break;
case nsIAbBooleanConditionTypes::DoesNotContain:
filter.Append ("(!(");
filter.Append (ldapProperty);
filter.Append ("=");
filter.Append ("*");
filter.Append (vUTF8);
filter.Append ("*");
filter.Append ("))");
filter += NS_LITERAL_CSTRING("(!(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=*") +
vUTF8 +
NS_LITERAL_CSTRING("*))");
break;
case nsIAbBooleanConditionTypes::Is:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("=");
filter.Append (vUTF8);
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=") +
vUTF8 +
NS_LITERAL_CSTRING(")");
break;
case nsIAbBooleanConditionTypes::IsNot:
filter.Append ("(!(");
filter.Append (ldapProperty);
filter.Append ("=");
filter.Append (vUTF8);
filter.Append ("))");
filter += NS_LITERAL_CSTRING("(!(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=") +
vUTF8 +
NS_LITERAL_CSTRING("))");
break;
case nsIAbBooleanConditionTypes::BeginsWith:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("=");
filter.Append (vUTF8);
filter.Append ("*");
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=") +
vUTF8 +
NS_LITERAL_CSTRING("*)");
break;
case nsIAbBooleanConditionTypes::EndsWith:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("=");
filter.Append ("*");
filter.Append (vUTF8);
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("=*") +
vUTF8 +
NS_LITERAL_CSTRING(")");
break;
case nsIAbBooleanConditionTypes::LessThan:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("<=");
filter.Append (vUTF8);
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("<=") +
vUTF8 +
NS_LITERAL_CSTRING(")");
break;
case nsIAbBooleanConditionTypes::GreaterThan:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append (">=");
filter.Append (vUTF8);
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING(">=") +
vUTF8 +
NS_LITERAL_CSTRING(")");
break;
case nsIAbBooleanConditionTypes::SoundsLike:
filter.Append ("(");
filter.Append (ldapProperty);
filter.Append ("~=");
filter.Append (vUTF8);
filter.Append (")");
filter += NS_LITERAL_CSTRING("(") +
nsDependentCString(ldapProperty) +
NS_LITERAL_CSTRING("~=") +
vUTF8 +
NS_LITERAL_CSTRING(")");
break;
case nsIAbBooleanConditionTypes::RegExp:
break;

Просмотреть файл

@ -113,6 +113,9 @@ NS_IMETHODIMP nsAbLDAPDirFactory::CreateDirectory(
/* void deleteDirectory (in nsIAbDirectory directory); */
NS_IMETHODIMP nsAbLDAPDirFactory::DeleteDirectory(nsIAbDirectory *directory)
{
// No actual deletion - as the LDAP Address Book is not physically
// created in the corresponding CreateDirectory() unlike the Personal
// Address Books. But we still need to return NS_OK from here.
return NS_OK;
}

Просмотреть файл

@ -56,11 +56,8 @@ protected:
nsresult OnLDAPMessageSearchResult (nsILDAPMessage *aMessage,
nsIAbDirectoryQueryResult** result);
nsresult QueryMatch (nsISupportsArray* properties,
nsIAbDirectoryQueryResult** result);
nsresult QueryComplete (nsIAbDirectoryQueryResult** result);
nsresult QueryStopped (nsIAbDirectoryQueryResult** result);
nsresult QueryError (nsIAbDirectoryQueryResult** result);
nsresult QueryResultStatus (nsISupportsArray* properties,
nsIAbDirectoryQueryResult** result, PRUint32 resultStatus);
protected:
friend class nsAbLDAPDirectoryQuery;
@ -215,7 +212,7 @@ NS_IMETHODIMP nsAbQueryLDAPMessageListener::OnLDAPMessage(nsILDAPMessage *aMessa
if (mSearchOperation)
rv = mSearchOperation->Abandon ();
rv = QueryStopped (getter_AddRefs (queryResult));
rv = QueryResultStatus (nsnull, getter_AddRefs (queryResult), nsIAbDirectoryQueryResult::queryResultStopped);
}
if (queryResult)
@ -372,9 +369,8 @@ nsresult nsAbQueryLDAPMessageListener::OnLDAPMessageSearchEntry (nsILDAPMessage
if (!propertyValues)
return NS_OK;
return QueryMatch (propertyValues, result);
return QueryResultStatus (propertyValues, result,nsIAbDirectoryQueryResult::queryResultMatch);
}
nsresult nsAbQueryLDAPMessageListener::OnLDAPMessageSearchResult (nsILDAPMessage *aMessage,
nsIAbDirectoryQueryResult** result)
{
@ -386,21 +382,20 @@ nsresult nsAbQueryLDAPMessageListener::OnLDAPMessageSearchResult (nsILDAPMessage
NS_ENSURE_SUCCESS(rv, rv);
if (errorCode == nsILDAPErrors::SUCCESS || errorCode == nsILDAPErrors::SIZELIMIT_EXCEEDED)
rv = QueryComplete (result);
rv = QueryResultStatus (nsnull, result,nsIAbDirectoryQueryResult::queryResultComplete);
else
rv = QueryError (result);
rv = QueryResultStatus (nsnull, result, nsIAbDirectoryQueryResult::queryResultError);
return rv;
}
nsresult nsAbQueryLDAPMessageListener::QueryMatch (nsISupportsArray* properties,
nsIAbDirectoryQueryResult** result)
nsresult nsAbQueryLDAPMessageListener::QueryResultStatus (nsISupportsArray* properties,
nsIAbDirectoryQueryResult** result, PRUint32 resultStatus)
{
nsAbDirectoryQueryResult* _queryResult = new nsAbDirectoryQueryResult (
mContextID,
mQueryArguments,
nsIAbDirectoryQueryResult::queryResultMatch,
properties);
resultStatus,
(resultStatus == nsIAbDirectoryQueryResult::queryResultMatch) ? properties : 0);
if (_queryResult == NULL)
return NS_ERROR_OUT_OF_MEMORY;
@ -411,59 +406,6 @@ nsresult nsAbQueryLDAPMessageListener::QueryMatch (nsISupportsArray* properties,
return NS_OK;
}
nsresult nsAbQueryLDAPMessageListener::QueryComplete (nsIAbDirectoryQueryResult** result)
{
nsAbDirectoryQueryResult* _queryResult = new nsAbDirectoryQueryResult (
mContextID,
mQueryArguments,
nsIAbDirectoryQueryResult::queryResultComplete,
0);
if (_queryResult == NULL)
return NS_ERROR_OUT_OF_MEMORY;
*result = _queryResult;
NS_IF_ADDREF(*result);
return NS_OK;
}
nsresult nsAbQueryLDAPMessageListener::QueryStopped (nsIAbDirectoryQueryResult** result)
{
nsAbDirectoryQueryResult* _queryResult = new nsAbDirectoryQueryResult (
mContextID,
mQueryArguments,
nsIAbDirectoryQueryResult::queryResultStopped,
0);
if (_queryResult == NULL)
return NS_ERROR_OUT_OF_MEMORY;
*result = _queryResult;
NS_IF_ADDREF(*result);
return NS_OK;
}
nsresult nsAbQueryLDAPMessageListener::QueryError (nsIAbDirectoryQueryResult** result)
{
nsAbDirectoryQueryResult* _queryResult = new nsAbDirectoryQueryResult (
mContextID,
mQueryArguments,
nsIAbDirectoryQueryResult::queryResultError,
0);
if (_queryResult == NULL)
return NS_ERROR_OUT_OF_MEMORY;
*result = _queryResult;
NS_IF_ADDREF(*result);
return NS_OK;
}

Просмотреть файл

@ -165,23 +165,40 @@ MozillaLdapPropertyRelation mozillaLdapPropertyTable[] =
const MozillaLdapPropertyRelation* MozillaLdapPropertyRelator::table = mozillaLdapPropertyTable;
const int MozillaLdapPropertyRelator::tableSize = sizeof (mozillaLdapPropertyTable) / sizeof (MozillaLdapPropertyRelation);
PRBool MozillaLdapPropertyRelator::IsInitialized = PR_FALSE ;
nsHashtable MozillaLdapPropertyRelator::mMozillaToLdap;
nsHashtable MozillaLdapPropertyRelator::mLdapToMozilla;
void MozillaLdapPropertyRelator::Initialize(void)
{
if (IsInitialized) { return ; }
for (int i = tableSize - 1 ; i >= 0 ; -- i) {
nsCStringKey keyMozilla (table [i].mozillaProperty, -1, nsCStringKey::NEVER_OWN);
nsCStringKey keyLdap (table [i].ldapProperty, -1, nsCStringKey::NEVER_OWN);
mLdapToMozilla.Put(&keyLdap, NS_REINTERPRET_CAST(void *, NS_CONST_CAST(MozillaLdapPropertyRelation*, &table[i]))) ;
mMozillaToLdap.Put(&keyMozilla, NS_REINTERPRET_CAST(void *, NS_CONST_CAST(MozillaLdapPropertyRelation*, &table[i]))) ;
}
IsInitialized = PR_TRUE;
}
const MozillaLdapPropertyRelation* MozillaLdapPropertyRelator::findMozillaPropertyFromLdap (const char* ldapProperty)
{
for (int i = 0; i < tableSize; i++)
if (nsCRT::strcasecmp (ldapProperty, table[i].ldapProperty) == 0)
return &table[i];
Initialize();
nsCStringKey key (ldapProperty) ;
return NS_REINTERPRET_CAST(const MozillaLdapPropertyRelation *, mLdapToMozilla.Get(&key)) ;
return 0;
}
const MozillaLdapPropertyRelation* MozillaLdapPropertyRelator::findLdapPropertyFromMozilla (const char* mozillaProperty)
{
for (int i = 0; i < tableSize; i++)
if (nsCRT::strcasecmp (mozillaProperty, table[i].mozillaProperty) == 0)
return &table[i];
Initialize();
nsCStringKey key (mozillaProperty) ;
return NS_REINTERPRET_CAST(const MozillaLdapPropertyRelation *, mMozillaToLdap.Get(&key)) ;
return 0;
}
nsresult MozillaLdapPropertyRelator::createCardPropertyFromLDAPMessage (nsILDAPMessage* message,

Просмотреть файл

@ -30,6 +30,7 @@
#include "nsILDAPMessage.h"
#include "nsIAbCard.h"
#include "nsHashtable.h"
#include "ldap.h"
@ -57,10 +58,14 @@ class MozillaLdapPropertyRelator
public:
static const MozillaLdapPropertyRelation* table;
static const int tableSize;
static nsHashtable mLdapToMozilla ;
static nsHashtable mMozillaToLdap ;
static PRBool IsInitialized;
public:
static const MozillaLdapPropertyRelation* findMozillaPropertyFromLdap (const char* ldapProperty);
static const MozillaLdapPropertyRelation* findLdapPropertyFromMozilla (const char* mozillaProperty);
static void Initialize(void);
static nsresult createCardPropertyFromLDAPMessage (nsILDAPMessage* message,
nsIAbCard* card,