зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
3318291f1b
Коммит
d60b7a4256
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче