office-gobmx/connectivity/source/drivers/mozab/mozillasrc/MNameMapper.cxx
2011-12-15 16:38:50 +00:00

141 lines
4.1 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include <MNameMapper.hxx>
#if OSL_DEBUG_LEVEL > 0
# define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr())
#else /* OSL_DEBUG_LEVEL */
# define OUtoCStr( x ) ("dummy")
#endif /* OSL_DEBUG_LEVEL */
using namespace connectivity::mozab;
bool
MNameMapper::ltstr::operator()( const ::rtl::OUString &s1, const ::rtl::OUString &s2) const
{
return s1.compareTo(s2) < 0;
}
MNameMapper::MNameMapper()
{
mDirMap = new MNameMapper::dirMap;
mUriMap = new MNameMapper::uriMap;
}
MNameMapper::~MNameMapper()
{
clear();
}
void MNameMapper::reset()
{
clear();
mDirMap = new MNameMapper::dirMap;
mUriMap = new MNameMapper::uriMap;
}
void MNameMapper::clear()
{
if ( mUriMap != NULL ) {
delete mUriMap;
}
if ( mDirMap != NULL ) {
MNameMapper::dirMap::iterator iter;
for (iter = mDirMap -> begin(); iter != mDirMap -> end(); ++iter) {
NS_IF_RELEASE(((*iter).second));
}
delete mDirMap;
}
}
const char * getURI(const nsIAbDirectory* directory)
{
nsresult retCode;
nsCOMPtr<nsIRDFResource> rdfResource = do_QueryInterface((nsISupports *)directory, &retCode) ;
if (NS_FAILED(retCode)) { return NULL; }
const char * uri;
retCode=rdfResource->GetValueConst(&uri);
if (NS_FAILED(retCode)) { return NULL; }
return uri;
}
// May modify the name passed in so that it's unique
nsresult
MNameMapper::add( ::rtl::OUString& str, nsIAbDirectory* abook )
{
MNameMapper::dirMap::iterator iter;
OSL_TRACE( "IN MNameMapper::add()" );
if ( abook == NULL ) {
OSL_TRACE( "\tOUT MNameMapper::add() called with null abook" );
return NS_ERROR_NULL_POINTER;
}
::rtl::OUString ouUri=::rtl::OUString::createFromAscii(getURI(abook));
if ( mUriMap->find (ouUri) != mUriMap->end() ) //There's already an entry with same uri
{
return NS_ERROR_FILE_NOT_FOUND;
}
mUriMap->insert( MNameMapper::uriMap::value_type( ouUri, abook ) );
::rtl::OUString tempStr=str;
long count =1;
while ( mDirMap->find( tempStr ) != mDirMap->end() ) {
tempStr = str + ::rtl::OUString::valueOf(count);
count ++;
}
str = tempStr;
NS_IF_ADDREF(abook);
mDirMap->insert( MNameMapper::dirMap::value_type( str, abook ) );
OSL_TRACE( "\tOUT MNameMapper::add()" );
return 0;
}
bool
MNameMapper::getDir( const ::rtl::OUString& str, nsIAbDirectory* *abook )
{
MNameMapper::dirMap::iterator iter;
OSL_TRACE( "IN MNameMapper::getDir( %s )", OUtoCStr(str)?OUtoCStr(str):"NULL" );
if ( (iter = mDirMap->find( str )) != mDirMap->end() ) {
*abook = (*iter).second;
NS_IF_ADDREF(*abook);
} else {
*abook = NULL;
}
OSL_TRACE( "\tOUT MNameMapper::getDir() : %s", (*abook)?"True":"False" );
return( (*abook) != NULL );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */