diff options
author | sb <sb@openoffice.org> | 2010-03-10 16:47:22 +0100 |
---|---|---|
committer | sb <sb@openoffice.org> | 2010-03-10 16:47:22 +0100 |
commit | 368495f6de687541cd845311d6f5a94b2ba3668b (patch) | |
tree | 0ad9ca966590de803d3e69a3d1dfedec74e85c85 /ucb/source | |
parent | 3fa33bb8c9b28a06be2850fd2dfa7bd9f88b8844 (diff) | |
parent | 8b9ebf6f31f42f8d48c87c6a2ef8fca2d2f9b5fe (diff) |
tkr33: merged in DEV300_m74
Diffstat (limited to 'ucb/source')
262 files changed, 5085 insertions, 4293 deletions
diff --git a/ucb/source/cacher/cachedcontentresultset.cxx b/ucb/source/cacher/cachedcontentresultset.cxx index a6c3f0aa8e..b5efa2b9e9 100644 --- a/ucb/source/cacher/cachedcontentresultset.cxx +++ b/ucb/source/cacher/cachedcontentresultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cachedcontentresultset.cxx,v $ - * $Revision: 1.14.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cachedcontentresultset.hxx b/ucb/source/cacher/cachedcontentresultset.hxx index 693c66320f..8cca1605b8 100644 --- a/ucb/source/cacher/cachedcontentresultset.hxx +++ b/ucb/source/cacher/cachedcontentresultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cachedcontentresultset.hxx,v $ - * $Revision: 1.5.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cachedcontentresultsetstub.cxx b/ucb/source/cacher/cachedcontentresultsetstub.cxx index 4581351420..98ac358c67 100644 --- a/ucb/source/cacher/cachedcontentresultsetstub.cxx +++ b/ucb/source/cacher/cachedcontentresultsetstub.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cachedcontentresultsetstub.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cachedcontentresultsetstub.hxx b/ucb/source/cacher/cachedcontentresultsetstub.hxx index 230d60571e..063315869d 100644 --- a/ucb/source/cacher/cachedcontentresultsetstub.hxx +++ b/ucb/source/cacher/cachedcontentresultsetstub.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cachedcontentresultsetstub.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cacheddynamicresultset.cxx b/ucb/source/cacher/cacheddynamicresultset.cxx index 7415ceb6c3..c6badc9266 100644 --- a/ucb/source/cacher/cacheddynamicresultset.cxx +++ b/ucb/source/cacher/cacheddynamicresultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cacheddynamicresultset.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cacheddynamicresultset.hxx b/ucb/source/cacher/cacheddynamicresultset.hxx index 3a99962e91..f1ce145b03 100644 --- a/ucb/source/cacher/cacheddynamicresultset.hxx +++ b/ucb/source/cacher/cacheddynamicresultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cacheddynamicresultset.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cacheddynamicresultsetstub.cxx b/ucb/source/cacher/cacheddynamicresultsetstub.cxx index f335210860..e719e037b9 100644 --- a/ucb/source/cacher/cacheddynamicresultsetstub.cxx +++ b/ucb/source/cacher/cacheddynamicresultsetstub.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cacheddynamicresultsetstub.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cacheddynamicresultsetstub.hxx b/ucb/source/cacher/cacheddynamicresultsetstub.hxx index 4c2e3f554f..e5feb70e83 100644 --- a/ucb/source/cacher/cacheddynamicresultsetstub.hxx +++ b/ucb/source/cacher/cacheddynamicresultsetstub.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cacheddynamicresultsetstub.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/cacheserv.cxx b/ucb/source/cacher/cacheserv.cxx index 8daa84f0f1..031276472b 100644 --- a/ucb/source/cacher/cacheserv.cxx +++ b/ucb/source/cacher/cacheserv.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: cacheserv.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/contentresultsetwrapper.cxx b/ucb/source/cacher/contentresultsetwrapper.cxx index 7f1254393e..a0b5df0524 100644 --- a/ucb/source/cacher/contentresultsetwrapper.cxx +++ b/ucb/source/cacher/contentresultsetwrapper.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: contentresultsetwrapper.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/contentresultsetwrapper.hxx b/ucb/source/cacher/contentresultsetwrapper.hxx index 02966e2b54..e9ff1b9a32 100644 --- a/ucb/source/cacher/contentresultsetwrapper.hxx +++ b/ucb/source/cacher/contentresultsetwrapper.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: contentresultsetwrapper.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/dynamicresultsetwrapper.cxx b/ucb/source/cacher/dynamicresultsetwrapper.cxx index 7ff6e85f47..53ecdb17ca 100644 --- a/ucb/source/cacher/dynamicresultsetwrapper.cxx +++ b/ucb/source/cacher/dynamicresultsetwrapper.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: dynamicresultsetwrapper.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/dynamicresultsetwrapper.hxx b/ucb/source/cacher/dynamicresultsetwrapper.hxx index 97eac446f3..f5f5b47c9f 100644 --- a/ucb/source/cacher/dynamicresultsetwrapper.hxx +++ b/ucb/source/cacher/dynamicresultsetwrapper.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: dynamicresultsetwrapper.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/cacher/makefile.mk b/ucb/source/cacher/makefile.mk index 09717b3f0f..20179f8ce7 100644 --- a/ucb/source/cacher/makefile.mk +++ b/ucb/source/cacher/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.13 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/cmdenv.cxx b/ucb/source/core/cmdenv.cxx new file mode 100644 index 0000000000..5f62cd62e0 --- /dev/null +++ b/ucb/source/core/cmdenv.cxx @@ -0,0 +1,191 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_ucb.hxx" + +#include "cppuhelper/factory.hxx" +#include "com/sun/star/lang/IllegalArgumentException.hpp" + +#include "cmdenv.hxx" + +/************************************************************************** + TODO + ************************************************************************** + + *************************************************************************/ +using namespace com::sun::star; +using namespace ucb_cmdenv; + +//========================================================================= +//========================================================================= +// +// UcbCommandEnvironment Implementation. +// +//========================================================================= +//========================================================================= + +UcbCommandEnvironment::UcbCommandEnvironment( + const uno::Reference< lang::XMultiServiceFactory >& /*xSMgr*/ ) +//: m_xSMgr( xSMgr ) +{ +} + +//========================================================================= +// virtual +UcbCommandEnvironment::~UcbCommandEnvironment() +{ +} + +//========================================================================= +// +// XInitialization methods. +// +//========================================================================= + +// virtual +void SAL_CALL UcbCommandEnvironment::initialize( + const uno::Sequence< uno::Any >& aArguments ) + throw( uno::Exception, + uno::RuntimeException ) +{ + if ( ( aArguments.getLength() < 2 ) || + !( aArguments[ 0 ] >>= m_xIH ) || + !( aArguments[ 1 ] >>= m_xPH )) + throw lang::IllegalArgumentException(); +} + +//========================================================================= +// +// XServiceInfo methods. +// +//========================================================================= + +// virtual +::rtl::OUString SAL_CALL UcbCommandEnvironment::getImplementationName() + throw ( uno::RuntimeException ) +{ + return getImplementationName_Static(); +} + +//========================================================================= +// virtual +sal_Bool SAL_CALL +UcbCommandEnvironment::supportsService( const ::rtl::OUString& ServiceName ) + throw ( uno::RuntimeException ) +{ + uno::Sequence< rtl::OUString > aSNL = getSupportedServiceNames(); + const rtl::OUString * pArray = aSNL.getConstArray(); + for ( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) + { + if ( pArray[ i ] == ServiceName ) + return sal_True; + } + return sal_False; +} + +//========================================================================= +// virtual +uno::Sequence< ::rtl::OUString > SAL_CALL +UcbCommandEnvironment::getSupportedServiceNames() + throw ( uno::RuntimeException ) +{ + return getSupportedServiceNames_Static(); +} + +//========================================================================= +// static +rtl::OUString UcbCommandEnvironment::getImplementationName_Static() +{ + return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.comp.ucb.CommandEnvironment" ) ); +} + +//========================================================================= +// static +uno::Sequence< rtl::OUString > +UcbCommandEnvironment::getSupportedServiceNames_Static() +{ + uno::Sequence< rtl::OUString > aSNS( 1 ); + aSNS.getArray()[ 0 ] + = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.ucb.CommandEnvironment" ) ); + return aSNS; +} + +//========================================================================= +// +// XCommandInfo methods. +// +//========================================================================= + +// virtual +uno::Reference< task::XInteractionHandler > SAL_CALL +UcbCommandEnvironment::getInteractionHandler() + throw ( uno::RuntimeException ) +{ + return m_xIH; +} + +//========================================================================= +// virtual +uno::Reference< ucb::XProgressHandler > SAL_CALL +UcbCommandEnvironment::getProgressHandler() + throw ( uno::RuntimeException ) +{ + return m_xPH; +} + +//========================================================================= +// +// Service factory implementation. +// +//========================================================================= + +static uno::Reference< uno::XInterface > SAL_CALL +UcbCommandEnvironment_CreateInstance( + const uno::Reference< lang::XMultiServiceFactory> & rSMgr ) + throw( uno::Exception ) +{ + lang::XServiceInfo * pX = static_cast< lang::XServiceInfo * >( + new UcbCommandEnvironment( rSMgr ) ); + return uno::Reference< uno::XInterface >::query( pX ); +} + +//========================================================================= +// static +uno::Reference< lang::XSingleServiceFactory > +UcbCommandEnvironment::createServiceFactory( + const uno::Reference< lang::XMultiServiceFactory >& rxServiceMgr ) +{ + return uno::Reference< lang::XSingleServiceFactory >( + cppu::createOneInstanceFactory( + rxServiceMgr, + UcbCommandEnvironment::getImplementationName_Static(), + UcbCommandEnvironment_CreateInstance, + UcbCommandEnvironment::getSupportedServiceNames_Static() ) ); +} diff --git a/ucb/source/core/cmdenv.hxx b/ucb/source/core/cmdenv.hxx new file mode 100644 index 0000000000..ee43eb0c78 --- /dev/null +++ b/ucb/source/core/cmdenv.hxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef INCLUDED_CMDENV_HXX +#define INCLUDED_CMDENV_HXX + +#include "cppuhelper/implbase3.hxx" + +#include "com/sun/star/lang/XInitialization.hpp" +#include "com/sun/star/lang/XServiceInfo.hpp" +#include "com/sun/star/lang/XSingleServiceFactory.hpp" +#include "com/sun/star/ucb/XCommandEnvironment.hpp" + +namespace ucb_cmdenv { + +class UcbCommandEnvironment : + public cppu::WeakImplHelper3< com::sun::star::lang::XInitialization, + com::sun::star::lang::XServiceInfo, + com::sun::star::ucb::XCommandEnvironment > +{ + com::sun::star::uno::Reference< + com::sun::star::task::XInteractionHandler > m_xIH; + com::sun::star::uno::Reference< + com::sun::star::ucb::XProgressHandler > m_xPH; + +public: + UcbCommandEnvironment( + const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory >& rXSMgr ); + virtual ~UcbCommandEnvironment(); + + // XInitialization + virtual void SAL_CALL + initialize( const com::sun::star::uno::Sequence< + com::sun::star::uno::Any >& aArguments ) + throw( com::sun::star::uno::Exception, + com::sun::star::uno::RuntimeException ); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw ( com::sun::star::uno::RuntimeException ); + + virtual sal_Bool SAL_CALL + supportsService( const ::rtl::OUString& ServiceName ) + throw ( com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL + getSupportedServiceNames() + throw ( com::sun::star::uno::RuntimeException ); + + // XCommandEnvironment + virtual com::sun::star::uno::Reference< + com::sun::star::task::XInteractionHandler > SAL_CALL + getInteractionHandler() + throw ( com::sun::star::uno::RuntimeException ); + virtual com::sun::star::uno::Reference< + com::sun::star::ucb::XProgressHandler > SAL_CALL + getProgressHandler() + throw ( com::sun::star::uno::RuntimeException ); + + // Non-UNO interfaces + static rtl::OUString + getImplementationName_Static(); + static com::sun::star::uno::Sequence< rtl::OUString > + getSupportedServiceNames_Static(); + + static com::sun::star::uno::Reference< + com::sun::star::lang::XSingleServiceFactory > + createServiceFactory( const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > & rxServiceMgr ); +private: + //com::sun::star::uno::Reference< + // com::sun::star::lang::XMultiServiceFactory > m_xSMgr; +}; + +} // namespace ucb_cmdenv + +#endif // INCLUDED_CMDENV_HXX diff --git a/ucb/source/core/identify.cxx b/ucb/source/core/identify.cxx index 3410f69f97..2a59aa5c4f 100644 --- a/ucb/source/core/identify.cxx +++ b/ucb/source/core/identify.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: identify.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/identify.hxx b/ucb/source/core/identify.hxx index 08e1b8aa10..28241cd302 100644 --- a/ucb/source/core/identify.hxx +++ b/ucb/source/core/identify.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: identify.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/makefile.mk b/ucb/source/core/makefile.mk index e70b5ca879..5095dbef94 100644 --- a/ucb/source/core/makefile.mk +++ b/ucb/source/core/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.22 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify @@ -48,7 +44,8 @@ SLOFILES=\ $(SLO)$/ucbstore.obj \ $(SLO)$/ucbprops.obj \ $(SLO)$/provprox.obj \ - $(SLO)$/ucbcmds.obj + $(SLO)$/ucbcmds.obj \ + $(SLO)$/cmdenv.obj LIB1TARGET=$(SLB)$/_$(TARGET).lib LIB1OBJFILES=$(SLOFILES) @@ -59,7 +56,7 @@ SHL1STDLIBS=\ $(CPPUHELPERLIB) \ $(CPPULIB) \ $(SALLIB) \ - $(UCBHELPERLIB) + $(UCBHELPERLIB) SHL1LIBS=\ $(LIB1TARGET) \ $(SLB)$/regexp.lib diff --git a/ucb/source/core/providermap.hxx b/ucb/source/core/providermap.hxx index 5da2142d75..c27c3f092e 100644 --- a/ucb/source/core/providermap.hxx +++ b/ucb/source/core/providermap.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: providermap.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/provprox.cxx b/ucb/source/core/provprox.cxx index b3fc75376c..e37157bb10 100644 --- a/ucb/source/core/provprox.cxx +++ b/ucb/source/core/provprox.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: provprox.cxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/provprox.hxx b/ucb/source/core/provprox.hxx index 97d0fc7ea8..403ee6db8a 100644 --- a/ucb/source/core/provprox.hxx +++ b/ucb/source/core/provprox.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: provprox.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/ucb.cxx b/ucb/source/core/ucb.cxx index ce21b4ae1f..83163d50ad 100644 --- a/ucb/source/core/ucb.cxx +++ b/ucb/source/core/ucb.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucb.cxx,v $ - * $Revision: 1.12 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/ucb.hxx b/ucb/source/core/ucb.hxx index 7848ebf978..db54af4688 100644 --- a/ucb/source/core/ucb.hxx +++ b/ucb/source/core/ucb.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucb.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/ucbcmds.cxx b/ucb/source/core/ucbcmds.cxx index 0db14ca73f..d762b7fd67 100644 --- a/ucb/source/core/ucbcmds.cxx +++ b/ucb/source/core/ucbcmds.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbcmds.cxx,v $ - * $Revision: 1.20 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -41,11 +38,10 @@ #include <cppuhelper/exc_hlp.hxx> #include <rtl/ustring.h> #include <rtl/ustring.hxx> -#ifndef __COM_SUN_STAR_LANG_XINTERFACE_HPP_ #include <com/sun/star/uno/XInterface.hpp> -#endif #include <com/sun/star/beans/PropertyState.hpp> #include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/container/XChild.hpp> #include <com/sun/star/beans/XPropertySetInfo.hpp> #include <com/sun/star/io/XActiveDataSink.hpp> @@ -53,13 +49,12 @@ #include <com/sun/star/io/XSeekable.hpp> #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/task/XInteractionHandler.hpp> +#include <com/sun/star/ucb/CommandEnvironment.hpp> #include <com/sun/star/ucb/CommandFailedException.hpp> #include <com/sun/star/ucb/ContentInfoAttribute.hpp> #include <com/sun/star/ucb/GlobalTransferCommandArgument.hpp> #include <com/sun/star/ucb/InsertCommandArgument.hpp> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVEBADTRANSFRERURLEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveBadTransferURLException.hpp> -#endif #include <com/sun/star/ucb/NameClash.hpp> #include <com/sun/star/ucb/NameClashException.hpp> #include <com/sun/star/ucb/OpenCommandArgument2.hpp> @@ -79,7 +74,7 @@ using namespace com::sun::star; -namespace ucb_commands +namespace { //========================================================================= @@ -182,51 +177,6 @@ void SAL_CALL InteractionHandlerProxy::handle( //========================================================================= // -// class CommandEnvironment. -// -//========================================================================= - -class CommandEnvironment : - public cppu::WeakImplHelper1< ucb::XCommandEnvironment > -{ - uno::Reference< task::XInteractionHandler > m_xIH; - uno::Reference< ucb::XProgressHandler > m_xPH; - -public: - CommandEnvironment( - const uno::Reference< task::XInteractionHandler > & xIH, - const uno::Reference< ucb::XProgressHandler > & xPH ) - : m_xIH( xIH ), m_xPH( xPH ) {} - - // XCommandEnvironment methods. - virtual uno::Reference< task::XInteractionHandler > SAL_CALL - getInteractionHandler() - throw ( uno::RuntimeException ); - virtual uno::Reference< ucb::XProgressHandler > SAL_CALL - getProgressHandler() - throw ( uno::RuntimeException ); -}; - -//========================================================================= -// virtual -uno::Reference< task::XInteractionHandler > SAL_CALL -CommandEnvironment::getInteractionHandler() - throw ( uno::RuntimeException ) -{ - return m_xIH; -} - -//========================================================================= -// virtual -uno::Reference< ucb::XProgressHandler > SAL_CALL -CommandEnvironment::getProgressHandler() - throw ( uno::RuntimeException ) -{ - return m_xPH; -} - -//========================================================================= -// // class ActiveDataSink. // //========================================================================= @@ -389,7 +339,7 @@ sal_Bool SAL_CALL CommandProcessorInfo::hasCommandByHandle( sal_Int32 Handle ) //========================================================================= //========================================================================= -static rtl::OUString createDesiredName( +rtl::OUString createDesiredName( const rtl::OUString & rSourceURL, const rtl::OUString & rNewTitle ) { rtl::OUString aName( rNewTitle ); @@ -438,13 +388,13 @@ static rtl::OUString createDesiredName( return rtl::OUString( aName ); } -static rtl::OUString createDesiredName( +rtl::OUString createDesiredName( const ucb::GlobalTransferCommandArgument & rArg ) { return createDesiredName( rArg.SourceURL, rArg.NewTitle ); } -static rtl::OUString createDesiredName( +rtl::OUString createDesiredName( const ucb::TransferInfo & rArg ) { return createDesiredName( rArg.SourceURL, rArg.NewTitle ); @@ -453,7 +403,7 @@ static rtl::OUString createDesiredName( //========================================================================= enum NameClashContinuation { NOT_HANDLED, ABORT, OVERWRITE, NEW_NAME, UNKNOWN }; -static NameClashContinuation interactiveNameClashResolve( +NameClashContinuation interactiveNameClashResolve( const uno::Reference< ucb::XCommandEnvironment > & xEnv, const rtl::OUString & rTargetURL, const rtl::OUString & rClashingName, @@ -528,7 +478,7 @@ static NameClashContinuation interactiveNameClashResolve( } //========================================================================= -static bool setTitle( +bool setTitle( const uno::Reference< ucb::XCommandProcessor > & xCommandProcessor, const uno::Reference< ucb::XCommandEnvironment > & xEnv, const rtl::OUString & rNewTitle ) @@ -576,7 +526,7 @@ static bool setTitle( } //========================================================================= -static uno::Reference< ucb::XContent > createNew( +uno::Reference< ucb::XContent > createNew( const TransferCommandContext & rContext, const uno::Reference< ucb::XContent > & xTarget, sal_Bool bSourceIsFolder, @@ -590,10 +540,12 @@ static uno::Reference< ucb::XContent > createNew( // ////////////////////////////////////////////////////////////////////// - uno::Reference< ucb::XContentCreator > xCreator( - xTarget, uno::UNO_QUERY ); + // First, try it using "CreatabeleContentsInfo" property and + // "createNewContent" command -> the "new" way. - if ( !xCreator.is() ) + uno::Reference< ucb::XCommandProcessor > xCommandProcessorT( + xTarget, uno::UNO_QUERY ); + if ( !xCommandProcessorT.is() ) { uno::Any aProps = uno::makeAny(beans::PropertyValue( @@ -606,24 +558,77 @@ static uno::Reference< ucb::XContent > createNew( ucb::IOErrorCode_CANT_CREATE, uno::Sequence< uno::Any >(&aProps, 1), rContext.xOrigEnv, - rtl::OUString::createFromAscii( "Target is no XContentCreator!" ), + rtl::OUString::createFromAscii( "Target is no XCommandProcessor!" ), rContext.xProcessor ); // Unreachable } - uno::Sequence< ucb::ContentInfo > aTypesInfo - = xCreator->queryCreatableContentsInfo(); + uno::Sequence< beans::Property > aPropsToObtain( 1 ); + aPropsToObtain[ 0 ].Name + = rtl::OUString::createFromAscii( "CreatableContentsInfo" ); + aPropsToObtain[ 0 ].Handle + = -1; - sal_Int32 nCount = aTypesInfo.getLength(); - if ( !nCount ) + ucb::Command aGetPropsCommand( + rtl::OUString::createFromAscii( "getPropertyValues" ), + -1, + uno::makeAny( aPropsToObtain ) ); + + uno::Reference< sdbc::XRow > xRow; + xCommandProcessorT->execute( aGetPropsCommand, 0, rContext.xEnv ) >>= xRow; + + uno::Sequence< ucb::ContentInfo > aTypesInfo; + bool bGotTypesInfo = false; + + if ( xRow.is() ) { - uno::Any aProps - = uno::makeAny(beans::PropertyValue( + uno::Any aValue = xRow->getObject( + 1, uno::Reference< container::XNameAccess >() ); + if ( aValue.hasValue() && ( aValue >>= aTypesInfo ) ) + { + bGotTypesInfo = true; + } + } + + uno::Reference< ucb::XContentCreator > xCreator; + + if ( !bGotTypesInfo ) + { + // Second, try it using XContentCreator interface -> the "old" way (not + // providing the chance to supply an XCommandEnvironment. + + xCreator.set( xTarget, uno::UNO_QUERY ); + + if ( !xCreator.is() ) + { + uno::Any aProps + = uno::makeAny(beans::PropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Folder")), -1, uno::makeAny(rContext.aArg.TargetURL), beans::PropertyState_DIRECT_VALUE)); + ucbhelper::cancelCommandExecution( + ucb::IOErrorCode_CANT_CREATE, + uno::Sequence< uno::Any >(&aProps, 1), + rContext.xOrigEnv, + rtl::OUString::createFromAscii( "Target is no XContentCreator!" ), + rContext.xProcessor ); + // Unreachable + } + + aTypesInfo = xCreator->queryCreatableContentsInfo(); + } + + sal_Int32 nCount = aTypesInfo.getLength(); + if ( !nCount ) + { + uno::Any aProps + = uno::makeAny(beans::PropertyValue( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Folder")), + -1, + uno::makeAny(rContext.aArg.TargetURL), + beans::PropertyState_DIRECT_VALUE)); ucbhelper::cancelCommandExecution( ucb::IOErrorCode_CANT_CREATE, uno::Sequence< uno::Any >(&aProps, 1), @@ -673,14 +678,14 @@ static uno::Reference< ucb::XContent > createNew( } else { - // (not a and not b) or (a and b) + // (not a and not b) or (a and b) // not( a or b) or (a and b) - // + // if ( ( !!bSourceIsFolder == !!( nAttribs & ucb::ContentInfoAttribute::KIND_FOLDER ) ) && - ( !!bSourceIsDocument == + ( !!bSourceIsDocument == !!( nAttribs & ucb::ContentInfoAttribute::KIND_DOCUMENT ) ) ) @@ -710,7 +715,25 @@ static uno::Reference< ucb::XContent > createNew( // ////////////////////////////////////////////////////////////// - xNew = xCreator->createNewContent( aTypesInfo[ n ] ); + if ( !xCreator.is() ) + { + // First, try it using "CreatabeleContentsInfo" property and + // "createNewContent" command -> the "new" way. + ucb::Command aCreateNewCommand( + rtl::OUString::createFromAscii( "createNewContent" ), + -1, + uno::makeAny( aTypesInfo[ n ] ) ); + + xCommandProcessorT->execute( aCreateNewCommand, 0, rContext.xEnv ) + >>= xNew; + } + else + { + // Second, try it using XContentCreator interface -> the "old" + // way (not providing the chance to supply an XCommandEnvironment. + + xNew = xCreator->createNewContent( aTypesInfo[ n ] ); + } if ( !xNew.is() ) { @@ -739,7 +762,7 @@ static uno::Reference< ucb::XContent > createNew( } //========================================================================= -static void transferProperties( +void transferProperties( const TransferCommandContext & rContext, const uno::Reference< ucb::XCommandProcessor > & xCommandProcessorS, const uno::Reference< ucb::XCommandProcessor > & xCommandProcessorN ) @@ -859,7 +882,7 @@ static void transferProperties( rCurrValue.Name = rCurrProp.Name; rCurrValue.Handle = rCurrProp.Handle; rCurrValue.Value = aValue; -// rCurrValue.State = +// rCurrValue.State = nWritePos++; } @@ -904,7 +927,7 @@ static void transferProperties( } //========================================================================= -static uno::Reference< io::XInputStream > getInputStream( +uno::Reference< io::XInputStream > getInputStream( const TransferCommandContext & rContext, const uno::Reference< ucb::XCommandProcessor > & xCommandProcessorS ) throw( uno::Exception ) @@ -923,7 +946,7 @@ static uno::Reference< io::XInputStream > getInputStream( ucb::OpenCommandArgument2 aArg; aArg.Mode = ucb::OpenMode::DOCUMENT; - aArg.Priority = 0; // unused + aArg.Priority = 0; // unused aArg.Sink = xSink; aArg.Properties = uno::Sequence< beans::Property >( 0 ); // unused @@ -963,7 +986,7 @@ static uno::Reference< io::XInputStream > getInputStream( { ucb::OpenCommandArgument2 aArg; aArg.Mode = ucb::OpenMode::DOCUMENT; - aArg.Priority = 0; // unused + aArg.Priority = 0; // unused aArg.Sink = xOutputStream; aArg.Properties = uno::Sequence< beans::Property >( 0 ); @@ -992,7 +1015,7 @@ static uno::Reference< io::XInputStream > getInputStream( } //========================================================================= -static uno::Reference< sdbc::XResultSet > getResultSet( +uno::Reference< sdbc::XResultSet > getResultSet( const TransferCommandContext & rContext, const uno::Reference< ucb::XCommandProcessor > & xCommandProcessorS ) throw( uno::Exception ) @@ -1010,7 +1033,7 @@ static uno::Reference< sdbc::XResultSet > getResultSet( ucb::OpenCommandArgument2 aArg; aArg.Mode = ucb::OpenMode::ALL; - aArg.Priority = 0; // unused + aArg.Priority = 0; // unused aArg.Sink = 0; aArg.Properties = aProps; @@ -1038,7 +1061,7 @@ static uno::Reference< sdbc::XResultSet > getResultSet( } //========================================================================= -static void handleNameClashRename( +void handleNameClashRename( const TransferCommandContext & rContext, const uno::Reference< ucb::XContent > & xNew, const uno::Reference< @@ -1217,7 +1240,7 @@ static void handleNameClashRename( } //========================================================================= -static void globalTransfer( +void globalTransfer_( const TransferCommandContext & rContext, const uno::Reference< ucb::XContent > & xSource, const uno::Reference< ucb::XContent > & xTarget, @@ -1632,7 +1655,7 @@ static void globalTransfer( rtl::OUString(), // NewTitle; rContext.aArg.NameClash ); // NameClash - ucb_commands::TransferCommandContext aSubCtx( + TransferCommandContext aSubCtx( rContext.xSMgr, rContext.xProcessor, rContext.xEnv, @@ -1649,10 +1672,10 @@ static void globalTransfer( aSubCtx.aArg.SourceURL = xChild->getIdentifier()->getContentIdentifier(); - ucb_commands::globalTransfer( aSubCtx, - xChild, - xNew, - xChildRow ); + globalTransfer_( aSubCtx, + xChild, + xNew, + xChildRow ); } } while ( xResultSet->next() ); @@ -1662,11 +1685,11 @@ static void globalTransfer( { } } - + try { uno::Reference< ucb::XCommandProcessor > xcp( xTarget, uno::UNO_QUERY ); - + uno::Any aAny; uno::Reference< ucb::XCommandInfo > xci; if(xcp.is()) @@ -1678,7 +1701,7 @@ static void globalTransfer( uno::Any()), 0, rContext.xEnv ); - + const rtl::OUString cmdName = rtl::OUString::createFromAscii("flush"); if((aAny >>= xci) && xci->hasCommandByName(cmdName)) @@ -1695,7 +1718,7 @@ static void globalTransfer( } } -} /* namescpace ucb_commands */ +} /* namescpace */ //========================================================================= // @@ -1706,8 +1729,7 @@ static void globalTransfer( uno::Reference< ucb::XCommandInfo > UniversalContentBroker::getCommandInfo() { - return uno::Reference< ucb::XCommandInfo >( - new ucb_commands::CommandProcessorInfo() ); + return uno::Reference< ucb::XCommandInfo >( new CommandProcessorInfo() ); } //========================================================================= @@ -1717,14 +1739,24 @@ void UniversalContentBroker::globalTransfer( throw( uno::Exception ) { // Use own command environment with own interaction handler intercepting - // some interaction requests that shell not be handled by the user-supplied + // some interaction requests that shall not be handled by the user-supplied // interaction handler. uno::Reference< ucb::XCommandEnvironment > xLocalEnv; if (xEnv.is()) - xLocalEnv.set( new ucb_commands::CommandEnvironment( - new ucb_commands::InteractionHandlerProxy( - xEnv->getInteractionHandler() ), - xEnv->getProgressHandler() ) ); + { + uno::Reference< beans::XPropertySet > const xProps( + m_xSMgr, uno::UNO_QUERY_THROW ); + uno::Reference< uno::XComponentContext > xCtx; + xCtx.set( xProps->getPropertyValue( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ), + uno::UNO_QUERY_THROW ); + + xLocalEnv.set( ucb::CommandEnvironment::create( + xCtx, + new InteractionHandlerProxy( xEnv->getInteractionHandler() ), + xEnv->getProgressHandler() ) ); + } ////////////////////////////////////////////////////////////////////// // @@ -1862,27 +1894,27 @@ void UniversalContentBroker::globalTransfer( uno::Any aExc; rtl::OUString aNewTitle; - ucb_commands::NameClashContinuation eCont - = ucb_commands::interactiveNameClashResolve( + NameClashContinuation eCont + = interactiveNameClashResolve( xEnv, // always use original environment! rArg.TargetURL, // target folder URL - ucb_commands::createDesiredName( - aTransferArg ), // clashing name + createDesiredName( + aTransferArg ), // clashing name aExc, aNewTitle ); switch ( eCont ) { - case ucb_commands::NOT_HANDLED: + case NOT_HANDLED: // Not handled. cppu::throwException( aExc ); // break; - case ucb_commands::UNKNOWN: + case UNKNOWN: // Handled, but not clear, how... // fall-thru intended. - case ucb_commands::ABORT: + case ABORT: throw ucb::CommandFailedException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( @@ -1892,13 +1924,13 @@ void UniversalContentBroker::globalTransfer( aExc ); // break; - case ucb_commands::OVERWRITE: + case OVERWRITE: aTransferArg.NameClash = ucb::NameClash::OVERWRITE; bRetry = true; break; - case ucb_commands::NEW_NAME: + case NEW_NAME: aTransferArg.NewTitle = aNewTitle; bRetry = true; break; @@ -2015,7 +2047,7 @@ void UniversalContentBroker::globalTransfer( // Unreachable } - ucb_commands::TransferCommandContext aTransferCtx( + TransferCommandContext aTransferCtx( m_xSMgr, this, xLocalEnv, xEnv, rArg ); if ( rArg.NewTitle.getLength() == 0 ) @@ -2024,13 +2056,13 @@ void UniversalContentBroker::globalTransfer( rtl::OUString aBaseURI( xRow->getString( 4 ) ); if ( aBaseURI.getLength() ) { - aTransferCtx.aArg.NewTitle - = ucb_commands::createDesiredName( aBaseURI, rtl::OUString() ); + aTransferCtx.aArg.NewTitle + = createDesiredName( aBaseURI, rtl::OUString() ); } } // Do it! - ucb_commands::globalTransfer( aTransferCtx, xSource, xTarget, xRow ); + globalTransfer_( aTransferCtx, xSource, xTarget, xRow ); ////////////////////////////////////////////////////////////////////// // @@ -2044,8 +2076,8 @@ void UniversalContentBroker::globalTransfer( { ucb::Command aCommand( rtl::OUString::createFromAscii( "delete" ), // Name - -1, // Handle - uno::makeAny( sal_Bool( sal_True ) ) ); // Argument + -1, // Handle + uno::makeAny( sal_Bool( sal_True ) ) ); // Argument xCommandProcessor->execute( aCommand, 0, xLocalEnv ); } diff --git a/ucb/source/core/ucbcmds.hxx b/ucb/source/core/ucbcmds.hxx index 623603ab5a..9e608216fb 100644 --- a/ucb/source/core/ucbcmds.hxx +++ b/ucb/source/core/ucbcmds.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbcmds.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/ucbprops.cxx b/ucb/source/core/ucbprops.cxx index ade855e628..2a66df86ad 100644 --- a/ucb/source/core/ucbprops.cxx +++ b/ucb/source/core/ucbprops.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbprops.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/ucbprops.hxx b/ucb/source/core/ucbprops.hxx index 6ff4ea0ecd..4b5793b928 100644 --- a/ucb/source/core/ucbprops.hxx +++ b/ucb/source/core/ucbprops.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbprops.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/core/ucbserv.cxx b/ucb/source/core/ucbserv.cxx index 747571d042..9c22dabe18 100644 --- a/ucb/source/core/ucbserv.cxx +++ b/ucb/source/core/ucbserv.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbserv.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -37,6 +34,7 @@ #include "ucbstore.hxx" #include "ucbprops.hxx" #include "provprox.hxx" +#include "cmdenv.hxx" using namespace rtl; using namespace com::sun::star::uno; @@ -46,7 +44,7 @@ using namespace com::sun::star::registry; //========================================================================= static sal_Bool writeInfo( void * pRegistryKey, const OUString & rImplementationName, - Sequence< OUString > const & rServiceNames ) + Sequence< OUString > const & rServiceNames ) { OUString aKeyName( OUString::createFromAscii( "/" ) ); aKeyName += rImplementationName; @@ -124,7 +122,15 @@ extern "C" sal_Bool SAL_CALL component_writeInfo( void *, void * pRegistryKey ) writeInfo( pRegistryKey, UcbContentProviderProxyFactory::getImplementationName_Static(), - UcbContentProviderProxyFactory::getSupportedServiceNames_Static() ); + UcbContentProviderProxyFactory::getSupportedServiceNames_Static() ) && + + ////////////////////////////////////////////////////////////////////// + // Command Environment. + ////////////////////////////////////////////////////////////////////// + + writeInfo( pRegistryKey, + ucb_cmdenv::UcbCommandEnvironment::getImplementationName_Static(), + ucb_cmdenv::UcbCommandEnvironment::getSupportedServiceNames_Static() ); } //========================================================================= @@ -179,6 +185,17 @@ extern "C" void * SAL_CALL component_getFactory( } ////////////////////////////////////////////////////////////////////// + // Command Environment. + ////////////////////////////////////////////////////////////////////// + + else if ( ucb_cmdenv::UcbCommandEnvironment::getImplementationName_Static(). + compareToAscii( pImplName ) == 0 ) + { + xFactory + = ucb_cmdenv::UcbCommandEnvironment::createServiceFactory( xSMgr ); + } + + ////////////////////////////////////////////////////////////////////// if ( xFactory.is() ) { diff --git a/ucb/source/core/ucbstore.cxx b/ucb/source/core/ucbstore.cxx index e0abbba396..7bf58a2001 100644 --- a/ucb/source/core/ucbstore.cxx +++ b/ucb/source/core/ucbstore.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbstore.cxx,v $ - * $Revision: 1.17 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -1570,7 +1567,9 @@ void SAL_CALL PersistentPropertySet::setPropertyValue( // Write state ( Now it is a directly set value ) xNameReplace->replaceByName( OUString::createFromAscii( "State" ), - makeAny( PropertyState_DIRECT_VALUE ) ); + makeAny( + sal_Int32( + PropertyState_DIRECT_VALUE ) ) ); // Commit changes. xBatch->commitChanges(); @@ -1854,7 +1853,9 @@ void SAL_CALL PersistentPropertySet::addProperty( // Set state ( always "default" ) xNameReplace->replaceByName( OUString::createFromAscii( "State" ), - makeAny( PropertyState_DEFAULT_VALUE ) ); + makeAny( + sal_Int32( + PropertyState_DEFAULT_VALUE ) ) ); // Set attributes xNameReplace->replaceByName( @@ -2330,7 +2331,9 @@ void SAL_CALL PersistentPropertySet::setPropertyValues( // Write state ( Now it is a directly set value ) xNameReplace->replaceByName( OUString::createFromAscii( "State" ), - makeAny( PropertyState_DIRECT_VALUE ) ); + makeAny( + sal_Int32( + PropertyState_DIRECT_VALUE ) ) ); // Commit changes. xBatch->commitChanges(); diff --git a/ucb/source/core/ucbstore.hxx b/ucb/source/core/ucbstore.hxx index 3d9d0978d9..a28a016724 100644 --- a/ucb/source/core/ucbstore.hxx +++ b/ucb/source/core/ucbstore.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucbstore.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/inc/regexp.hxx b/ucb/source/inc/regexp.hxx index c1f985d149..7126b3cbe7 100644 --- a/ucb/source/inc/regexp.hxx +++ b/ucb/source/inc/regexp.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: regexp.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/inc/regexpmap.hxx b/ucb/source/inc/regexpmap.hxx index ed76c55929..1027424b08 100644 --- a/ucb/source/inc/regexpmap.hxx +++ b/ucb/source/inc/regexpmap.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: regexpmap.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/inc/regexpmap.tpt b/ucb/source/inc/regexpmap.tpt index 084867e07f..9d4a7fb69c 100644 --- a/ucb/source/inc/regexpmap.tpt +++ b/ucb/source/inc/regexpmap.tpt @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: regexpmap.tpt,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/regexp/makefile.mk b/ucb/source/regexp/makefile.mk index 8d0b938402..e748f054ea 100644 --- a/ucb/source/regexp/makefile.mk +++ b/ucb/source/regexp/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.4 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/regexp/regexp.cxx b/ucb/source/regexp/regexp.cxx index 0e38b25e3a..cb5d972217 100644 --- a/ucb/source/regexp/regexp.cxx +++ b/ucb/source/regexp/regexp.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: regexp.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/sorter/makefile.mk b/ucb/source/sorter/makefile.mk index bcd3b64447..5077be80b4 100644 --- a/ucb/source/sorter/makefile.mk +++ b/ucb/source/sorter/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.14 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/sorter/sortdynres.cxx b/ucb/source/sorter/sortdynres.cxx index ca498689bd..39d273bc18 100644 --- a/ucb/source/sorter/sortdynres.cxx +++ b/ucb/source/sorter/sortdynres.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sortdynres.cxx,v $ - * $Revision: 1.13 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/sorter/sortdynres.hxx b/ucb/source/sorter/sortdynres.hxx index 6f46e545b5..27b9fc4326 100644 --- a/ucb/source/sorter/sortdynres.hxx +++ b/ucb/source/sorter/sortdynres.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sortdynres.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/sorter/sortmain.cxx b/ucb/source/sorter/sortmain.cxx index 883b4544bf..a1c781c4d4 100644 --- a/ucb/source/sorter/sortmain.cxx +++ b/ucb/source/sorter/sortmain.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sortmain.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/sorter/sortresult.cxx b/ucb/source/sorter/sortresult.cxx index 9fc3ffe764..e49de7a394 100644 --- a/ucb/source/sorter/sortresult.cxx +++ b/ucb/source/sorter/sortresult.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sortresult.cxx,v $ - * $Revision: 1.18.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/sorter/sortresult.hxx b/ucb/source/sorter/sortresult.hxx index 0d25283b74..95d59f0b52 100644 --- a/ucb/source/sorter/sortresult.hxx +++ b/ucb/source/sorter/sortresult.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: sortresult.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/expand/makefile.mk b/ucb/source/ucp/expand/makefile.mk index 6b4ffc8581..aaa7b85edb 100644 --- a/ucb/source/ucp/expand/makefile.mk +++ b/ucb/source/ucp/expand/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.4 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/expand/ucpexpand.cxx b/ucb/source/ucp/expand/ucpexpand.cxx index 611531ff36..ea72dedbc9 100644 --- a/ucb/source/ucp/expand/ucpexpand.cxx +++ b/ucb/source/ucp/expand/ucpexpand.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ucpexpand.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/bc.cxx b/ucb/source/ucp/file/bc.cxx index ab279417b8..5b9adebe18 100644 --- a/ucb/source/ucp/file/bc.cxx +++ b/ucb/source/ucp/file/bc.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: bc.cxx,v $ - * $Revision: 1.40 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -49,7 +46,6 @@ #include <com/sun/star/beans/PropertySetInfoChange.hpp> #include <com/sun/star/ucb/ContentAction.hpp> #include <com/sun/star/ucb/NameClash.hpp> -#include <com/sun/star/ucb/ContentInfoAttribute.hpp> #include "filglob.hxx" #include "filid.hxx" #include "filrow.hxx" @@ -437,6 +433,15 @@ BaseContent::execute( const Command& aCommand, if(!xRow->wasNull()) aAny <<= CasePreservingURL; } + else if( ! aCommand.Name.compareToAscii( "createNewContent" ) ) + { + ucb::ContentInfo aArg; + if ( !( aCommand.Argument >>= aArg ) ) + m_pMyShell->installError( CommandId, + TASKHANDLING_WRONG_CREATENEWCONTENT_ARGUMENT ); + else + aAny <<= createNewContent( aArg ); + } else m_pMyShell->installError( CommandId, TASKHANDLER_UNSUPPORTED_COMMAND ); @@ -529,9 +534,9 @@ BaseContent::getContentType() // Who am I ? Sequence< beans::Property > seq(1); seq[0] = beans::Property( rtl::OUString::createFromAscii("IsDocument"), - -1, - getCppuType( static_cast< sal_Bool* >(0) ), - 0 ); + -1, + getCppuType( static_cast< sal_Bool* >(0) ), + 0 ); Reference< sdbc::XRow > xRow = getPropertyValues( -1,seq ); sal_Bool IsDocument = xRow->getBoolean( 1 ); @@ -637,27 +642,7 @@ BaseContent::queryCreatableContentsInfo( void ) throw( RuntimeException ) { - Sequence< ContentInfo > seq(2); - - // file - seq[0].Type = m_pMyShell->FileContentType; - seq[0].Attributes = ContentInfoAttribute::INSERT_WITH_INPUTSTREAM - | ContentInfoAttribute::KIND_DOCUMENT; - - Sequence< beans::Property > props( 1 ); - props[0] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< rtl::OUString* >( 0 ) ), - beans::PropertyAttribute::MAYBEVOID - | beans::PropertyAttribute::BOUND ); - seq[0].Properties = props; - - // folder - seq[1].Type = m_pMyShell->FolderContentType; - seq[1].Attributes = ContentInfoAttribute::KIND_FOLDER; - seq[1].Properties = props; - return seq; + return m_pMyShell->queryCreatableContentsInfo(); } @@ -688,18 +673,18 @@ BaseContent::createNewContent( { Sequence< beans::Property > seq(1); seq[0] = beans::Property( rtl::OUString::createFromAscii("IsDocument"), - -1, - getCppuType( static_cast< sal_Bool* >(0) ), - 0 ); + -1, + getCppuType( static_cast< sal_Bool* >(0) ), + 0 ); Reference< sdbc::XRow > xRow = getPropertyValues( -1,seq ); IsDocument = xRow->getBoolean( 1 ); - + if ( xRow->wasNull() ) { IsDocument = false; -// OSL_ENSURE( false, -// "BaseContent::createNewContent - Property value was null!" ); -// return Reference< XContent >(); +// OSL_ENSURE( false, +// "BaseContent::createNewContent - Property value was null!" ); +// return Reference< XContent >(); } } catch ( sdbc::SQLException const & ) @@ -1076,13 +1061,13 @@ BaseContent::open( aCommandArgument.Properties, aCommandArgument.SortingInfo ); } -// else if( aCommandArgument.Mode == -// OpenMode::DOCUMENT_SHARE_DENY_NONE || -// aCommandArgument.Mode == -// OpenMode::DOCUMENT_SHARE_DENY_WRITE ) -// m_pMyShell->installError( nMyCommandIdentifier, -// TASKHANDLING_UNSUPPORTED_OPEN_MODE, -// aCommandArgument.Mode); +// else if( aCommandArgument.Mode == +// OpenMode::DOCUMENT_SHARE_DENY_NONE || +// aCommandArgument.Mode == +// OpenMode::DOCUMENT_SHARE_DENY_WRITE ) +// m_pMyShell->installError( nMyCommandIdentifier, +// TASKHANDLING_UNSUPPORTED_OPEN_MODE, +// aCommandArgument.Mode); else m_pMyShell->installError( nMyCommandIdentifier, TASKHANDLING_UNSUPPORTED_OPEN_MODE, diff --git a/ucb/source/ucp/file/bc.hxx b/ucb/source/ucp/file/bc.hxx index 8a99cba1d0..f62b262808 100644 --- a/ucb/source/ucp/file/bc.hxx +++ b/ucb/source/ucp/file/bc.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: bc.hxx,v $ - * $Revision: 1.14 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filcmd.cxx b/ucb/source/ucp/file/filcmd.cxx index c84cc69439..23bc660a45 100644 --- a/ucb/source/ucp/file/filcmd.cxx +++ b/ucb/source/ucp/file/filcmd.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filcmd.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filcmd.hxx b/ucb/source/ucp/file/filcmd.hxx index 32fbc74d01..ddd8fa5487 100644 --- a/ucb/source/ucp/file/filcmd.hxx +++ b/ucb/source/ucp/file/filcmd.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filcmd.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filerror.hxx b/ucb/source/ucp/file/filerror.hxx index 3214ffd69b..c605f826ac 100644 --- a/ucb/source/ucp/file/filerror.hxx +++ b/ucb/source/ucp/file/filerror.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filerror.hxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -30,34 +27,34 @@ #ifndef _FILERROR_HXX_ namespace fileaccess { - + // Error codes used to deliver the resulting exceptions #define LOWEST_FREE_ERROR 72 #define TASKHANDLER_NO_ERROR 0 #define TASKHANDLER_UNSUPPORTED_COMMAND 1 -#define TASKHANDLING_WRONG_SETPROPERTYVALUES_ARGUMENT 2 +#define TASKHANDLING_WRONG_SETPROPERTYVALUES_ARGUMENT 2 #define TASKHANDLING_WRONG_GETPROPERTYVALUES_ARGUMENT 3 #define TASKHANDLING_WRONG_OPEN_ARGUMENT 4 #define TASKHANDLING_WRONG_DELETE_ARGUMENT 5 #define TASKHANDLING_WRONG_TRANSFER_ARGUMENT 6 #define TASKHANDLING_WRONG_INSERT_ARGUMENT 7 +#define TASKHANDLING_WRONG_CREATENEWCONTENT_ARGUMENT 8 +#define TASKHANDLING_UNSUPPORTED_OPEN_MODE 9 -#define TASKHANDLING_UNSUPPORTED_OPEN_MODE 8 +#define TASKHANDLING_DELETED_STATE_IN_OPEN_COMMAND 10 +#define TASKHANDLING_INSERTED_STATE_IN_OPEN_COMMAND 11 -#define TASKHANDLING_DELETED_STATE_IN_OPEN_COMMAND 9 -#define TASKHANDLING_INSERTED_STATE_IN_OPEN_COMMAND 10 +#define TASKHANDLING_OPEN_FILE_FOR_PAGING 12 +#define TASKHANDLING_NOTCONNECTED_FOR_PAGING 13 +#define TASKHANDLING_BUFFERSIZEEXCEEDED_FOR_PAGING 14 +#define TASKHANDLING_IOEXCEPTION_FOR_PAGING 15 +#define TASKHANDLING_READING_FILE_FOR_PAGING 16 -#define TASKHANDLING_OPEN_FILE_FOR_PAGING 11 -#define TASKHANDLING_NOTCONNECTED_FOR_PAGING 12 -#define TASKHANDLING_BUFFERSIZEEXCEEDED_FOR_PAGING 13 -#define TASKHANDLING_IOEXCEPTION_FOR_PAGING 14 -#define TASKHANDLING_READING_FILE_FOR_PAGING 15 +#define TASKHANDLING_OPEN_FOR_INPUTSTREAM 17 +#define TASKHANDLING_OPEN_FOR_STREAM 18 +#define TASKHANDLING_OPEN_FOR_DIRECTORYLISTING 19 -#define TASKHANDLING_OPEN_FOR_INPUTSTREAM 16 -#define TASKHANDLING_OPEN_FOR_STREAM 17 -#define TASKHANDLING_OPEN_FOR_DIRECTORYLISTING 18 - #define TASKHANDLING_NOFRESHINSERT_IN_INSERT_COMMAND 22 #define TASKHANDLING_NONAMESET_INSERT_COMMAND 23 #define TASKHANDLING_NOCONTENTTYPE_INSERT_COMMAND 24 @@ -104,7 +101,7 @@ namespace fileaccess { #define TASKHANDLING_TRANSFER_BY_COPY_SOURCE 60 #define TASKHANDLING_TRANSFER_BY_COPY_SOURCESTAT 61 -#define TASKHANDLING_KEEPERROR_FOR_COPY 62 +#define TASKHANDLING_KEEPERROR_FOR_COPY 62 #define TASKHANDLING_OVERWRITE_FOR_COPY 63 #define TASKHANDLING_RENAME_FOR_COPY 64 #define TASKHANDLING_RENAMEMOVE_FOR_COPY 65 diff --git a/ucb/source/ucp/file/filglob.cxx b/ucb/source/ucp/file/filglob.cxx index 26392425cf..2a3df432fb 100644 --- a/ucb/source/ucp/file/filglob.cxx +++ b/ucb/source/ucp/file/filglob.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filglob.cxx,v $ - * $Revision: 1.26.4.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -286,7 +283,8 @@ namespace fileaccess { errorCode == TASKHANDLING_WRONG_OPEN_ARGUMENT || errorCode == TASKHANDLING_WRONG_DELETE_ARGUMENT || errorCode == TASKHANDLING_WRONG_TRANSFER_ARGUMENT || - errorCode == TASKHANDLING_WRONG_INSERT_ARGUMENT ) + errorCode == TASKHANDLING_WRONG_INSERT_ARGUMENT || + errorCode == TASKHANDLING_WRONG_CREATENEWCONTENT_ARGUMENT ) { IllegalArgumentException excep; excep.ArgumentPosition = 0; @@ -359,7 +357,7 @@ namespace fileaccess { ioErrorCode = IOErrorCode_INVALID_PARAMETER; break; case FileBase::E_NOMEM: - // not enough memory for allocating structures + // not enough memory for allocating structures ioErrorCode = IOErrorCode_OUT_OF_MEMORY; break; case FileBase::E_BUSY: @@ -409,11 +407,11 @@ namespace fileaccess { ioErrorCode = IOErrorCode_NOT_EXISTING; break; case FileBase::E_NOTDIR: - // the specified path is not an directory + // the specified path is not an directory ioErrorCode = IOErrorCode_NO_DIRECTORY; break; case FileBase::E_NOMEM: - // not enough memory for allocating structures + // not enough memory for allocating structures ioErrorCode = IOErrorCode_OUT_OF_MEMORY; break; case FileBase::E_ROFS: @@ -629,15 +627,15 @@ namespace fileaccess { aAny <<= excep; cancelCommandExecution( aAny,xEnv ); } -// ioErrorCode = IOErrorCode_INVALID_CHARACTER; -// cancelCommandExecution( -// ioErrorCode, -// generateErrorArguments(aUncPath), -// xEnv, -// rtl::OUString( -// RTL_CONSTASCII_USTRINGPARAM( -// "the name contained invalid characters")), -// xComProc ); +// ioErrorCode = IOErrorCode_INVALID_CHARACTER; +// cancelCommandExecution( +// ioErrorCode, +// generateErrorArguments(aUncPath), +// xEnv, +// rtl::OUString( +// RTL_CONSTASCII_USTRINGPARAM( +// "the name contained invalid characters")), +// xComProc ); } else if( errorCode == TASKHANDLING_FOLDER_EXISTS_MKDIR ) { @@ -655,15 +653,15 @@ namespace fileaccess { aAny <<= excep; cancelCommandExecution( aAny,xEnv ); } -// ioErrorCode = IOErrorCode_ALREADY_EXISTING; -// cancelCommandExecution( -// ioErrorCode, -// generateErrorArguments(aUncPath), -// xEnv, -// rtl::OUString( -// RTL_CONSTASCII_USTRINGPARAM( -// "the folder exists")), -// xComProc ); +// ioErrorCode = IOErrorCode_ALREADY_EXISTING; +// cancelCommandExecution( +// ioErrorCode, +// generateErrorArguments(aUncPath), +// xEnv, +// rtl::OUString( +// RTL_CONSTASCII_USTRINGPARAM( +// "the folder exists")), +// xComProc ); } else if( errorCode == TASKHANDLING_ENSUREDIR_FOR_WRITE || errorCode == TASKHANDLING_CREATEDIRECTORY_MKDIR ) @@ -702,7 +700,7 @@ namespace fileaccess { case FileBase::E_INVAL: // the format of the parameters was not valid ioErrorCode = IOErrorCode_INVALID_PARAMETER; break; - case FileBase::E_NOMEM: // not enough memory for allocating structures + case FileBase::E_NOMEM: // not enough memory for allocating structures ioErrorCode = IOErrorCode_OUT_OF_MEMORY; break; case FileBase::E_ROFS: // #i4735# handle ROFS transparently as ACCESS_DENIED @@ -728,7 +726,7 @@ namespace fileaccess { case FileBase::E_MULTIHOP: // Multihop attempted case FileBase::E_FAULT: // Bad address case FileBase::E_INTR: // function call was interrupted - case FileBase::E_NOSYS: // Function not implemented + case FileBase::E_NOSYS: // Function not implemented case FileBase::E_NOSPC: // No space left on device case FileBase::E_NXIO: // No such device or address case FileBase::E_OVERFLOW: // Value too large for defined data type @@ -754,7 +752,7 @@ namespace fileaccess { case FileBase::E_INVAL: // the format of the parameters was not valid ioErrorCode = IOErrorCode_INVALID_PARAMETER; break; - case FileBase::E_NOMEM: // not enough memory for allocating structures + case FileBase::E_NOMEM: // not enough memory for allocating structures ioErrorCode = IOErrorCode_OUT_OF_MEMORY; break; case FileBase::E_ACCES: // Permission denied @@ -767,7 +765,7 @@ namespace fileaccess { ioErrorCode = IOErrorCode_NAME_TOO_LONG; break; case FileBase::E_NOLINK: // Link has been severed - case FileBase::E_NOENT: // No such file or directory + case FileBase::E_NOENT: // No such file or directory ioErrorCode = IOErrorCode_NOT_EXISTING; break; case FileBase::E_ISDIR: // Is a directory @@ -804,30 +802,30 @@ namespace fileaccess { errorCode == TASKHANDLING_DIRECTORYEXHAUSTED_FOR_REMOVE || errorCode == TASKHANDLING_TRANSFER_INVALIDURL ) { - rtl::OUString aMsg; + rtl::OUString aMsg; switch( minorCode ) { - case FileBase::E_NOENT: // No such file or directory + case FileBase::E_NOENT: // No such file or directory if ( errorCode == TASKHANDLING_TRANSFER_BY_COPY_SOURCE || errorCode == TASKHANDLING_TRANSFER_BY_COPY_SOURCESTAT || errorCode == TASKHANDLING_TRANSFER_BY_MOVE_SOURCE || errorCode == TASKHANDLING_TRANSFER_BY_MOVE_SOURCESTAT ) { ioErrorCode = IOErrorCode_NOT_EXISTING; - aMsg = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + aMsg = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "source file/folder does not exist")); break; } else { ioErrorCode = IOErrorCode_GENERAL; - aMsg = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + aMsg = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "a general error during transfer command")); break; } default: ioErrorCode = IOErrorCode_GENERAL; - aMsg = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + aMsg = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "a general error during transfer command")); break; } @@ -896,7 +894,7 @@ namespace fileaccess { case FileBase::E_NAMETOOLONG: // File name too long ioErrorCode = IOErrorCode_NAME_TOO_LONG; break; - case FileBase::E_NOENT: // No such file or directory + case FileBase::E_NOENT: // No such file or directory ioErrorCode = IOErrorCode_NOT_EXISTING; aMsg = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "file/folder does not exist")); diff --git a/ucb/source/ucp/file/filglob.hxx b/ucb/source/ucp/file/filglob.hxx index d9ee20f32a..e3464ba7a3 100644 --- a/ucb/source/ucp/file/filglob.hxx +++ b/ucb/source/ucp/file/filglob.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filglob.hxx,v $ - * $Revision: 1.11.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filid.cxx b/ucb/source/ucp/file/filid.cxx index 6def154d33..88abcc1fb4 100644 --- a/ucb/source/ucp/file/filid.cxx +++ b/ucb/source/ucp/file/filid.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filid.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filid.hxx b/ucb/source/ucp/file/filid.hxx index fecf17b8c8..12d1a44fd9 100644 --- a/ucb/source/ucp/file/filid.hxx +++ b/ucb/source/ucp/file/filid.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filid.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filinl.hxx b/ucb/source/ucp/file/filinl.hxx index a2bf11edeb..22205d9e84 100644 --- a/ucb/source/ucp/file/filinl.hxx +++ b/ucb/source/ucp/file/filinl.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filinl.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filinpstr.cxx b/ucb/source/ucp/file/filinpstr.cxx index a8cd3d8544..f9ff8d4da0 100644 --- a/ucb/source/ucp/file/filinpstr.cxx +++ b/ucb/source/ucp/file/filinpstr.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filinpstr.cxx,v $ - * $Revision: 1.13 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filinpstr.hxx b/ucb/source/ucp/file/filinpstr.hxx index 4271e651d9..05e5672751 100644 --- a/ucb/source/ucp/file/filinpstr.hxx +++ b/ucb/source/ucp/file/filinpstr.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filinpstr.hxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filinsreq.cxx b/ucb/source/ucp/file/filinsreq.cxx index ad1a152cee..986db15430 100644 --- a/ucb/source/ucp/file/filinsreq.cxx +++ b/ucb/source/ucp/file/filinsreq.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filinsreq.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filinsreq.hxx b/ucb/source/ucp/file/filinsreq.hxx index b90f3053c2..617809965d 100644 --- a/ucb/source/ucp/file/filinsreq.hxx +++ b/ucb/source/ucp/file/filinsreq.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filinsreq.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filnot.cxx b/ucb/source/ucp/file/filnot.cxx index 4039e442b7..3abb89adcd 100644 --- a/ucb/source/ucp/file/filnot.cxx +++ b/ucb/source/ucp/file/filnot.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filnot.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filnot.hxx b/ucb/source/ucp/file/filnot.hxx index 3f2bc53386..46b808ab86 100644 --- a/ucb/source/ucp/file/filnot.hxx +++ b/ucb/source/ucp/file/filnot.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filnot.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filprp.cxx b/ucb/source/ucp/file/filprp.cxx index 3e24118a50..9e45763d18 100644 --- a/ucb/source/ucp/file/filprp.cxx +++ b/ucb/source/ucp/file/filprp.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filprp.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filprp.hxx b/ucb/source/ucp/file/filprp.hxx index 46acc7ee6e..6a62bc4567 100644 --- a/ucb/source/ucp/file/filprp.hxx +++ b/ucb/source/ucp/file/filprp.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filprp.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filrec.cxx b/ucb/source/ucp/file/filrec.cxx index 1580069175..424ece5df2 100644 --- a/ucb/source/ucp/file/filrec.cxx +++ b/ucb/source/ucp/file/filrec.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filrec.cxx,v $ - * $Revision: 1.3.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filrec.hxx b/ucb/source/ucp/file/filrec.hxx index 40d98aa437..de8def9077 100644 --- a/ucb/source/ucp/file/filrec.hxx +++ b/ucb/source/ucp/file/filrec.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filrec.hxx,v $ - * $Revision: 1.3.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filrow.cxx b/ucb/source/ucp/file/filrow.cxx index e4ccde0731..0b2ad97aea 100644 --- a/ucb/source/ucp/file/filrow.cxx +++ b/ucb/source/ucp/file/filrow.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filrow.cxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filrow.hxx b/ucb/source/ucp/file/filrow.hxx index 296de98b6c..9d7b0bff09 100644 --- a/ucb/source/ucp/file/filrow.hxx +++ b/ucb/source/ucp/file/filrow.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filrow.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filrset.cxx b/ucb/source/ucp/file/filrset.cxx index 134db87e19..e0bd6a0080 100644 --- a/ucb/source/ucp/file/filrset.cxx +++ b/ucb/source/ucp/file/filrset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filrset.cxx,v $ - * $Revision: 1.21 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filrset.hxx b/ucb/source/ucp/file/filrset.hxx index 8815bc93e6..329889af6c 100644 --- a/ucb/source/ucp/file/filrset.hxx +++ b/ucb/source/ucp/file/filrset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filrset.hxx,v $ - * $Revision: 1.12 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filstr.cxx b/ucb/source/ucp/file/filstr.cxx index d353f029b3..494413acc0 100644 --- a/ucb/source/ucp/file/filstr.cxx +++ b/ucb/source/ucp/file/filstr.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filstr.cxx,v $ - * $Revision: 1.24 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filstr.hxx b/ucb/source/ucp/file/filstr.hxx index 815bb52a10..393eda0c6c 100644 --- a/ucb/source/ucp/file/filstr.hxx +++ b/ucb/source/ucp/file/filstr.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filstr.hxx,v $ - * $Revision: 1.14 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/filtask.cxx b/ucb/source/ucp/file/filtask.cxx index d706bf9ad0..df0b85e4fa 100644 --- a/ucb/source/ucp/file/filtask.cxx +++ b/ucb/source/ucp/file/filtask.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filtask.cxx,v $ - * $Revision: 1.15 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -33,11 +30,11 @@ #include "filtask.hxx" #include "filglob.hxx" -/*********************************************************************************/ -/* */ -/* TaskHandling */ -/* */ -/*********************************************************************************/ +/******************************************************************************/ +/* */ +/* TaskHandling */ +/* */ +/******************************************************************************/ using namespace fileaccess; @@ -70,7 +67,9 @@ TaskManager::startTask( TaskMap::iterator it = m_aTaskMap.find( CommandId ); if( it != m_aTaskMap.end() ) { - throw DuplicateCommandIdentifierException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); + throw DuplicateCommandIdentifierException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), + uno::Reference< uno::XInterface >() ); } m_aTaskMap[ CommandId ] = TaskHandling( xCommandEnv ); } @@ -90,13 +89,14 @@ TaskManager::endTask( sal_Int32 CommandId, sal_Int32 ErrorCode = it->second.getInstalledError(); sal_Int32 MinorCode = it->second.getMinorErrorCode(); bool isHandled = it->second.isHandled(); - - Reference< XCommandEnvironment > xComEnv = it->second.getCommandEnvironment(); - + + Reference< XCommandEnvironment > xComEnv + = it->second.getCommandEnvironment(); + m_aTaskMap.erase( it ); - + if( ErrorCode != TASKHANDLER_NO_ERROR ) - throw_handler( + throw_handler( ErrorCode, MinorCode, xComEnv, @@ -122,17 +122,6 @@ TaskManager::abort( sal_Int32 CommandId ) } -bool SAL_CALL TaskManager::isAborted( sal_Int32 CommandId ) -{ - osl::MutexGuard aGuard( m_aMutex ); - TaskMap::iterator it = m_aTaskMap.find( CommandId ); - if( it == m_aTaskMap.end() || it->second.isAborted() ) - return false; - else - return true; -} - - void SAL_CALL TaskManager::clearError( sal_Int32 CommandId ) { osl::MutexGuard aGuard( m_aMutex ); @@ -178,59 +167,18 @@ TaskManager::getCommandId( void ) -uno::Reference< task::XInteractionHandler > SAL_CALL -TaskManager::getInteractionHandler( sal_Int32 CommandId ) -{ - osl::MutexGuard aGuard( m_aMutex ); - TaskMap::iterator it = m_aTaskMap.find( CommandId ); - if( it == m_aTaskMap.end() ) - return uno::Reference< task::XInteractionHandler >( 0 ); - else - return it->second.getInteractionHandler(); -} - - - -uno::Reference< XProgressHandler > SAL_CALL -TaskManager::getProgressHandler( sal_Int32 CommandId ) -{ - osl::MutexGuard aGuard( m_aMutex ); - TaskMap::iterator it = m_aTaskMap.find( CommandId ); - if( it == m_aTaskMap.end() ) - return uno::Reference< XProgressHandler >( 0 ); - else - return it->second.getProgressHandler(); -} - - -uno::Reference< XCommandEnvironment > SAL_CALL -TaskManager::getCommandEnvironment( sal_Int32 CommandId ) -{ - osl::MutexGuard aGuard( m_aMutex ); - TaskMap::iterator it = m_aTaskMap.find( CommandId ); - if( it == m_aTaskMap.end() ) - return uno::Reference< XCommandEnvironment >( 0 ); - else - return it->second.getCommandEnvironment(); -} - - -void SAL_CALL TaskManager::handleTask( sal_Int32 CommandId, - const uno::Reference< task::XInteractionRequest >& request ) +void SAL_CALL TaskManager::handleTask( + sal_Int32 CommandId, + const uno::Reference< task::XInteractionRequest >& request ) { osl::MutexGuard aGuard( m_aMutex ); TaskMap::iterator it = m_aTaskMap.find( CommandId ); uno::Reference< task::XInteractionHandler > xInt; if( it != m_aTaskMap.end() ) { - xInt = it->second.getInteractionHandler(); + xInt = it->second.getInteractionHandler(); if( xInt.is() ) xInt->handle( request ); it->second.setHandled(); } } - - - - - diff --git a/ucb/source/ucp/file/filtask.hxx b/ucb/source/ucp/file/filtask.hxx index bcb57587a3..610e251ebb 100644 --- a/ucb/source/ucp/file/filtask.hxx +++ b/ucb/source/ucp/file/filtask.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: filtask.hxx,v $ - * $Revision: 1.16 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -40,43 +37,38 @@ #include <com/sun/star/ucb/XProgressHandler.hpp> #include <com/sun/star/task/XInteractionHandler.hpp> #include <com/sun/star/task/XInteractionRequest.hpp> -#ifndef _FILERROR_HXX_ #include "filerror.hxx" -#endif namespace fileaccess { class BaseContent; - + /* * This implementation is inherited by class fileaccess::shell. * The relevant methods in this class all have as first argument the CommandId, - * so if necessary, every method has acess to its relevant XInteractionHandler and - * XProgressHandler, simply by calling directly the method - * getInteractionHandler( CommandId ) - * and - * getProgressHandler(); + * so if necessary, every method has access to its relevant XInteractionHandler and + * XProgressHandler. */ class TaskManager { protected: - + class TaskHandling { private: - + bool m_bAbort,m_bHandled; sal_Int32 m_nErrorCode,m_nMinorCode; com::sun::star::uno::Reference< com::sun::star::task::XInteractionHandler > m_xInteractionHandler; com::sun::star::uno::Reference< com::sun::star::ucb::XProgressHandler > m_xProgressHandler; com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > m_xCommandEnvironment; - + public: - + TaskHandling( const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xCommandEnv = com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >( 0 ) ) @@ -89,22 +81,17 @@ namespace fileaccess m_xCommandEnvironment( xCommandEnv ) { } - + void SAL_CALL abort() - { + { m_bAbort = true; } - bool SAL_CALL isAborted() - { - return m_bAbort; - } - void setHandled() { m_bHandled = true; } - + bool isHandled() { return true; @@ -115,7 +102,7 @@ namespace fileaccess m_nErrorCode = TASKHANDLER_NO_ERROR; m_nMinorCode = TASKHANDLER_NO_ERROR; } - + void SAL_CALL installError( sal_Int32 nErrorCode, sal_Int32 nMinorCode = TASKHANDLER_NO_ERROR ) { @@ -132,7 +119,7 @@ namespace fileaccess { return m_nMinorCode; } - + com::sun::star::uno::Reference< com::sun::star::ucb::XProgressHandler > SAL_CALL getProgressHandler() { @@ -147,43 +134,42 @@ namespace fileaccess { if( ! m_xInteractionHandler.is() && m_xCommandEnvironment.is() ) m_xInteractionHandler = m_xCommandEnvironment->getInteractionHandler(); - + return m_xInteractionHandler; } - + com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > SAL_CALL getCommandEnvironment() { return m_xCommandEnvironment; } - + }; // end class TaskHandling - - + + typedef std::hash_map< sal_Int32,TaskHandling,std::hash< sal_Int32 > > TaskMap; - - + + private: osl::Mutex m_aMutex; - sal_Int32 m_nCommandId; + sal_Int32 m_nCommandId; TaskMap m_aTaskMap; - + public: - + TaskManager(); virtual ~TaskManager(); - - void SAL_CALL startTask( + + void SAL_CALL startTask( sal_Int32 CommandId, const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xCommandEnv ) throw( com::sun::star::ucb::DuplicateCommandIdentifierException ); - + sal_Int32 SAL_CALL getCommandId( void ); void SAL_CALL abort( sal_Int32 CommandId ); - bool SAL_CALL isAborted( sal_Int32 CommandId ); - + /** * The error code may be one of the error codes defined in @@ -192,20 +178,20 @@ namespace fileaccess */ void SAL_CALL clearError(); - + void SAL_CALL installError( sal_Int32 CommandId, sal_Int32 ErrorCode, sal_Int32 minorCode = TASKHANDLER_NO_ERROR ); - -// void SAL_CALL installError( sal_Int32 CommandId, -// sal_Int32 ErrorCode, -// rtl::OUString message ); - -// void SAL_CALL installError( sal_Int32 CommandId, -// sal_Int32 ErrorCode, -// rtl::OUString message ); - + +// void SAL_CALL installError( sal_Int32 CommandId, +// sal_Int32 ErrorCode, +// rtl::OUString message ); + +// void SAL_CALL installError( sal_Int32 CommandId, +// sal_Int32 ErrorCode, +// rtl::OUString message ); + void SAL_CALL retrieveError( sal_Int32 CommandId, sal_Int32 &ErrorCode, sal_Int32 &minorCode); @@ -214,36 +200,26 @@ namespace fileaccess * Deinstalls the task and evaluates a possibly set error code. * "endTask" throws in case an error code is set the corresponding exception. */ - + void SAL_CALL endTask( sal_Int32 CommandId, // the physical URL of the object const rtl::OUString& aUnqPath, BaseContent* pContent); - - + + /** * Handles an interactionrequest */ - + void SAL_CALL handleTask( sal_Int32 CommandId, const com::sun::star::uno::Reference< com::sun::star::task::XInteractionRequest >& request ); - + /** * Clears any error which are set on the commandid */ - - void SAL_CALL clearError( sal_Int32 ); - - - com::sun::star::uno::Reference< com::sun::star::task::XInteractionHandler > SAL_CALL - getInteractionHandler( sal_Int32 CommandId ); - - com::sun::star::uno::Reference< com::sun::star::ucb::XProgressHandler > SAL_CALL - getProgressHandler( sal_Int32 CommandId ); - com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > SAL_CALL - getCommandEnvironment( sal_Int32 CommandId ); + void SAL_CALL clearError( sal_Int32 ); }; - + } // end namespace TaskHandling diff --git a/ucb/source/ucp/file/makefile.mk b/ucb/source/ucp/file/makefile.mk index d03983bca0..b11fdd8081 100644 --- a/ucb/source/ucp/file/makefile.mk +++ b/ucb/source/ucp/file/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.19 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/prov.cxx b/ucb/source/ucp/file/prov.cxx index 17137c8028..1c4f268e93 100644 --- a/ucb/source/ucp/file/prov.cxx +++ b/ucb/source/ucp/file/prov.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: prov.cxx,v $ - * $Revision: 1.47 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/prov.hxx b/ucb/source/ucp/file/prov.hxx index 05956fda04..30fc55b9fc 100644 --- a/ucb/source/ucp/file/prov.hxx +++ b/ucb/source/ucp/file/prov.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: prov.hxx,v $ - * $Revision: 1.16 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/file/shell.cxx b/ucb/source/ucp/file/shell.cxx index 8e3ed6d46b..dff5db9616 100644 --- a/ucb/source/ucp/file/shell.cxx +++ b/ucb/source/ucp/file/shell.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: shell.cxx,v $ - * $Revision: 1.98 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -46,23 +43,18 @@ #include <com/sun/star/ucb/NameClash.hpp> #include <com/sun/star/ucb/XContentIdentifier.hpp> #include <com/sun/star/lang/XComponent.hpp> -#ifndef _COM_SUN_STAR_UCB_XCONTENTACCESS_ #include <com/sun/star/ucb/XContentAccess.hpp> -#endif -#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBBUTE_HPP_ #include <com/sun/star/beans/PropertyAttribute.hpp> -#endif #include <com/sun/star/io/XSeekable.hpp> #include <com/sun/star/io/XTruncate.hpp> #include <com/sun/star/ucb/OpenCommandArgument.hpp> #include <com/sun/star/ucb/XPropertySetRegistryFactory.hpp> #include <com/sun/star/ucb/TransferInfo.hpp> +#include <com/sun/star/ucb/ContentInfoAttribute.hpp> #include <com/sun/star/beans/PropertyChangeEvent.hpp> #include <com/sun/star/beans/XPropertiesChangeListener.hpp> #include <rtl/string.hxx> -#ifndef _FILERROR_HXX_ #include "filerror.hxx" -#endif #include "filglob.hxx" #include "filcmd.hxx" #include "filinpstr.hxx" @@ -188,9 +180,10 @@ shell::shell( const uno::Reference< lang::XMultiServiceFactory >& xMultiServiceF IsHidden( rtl::OUString::createFromAscii( "IsHidden" ) ), ContentType( rtl::OUString::createFromAscii( "ContentType" ) ), IsReadOnly( rtl::OUString::createFromAscii( "IsReadOnly" ) ), + CreatableContentsInfo( rtl::OUString::createFromAscii( "CreatableContentsInfo" ) ), FolderContentType( rtl::OUString::createFromAscii( "application/vnd.sun.staroffice.fsys-folder" ) ), FileContentType( rtl::OUString::createFromAscii( "application/vnd.sun.staroffice.fsys-file" ) ), - m_sCommandInfo( 8 ) + m_sCommandInfo( 9 ) { // Title m_aDefaultProperties.insert( MyProperty( true, @@ -294,7 +287,7 @@ shell::shell( const uno::Reference< lang::XMultiServiceFactory >& xMultiServiceF | beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ) ); - // Remote + // Hidden m_aDefaultProperties.insert( MyProperty( true, @@ -312,7 +305,6 @@ shell::shell( const uno::Reference< lang::XMultiServiceFactory >& xMultiServiceF #endif - // ContentType uno::Any aAny; aAny <<= rtl::OUString(); @@ -358,6 +350,17 @@ shell::shell( const uno::Reference< lang::XMultiServiceFactory >& xMultiServiceF | beans::PropertyAttribute::BOUND ) ); + // CreatableContentsInfo + m_aDefaultProperties.insert( MyProperty( true, + CreatableContentsInfo, + -1 , + getCppuType( static_cast< const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + uno::Any(), + beans::PropertyState_DEFAULT_VALUE, + beans::PropertyAttribute::MAYBEVOID + | beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) ); + // Commands m_sCommandInfo[0].Name = rtl::OUString::createFromAscii( "getCommandInfo" ); m_sCommandInfo[0].Handle = -1; @@ -391,6 +394,9 @@ shell::shell( const uno::Reference< lang::XMultiServiceFactory >& xMultiServiceF m_sCommandInfo[7].Handle = -1; m_sCommandInfo[7].ArgType = getCppuType( static_cast< InsertCommandArgument* > ( 0 ) ); + m_sCommandInfo[7].Name = rtl::OUString::createFromAscii( "createNewContent" ); + m_sCommandInfo[7].Handle = -1; + m_sCommandInfo[7].ArgType = getCppuType( static_cast< ucb::ContentInfo * > ( 0 ) ); if(m_bWithConfig) { @@ -900,7 +906,7 @@ shell::setv( const rtl::OUString& aUnqPath, aFile.open(OpenFlag_Write) != osl::FileBase::E_None || aFile.setSize(sal_uInt64(newSize)) != osl::FileBase::E_None || aFile.close() != osl::FileBase::E_None; - + if( err ) { --propChanged; // unsuccessful setting @@ -1131,7 +1137,7 @@ shell::move( sal_Int32 CommandId, if( srcUnqPath == dstUnqPathIn ) return; // <-- - // + // osl::FileBase::RC nError; rtl::OUString dstUnqPath( dstUnqPathIn ); @@ -1597,7 +1603,7 @@ shell::remove( sal_Int32 CommandId, nError = aDirectory.getNextItem( aItem ); while( nError == osl::FileBase::E_None ) { - nError = aItem.getFileStatus( aStatus ); + nError = aItem.getFileStatus( aStatus ); if( nError != osl::FileBase::E_None || ! aStatus.isValid( nMask ) ) { installError( CommandId, @@ -1623,7 +1629,7 @@ shell::remove( sal_Int32 CommandId, nError = aDirectory.getNextItem( aItem ); } - aDirectory.close(); + aDirectory.close(); if( ! whileSuccess ) return sal_False; // error code is installed @@ -1907,7 +1913,7 @@ shell::write( sal_Int32 CommandId, err ); bSuccess = sal_False; } - + err = aFile.close(); if( err != osl::FileBase::E_None ) { @@ -2297,9 +2303,9 @@ shell::commit( const shell::ContentMap::iterator& it, sal_Bool isDirectory,isFile,isVolume,isRemoveable,isRemote,isFloppy,isCompactDisc; - sal_Int64 dirSize = 0;
-
- if( aFileStatus.isValid( FileStatusMask_FileSize ) )
+ sal_Int64 dirSize = 0; + + if( aFileStatus.isValid( FileStatusMask_FileSize ) ) dirSize = aFileStatus.getFileSize(); if( aFileStatus.isValid( FileStatusMask_Type ) ) @@ -2320,7 +2326,7 @@ shell::commit( const shell::ContentMap::iterator& it, isFile = osl::FileStatus::Regular == aFileStatus2.getFileType(); - if( aFileStatus2.isValid( FileStatusMask_FileSize ) )
+ if( aFileStatus2.isValid( FileStatusMask_FileSize ) ) dirSize = aFileStatus2.getFileSize(); } else @@ -2346,17 +2352,17 @@ shell::commit( const shell::ContentMap::iterator& it, osl::FileStatus::Regular == aFileStatus.getFileType(); } - aAny <<= isVolume; it1 = properties.find( MyProperty( IsVolume ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isVolume ) ); - aAny <<= isDirectory; it1 = properties.find( MyProperty( IsFolder ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isDirectory ) ); - aAny <<= isFile; it1 = properties.find( MyProperty( IsDocument ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isFile ) ); osl::VolumeInfo aVolumeInfo( VolumeInfoMask_Attributes ); if( isVolume && @@ -2369,44 +2375,51 @@ shell::commit( const shell::ContentMap::iterator& it, isCompactDisc = aVolumeInfo.getCompactDiscFlag(); isFloppy = aVolumeInfo.getFloppyDiskFlag(); - aAny <<= isRemote; it1 = properties.find( MyProperty( IsRemote ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isRemote ) ); - aAny <<= isRemoveable; it1 = properties.find( MyProperty( IsRemoveable ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isRemoveable ) ); - aAny <<= isCompactDisc; it1 = properties.find( MyProperty( IsCompactDisc ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isCompactDisc ) ); - aAny <<= isFloppy; it1 = properties.find( MyProperty( IsFloppy ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( isFloppy ) ); } else { sal_Bool dummy = false; aAny <<= dummy; it1 = properties.find( MyProperty( IsRemote ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( aAny ); + it1 = properties.find( MyProperty( IsRemoveable ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( aAny ); + it1 = properties.find( MyProperty( IsCompactDisc ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( aAny ); + it1 = properties.find( MyProperty( IsFloppy ) ); - if( it1 != properties.end() ) it1->setValue( aAny ); + if( it1 != properties.end() ) + it1->setValue( aAny ); } } - - it1 = properties.find( MyProperty( Size ) ); - if( it1 != properties.end() ) + else { - aAny <<= dirSize;
- it1->setValue( aAny ); + isDirectory = sal_False; } + it1 = properties.find( MyProperty( Size ) ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( dirSize ) ); it1 = properties.find( MyProperty( IsReadOnly ) ); if( it1 != properties.end() ) @@ -2415,8 +2428,7 @@ shell::commit( const shell::ContentMap::iterator& it, { sal_uInt64 Attr = aFileStatus.getAttributes(); sal_Bool readonly = ( Attr & Attribute_ReadOnly ) != 0; - aAny <<= readonly; - it1->setValue( aAny ); + it1->setValue( uno::makeAny( readonly ) ); } } @@ -2427,13 +2439,11 @@ shell::commit( const shell::ContentMap::iterator& it, { sal_uInt64 Attr = aFileStatus.getAttributes(); sal_Bool ishidden = ( Attr & Attribute_Hidden ) != 0; - aAny <<= ishidden; - it1->setValue( aAny ); + it1->setValue( uno::makeAny( ishidden ) ); } } it1 = properties.find( MyProperty( DateModified ) ); - if( it1 != properties.end() ) { if( aFileStatus.isValid( FileStatusMask_ModifyTime ) ) @@ -2441,7 +2451,7 @@ shell::commit( const shell::ContentMap::iterator& it, TimeValue temp = aFileStatus.getModifyTime(); // Convert system time to local time (for EA) - TimeValue myLocalTime; + TimeValue myLocalTime; osl_getLocalTimeFromSystemTime( &temp, &myLocalTime ); oslDateTime myDateTime; @@ -2455,11 +2465,16 @@ shell::commit( const shell::ContentMap::iterator& it, aDateTime.Day = myDateTime.Day; aDateTime.Month = myDateTime.Month; aDateTime.Year = myDateTime.Year; - aAny <<= aDateTime; - it1->setValue( aAny ); + it1->setValue( uno::makeAny( aDateTime ) ); } } + it1 = properties.find( MyProperty( CreatableContentsInfo ) ); + if( it1 != properties.end() ) + it1->setValue( uno::makeAny( + isDirectory || !aFileStatus.isValid( FileStatusMask_Type ) + ? queryCreatableContentsInfo() + : uno::Sequence< ucb::ContentInfo >() ) ); } @@ -2494,12 +2509,12 @@ shell::getv( { // Assume failure aIsRegular = false; - osl::FileBase::RC result = osl::FileBase::E_INVAL; - osl::DirectoryItem aTargetItem; + osl::FileBase::RC result = osl::FileBase::E_INVAL; + osl::DirectoryItem aTargetItem; osl::DirectoryItem::get( aFileStatus.getLinkTargetURL(), aTargetItem ); if ( aTargetItem.is() ) { - osl::FileStatus aTargetStatus( FileStatusMask_Type ); + osl::FileStatus aTargetStatus( FileStatusMask_Type ); if ( osl::FileBase::E_None == ( result = aTargetItem.getFileStatus( aTargetStatus ) ) ) @@ -3000,6 +3015,31 @@ shell::copyPersistentSet( const rtl::OUString& srcUnqPath, } // end for( sal_Int... } +uno::Sequence< ucb::ContentInfo > shell::queryCreatableContentsInfo() +{ + uno::Sequence< ucb::ContentInfo > seq(2); + + // file + seq[0].Type = FileContentType; + seq[0].Attributes = ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM + | ucb::ContentInfoAttribute::KIND_DOCUMENT; + + uno::Sequence< beans::Property > props( 1 ); + props[0] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< rtl::OUString* >( 0 ) ), + beans::PropertyAttribute::MAYBEVOID + | beans::PropertyAttribute::BOUND ); + seq[0].Properties = props; + + // folder + seq[1].Type = FolderContentType; + seq[1].Attributes = ucb::ContentInfoAttribute::KIND_FOLDER; + seq[1].Properties = props; + return seq; +} + /*******************************************************************************/ /* */ /* some misceancellous static functions */ diff --git a/ucb/source/ucp/file/shell.hxx b/ucb/source/ucp/file/shell.hxx index 89e2324d74..e7e67e36f3 100644 --- a/ucb/source/ucp/file/shell.hxx +++ b/ucb/source/ucp/file/shell.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: shell.hxx,v $ - * $Revision: 1.26 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -54,21 +51,18 @@ #include <com/sun/star/ucb/XCommandProcessor.hpp> #include <com/sun/star/io/XOutputStream.hpp> #include <com/sun/star/io/XInputStream.hpp> -#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_protected #include <com/sun/star/beans/XPropertySetInfo.hpp> -#endif #include <com/sun/star/beans/XPropertiesChangeNotifier.hpp> #include <com/sun/star/ucb/NumberedSortingInfo.hpp> #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/ucb/XContentProvider.hpp> -#ifndef _COM_SUN_STAR_UCB_XDYNAMICRESULTSET_HPP__ #include <com/sun/star/ucb/XDynamicResultSet.hpp> -#endif #include <com/sun/star/beans/XPropertyContainer.hpp> #include <com/sun/star/beans/XPropertyAccess.hpp> #include <com/sun/star/ucb/XPropertySetRegistryFactory.hpp> #include <com/sun/star/ucb/TransferInfo.hpp> +#include <com/sun/star/ucb/ContentInfo.hpp> #include "filtask.hxx" #include "filnot.hxx" @@ -307,7 +301,7 @@ namespace fileaccess { /********************************************************************************/ - /* transfer-commandos */ + /* transfer-commands */ /********************************************************************************/ /** @@ -398,6 +392,9 @@ namespace fileaccess { void SAL_CALL insertDefaultProperties( const rtl::OUString& aUnqPath ); + com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > + queryCreatableContentsInfo(); + /******************************************************************************/ /* */ @@ -416,11 +413,10 @@ namespace fileaccess { com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > m_xMultiServiceFactory; com::sun::star::uno::Reference< com::sun::star::ucb::XPropertySetRegistry > m_xFileRegistry; - private: /********************************************************************************/ - /* get eventListeners */ + /* get eventListeners */ /********************************************************************************/ std::list< ContentEventNotifier* >* SAL_CALL @@ -442,7 +438,7 @@ namespace fileaccess { /********************************************************************************/ - /* notify eventListeners */ + /* notify eventListeners */ /********************************************************************************/ void SAL_CALL notifyPropertyChanges( @@ -580,6 +576,7 @@ namespace fileaccess { const rtl::OUString IsHidden; const rtl::OUString ContentType; const rtl::OUString IsReadOnly; + const rtl::OUString CreatableContentsInfo; public: diff --git a/ucb/source/ucp/ftp/curl.hxx b/ucb/source/ucp/ftp/curl.hxx index ed6fe22cd0..761a9466af 100644 --- a/ucb/source/ucp/ftp/curl.hxx +++ b/ucb/source/ucp/ftp/curl.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: curl.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcfunc.cxx b/ucb/source/ucp/ftp/ftpcfunc.cxx index 9ec3edf0c0..1f4be95862 100644 --- a/ucb/source/ucp/ftp/ftpcfunc.cxx +++ b/ucb/source/ucp/ftp/ftpcfunc.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcfunc.cxx,v $ - * $Revision: 1.7.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcfunc.hxx b/ucb/source/ucp/ftp/ftpcfunc.hxx index 95a6cd00cb..63e98df698 100644 --- a/ucb/source/ucp/ftp/ftpcfunc.hxx +++ b/ucb/source/ucp/ftp/ftpcfunc.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcfunc.hxx,v $ - * $Revision: 1.6.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcontainer.hxx b/ucb/source/ucp/ftp/ftpcontainer.hxx index e49a8f7166..8d8829bcbe 100644 --- a/ucb/source/ucp/ftp/ftpcontainer.hxx +++ b/ucb/source/ucp/ftp/ftpcontainer.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontainer.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcontent.cxx b/ucb/source/ucp/ftp/ftpcontent.cxx index c3e6563d38..e01a209bcf 100644 --- a/ucb/source/ucp/ftp/ftpcontent.cxx +++ b/ucb/source/ucp/ftp/ftpcontent.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontent.cxx,v $ - * $Revision: 1.29 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -106,19 +103,6 @@ using namespace com::sun::star::sdbc; FTPContent::FTPContent( const Reference< XMultiServiceFactory >& rxSMgr, FTPContentProvider* pProvider, - const Reference< XContentIdentifier >& Identifier) - : ContentImplHelper(rxSMgr,pProvider,Identifier), - m_pFCP(pProvider), - m_aFTPURL(Identifier->getContentIdentifier(), - pProvider), - m_bInserted(false), - m_bTitleSet(false) -{ -} - - -FTPContent::FTPContent( const Reference< XMultiServiceFactory >& rxSMgr, - FTPContentProvider* pProvider, const Reference< XContentIdentifier >& Identifier, const FTPURL& aFTPURL) : ContentImplHelper(rxSMgr,pProvider,Identifier), @@ -175,9 +159,9 @@ XINTERFACE_IMPL_6( FTPContent, //========================================================================= XTYPEPROVIDER_IMPL_6( FTPContent, - XTypeProvider, - XServiceInfo, - XContent, + XTypeProvider, + XServiceInfo, + XContent, XCommandProcessor, XContentCreator, XChild); @@ -231,7 +215,7 @@ void SAL_CALL FTPContent::abort( sal_Int32 /*CommandId*/ ) /***************************************************************************/ /* */ -/* Interne Implklasse */ +/* Internal implementation class. */ /* */ /***************************************************************************/ @@ -240,7 +224,7 @@ class ResultSetFactoryI : public ResultSetFactory { public: - + ResultSetFactoryI(const Reference<XMultiServiceFactory >& xSMgr, const Reference<XContentProvider >& xProvider, sal_Int32 nOpenMode, @@ -255,7 +239,7 @@ public: m_dirvec(dirvec) { } - + virtual ResultSetBase* createResultSet() { return new ResultSetI(m_xSMgr, @@ -265,9 +249,9 @@ public: m_seqSort, m_dirvec); } - + public: - + Reference< XMultiServiceFactory > m_xSMgr; Reference< XContentProvider > m_xProvider; sal_Int32 m_nOpenMode; @@ -306,10 +290,10 @@ Any SAL_CALL FTPContent::execute( CommandAbortedException, RuntimeException ) -{ +{ ACTION action(NOACTION); Any aRet; - + while(true) try { if(action == THROWAUTHENTICATIONREQUEST) { @@ -330,20 +314,20 @@ Any SAL_CALL FTPContent::execute( ::ENTITY_FIXED, m_aFTPURL.username(), ucbhelper::SimpleAuthenticationRequest - ::ENTITY_MODIFY, + ::ENTITY_MODIFY, aPassword)); - + Reference<XInteractionHandler> xInteractionHandler; if(Environment.is()) xInteractionHandler = Environment->getInteractionHandler(); - + if( xInteractionHandler.is()) { xInteractionHandler->handle(p.get()); - + Reference<XInterface> xSelection( p->getSelection().get()); - + if(Reference<XInteractionRetry>( xSelection,UNO_QUERY).is()) action = NOACTION; @@ -360,82 +344,101 @@ Any SAL_CALL FTPContent::execute( } aRet = p->getRequest(); } - -// if(aCommand.Name.compareToAscii( -// "getPropertyValues") == 0 && -// action != NOACTION) { -// // It is not allowed to throw if -// // command is getPropertyValues -// rtl::Reference<ucbhelper::PropertyValueSet> xRow = -// new ucbhelper::PropertyValueSet(m_xSMgr); -// Sequence<Property> Properties; -// aCommand.Argument >>= Properties; -// for(int i = 0; i < Properties.getLength(); ++i) -// xRow->appendVoid(Properties[i]); -// aRet <<= Reference<XRow>(xRow.get()); -// return aRet; -// } - - if(action == THROWAUTHENTICATIONREQUEST) { + +// if(aCommand.Name.compareToAscii( +// "getPropertyValues") == 0 && +// action != NOACTION) { +// // It is not allowed to throw if +// // command is getPropertyValues +// rtl::Reference<ucbhelper::PropertyValueSet> xRow = +// new ucbhelper::PropertyValueSet(m_xSMgr); +// Sequence<Property> Properties; +// aCommand.Argument >>= Properties; +// for(int i = 0; i < Properties.getLength(); ++i) +// xRow->appendVoid(Properties[i]); +// aRet <<= Reference<XRow>(xRow.get()); +// return aRet; +// } + + switch (action) + { + case NOACTION: + break; + + case THROWAUTHENTICATIONREQUEST: ucbhelper::cancelCommandExecution( aRet, Reference<XCommandEnvironment>(0)); - } else if(action == THROWACCESSDENIED) { - Sequence<Any> seq(1); - PropertyValue value; - value.Name = - rtl::OUString::createFromAscii("Uri"); - value.Handle = -1; - value.Value <<= m_aFTPURL.ident(false,false); - value.State = PropertyState_DIRECT_VALUE; - seq[0] <<= value; - ucbhelper::cancelCommandExecution( - IOErrorCode_ACCESS_DENIED, - seq, - Environment); - } else if(action == THROWINTERACTIVECONNECT) { - InteractiveNetworkConnectException - excep; - excep.Server = m_aFTPURL.host(); - aRet <<= excep; - ucbhelper::cancelCommandExecution( - aRet, - Environment); - } else if(action == THROWRESOLVENAME) { - InteractiveNetworkResolveNameException - excep; - excep.Server = m_aFTPURL.host(); - aRet <<= excep; - ucbhelper::cancelCommandExecution( - aRet, - Environment); - } else if(action == THROWNOFILE) { - Sequence<Any> seq(1); - PropertyValue value; - value.Name = - rtl::OUString::createFromAscii("Uri"); - value.Handle = -1; - value.Value <<= m_aFTPURL.ident(false,false); - value.State = PropertyState_DIRECT_VALUE; - seq[0] <<= value; - ucbhelper::cancelCommandExecution( - IOErrorCode_NO_FILE, - seq, - Environment); - } else if(action == THROWQUOTE || - action == THROWGENERAL) { + break; + + case THROWACCESSDENIED: + { + Sequence<Any> seq(1); + PropertyValue value; + value.Name = rtl::OUString::createFromAscii("Uri"); + value.Handle = -1; + value.Value <<= m_aFTPURL.ident(false,false); + value.State = PropertyState_DIRECT_VALUE; + seq[0] <<= value; + ucbhelper::cancelCommandExecution( + IOErrorCode_ACCESS_DENIED, + seq, + Environment); + break; + } + case THROWINTERACTIVECONNECT: + { + InteractiveNetworkConnectException excep; + excep.Server = m_aFTPURL.host(); + aRet <<= excep; + ucbhelper::cancelCommandExecution( + aRet, + Environment); + break; + } + case THROWRESOLVENAME: + { + InteractiveNetworkResolveNameException excep; + excep.Server = m_aFTPURL.host(); + aRet <<= excep; + ucbhelper::cancelCommandExecution( + aRet, + Environment); + break; + } + case THROWNOFILE: + { + Sequence<Any> seq(1); + PropertyValue value; + value.Name = rtl::OUString::createFromAscii("Uri"); + value.Handle = -1; + value.Value <<= m_aFTPURL.ident(false,false); + value.State = PropertyState_DIRECT_VALUE; + seq[0] <<= value; + ucbhelper::cancelCommandExecution( + IOErrorCode_NO_FILE, + seq, + Environment); + break; + } + case THROWQUOTE: + case THROWGENERAL: ucbhelper::cancelCommandExecution( IOErrorCode_GENERAL, Sequence<Any>(0), - Environment); + Environment); + break; } - - + if(aCommand.Name.compareToAscii("getPropertyValues") == 0) { Sequence<Property> Properties; if(!(aCommand.Argument >>= Properties)) { - aRet <<= IllegalArgumentException(); + aRet <<= IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >(this), + -1); ucbhelper::cancelCommandExecution(aRet,Environment); } @@ -444,12 +447,16 @@ Any SAL_CALL FTPContent::execute( else if(aCommand.Name.compareToAscii("setPropertyValues") == 0) { Sequence<PropertyValue> propertyValues; - + if( ! ( aCommand.Argument >>= propertyValues ) ) { - aRet <<= IllegalArgumentException(); + aRet <<= IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >(this), + -1); ucbhelper::cancelCommandExecution(aRet,Environment); } - + aRet <<= setPropertyValues(propertyValues); } else if(aCommand.Name.compareToAscii("getCommandInfo") == 0) { @@ -464,7 +471,11 @@ Any SAL_CALL FTPContent::execute( { InsertCommandArgument aInsertArgument; if ( ! ( aCommand.Argument >>= aInsertArgument ) ) { - aRet <<= IllegalArgumentException(); + aRet <<= IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >(this), + -1); ucbhelper::cancelCommandExecution(aRet,Environment); } insert(aInsertArgument,Environment); @@ -476,17 +487,22 @@ Any SAL_CALL FTPContent::execute( else if(aCommand.Name.compareToAscii( "open" ) == 0) { OpenCommandArgument2 aOpenCommand; if ( !( aCommand.Argument >>= aOpenCommand ) ) { - aRet <<= IllegalArgumentException(); + aRet <<= IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >(this), + -1); + ucbhelper::cancelCommandExecution(aRet,Environment); } - + if(aOpenCommand.Mode == OpenMode::DOCUMENT) { // Open as a document Reference<XActiveDataSink> xActiveDataSink(aOpenCommand.Sink,UNO_QUERY); Reference< XOutputStream > xOutputStream(aOpenCommand.Sink,UNO_QUERY); - + if(xActiveDataSink.is()) { xActiveDataSink->setInputStream( new FTPInputStream(m_aFTPURL.open())); @@ -506,17 +522,17 @@ Any SAL_CALL FTPContent::execute( byte_seq.realloc(n); xOutputStream->writeBytes(byte_seq); } catch(const NotConnectedException&) { - + } catch(const BufferSizeExceededException&) { - + } catch(const IOException&) { - + } } if(n) { Sequence<Any> seq(1); PropertyValue value; - value.Name = + value.Name = rtl::OUString::createFromAscii("Uri"); value.Handle = -1; value.Value <<= m_aFTPURL.ident(false,false); @@ -529,7 +545,10 @@ Any SAL_CALL FTPContent::execute( } } else { - aRet <<= UnsupportedDataSinkException(); + aRet <<= UnsupportedDataSinkException( + rtl::OUString(), + static_cast< cppu::OWeakObject * >(this), + aOpenCommand.Sink); ucbhelper::cancelCommandExecution(aRet,Environment); } } @@ -553,33 +572,56 @@ Any SAL_CALL FTPContent::execute( aRet <<= xSet; } else if(aOpenCommand.Mode == - OpenMode::DOCUMENT_SHARE_DENY_NONE || + OpenMode::DOCUMENT_SHARE_DENY_NONE || aOpenCommand.Mode == OpenMode::DOCUMENT_SHARE_DENY_WRITE) { // Unsupported OpenMode - aRet <<= UnsupportedOpenModeException(); + aRet <<= UnsupportedOpenModeException( + rtl::OUString(), + static_cast< cppu::OWeakObject * >(this), + static_cast< sal_Int16 >(aOpenCommand.Mode)); ucbhelper::cancelCommandExecution(aRet,Environment); } else { - // IllegalArgumentException:: No OpenMode - aRet <<= IllegalArgumentException(); + aRet <<= IllegalArgumentException( + rtl::OUString::createFromAscii( + "Unexpected OpenMode!" ), + static_cast< cppu::OWeakObject * >(this), + -1); + ucbhelper::cancelCommandExecution(aRet,Environment); } - } - else { - aRet <<= UnsupportedCommandException(); + } else if(aCommand.Name.compareToAscii("createNewContent") == 0) { + ContentInfo aArg; + if (!(aCommand.Argument >>= aArg)) { + ucbhelper::cancelCommandExecution( + makeAny( + IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >(this), + -1)), + Environment); + // Unreachable + } + aRet <<= createNewContent(aArg); + } else { + aRet <<= UnsupportedCommandException( + aCommand.Name, + static_cast< cppu::OWeakObject * >(this)); ucbhelper::cancelCommandExecution(aRet,Environment); } - - return aRet; + + return aRet; } catch(const curl_exception& e) { if(e.code() == CURLE_COULDNT_CONNECT) action = THROWINTERACTIVECONNECT; else if(e.code() == CURLE_COULDNT_RESOLVE_HOST ) action = THROWRESOLVENAME; else if(e.code() == CURLE_FTP_USER_PASSWORD_INCORRECT || - e.code() == CURLE_BAD_PASSWORD_ENTERED || - e.code() == CURLE_FTP_WEIRD_PASS_REPLY ) + e.code() == CURLE_LOGIN_DENIED || + e.code() == CURLE_BAD_PASSWORD_ENTERED || + e.code() == CURLE_FTP_WEIRD_PASS_REPLY) action = THROWAUTHENTICATIONREQUEST; else if(e.code() == CURLE_FTP_ACCESS_DENIED) action = THROWACCESSDENIED; @@ -588,7 +630,7 @@ Any SAL_CALL FTPContent::execute( else if(e.code() == CURLE_FTP_COULDNT_RETR_FILE) action = THROWNOFILE; else - // nothing known about the course of the error + // nothing known about the cause of the error action = THROWGENERAL; } } @@ -602,14 +644,22 @@ Any SAL_CALL FTPContent::execute( "vnd.sun.staroffice.ftp-folder") Sequence<ContentInfo > SAL_CALL -FTPContent::queryCreatableContentsInfo( ) +FTPContent::queryCreatableContentsInfo( ) + throw (RuntimeException) +{ + return queryCreatableContentsInfo_Static(); +} + +// static +Sequence<ContentInfo > +FTPContent::queryCreatableContentsInfo_Static( ) throw (RuntimeException) { Sequence< ContentInfo > seq(2); - + seq[0].Type = FTP_FILE; seq[0].Attributes = ContentInfoAttribute::INSERT_WITH_INPUTSTREAM - | ContentInfoAttribute::KIND_DOCUMENT; + | ContentInfoAttribute::KIND_DOCUMENT; Sequence< Property > props( 1 ); props[0] = Property( rtl::OUString::createFromAscii( "Title" ), @@ -620,14 +670,13 @@ FTPContent::queryCreatableContentsInfo( ) seq[0].Properties = props; // folder - seq[1].Type = FTP_FOLDER; + seq[1].Type = FTP_FOLDER; seq[1].Attributes = ContentInfoAttribute::KIND_FOLDER; seq[1].Properties = props; return seq; } - Reference<XContent > SAL_CALL FTPContent::createNewContent( const ContentInfo& Info ) throw (RuntimeException) @@ -655,16 +704,16 @@ FTPContent::getParent( ) Reference<XContent> xContent(m_xProvider->queryContent(xIdent)); return Reference<XInterface>(xContent,UNO_QUERY); } - + void SAL_CALL FTPContent::setParent(const Reference<XInterface >& /*Parent*/ ) - throw (NoSupportException, + throw (NoSupportException, RuntimeException) { throw NoSupportException(); } - + rtl::OUString FTPContent::getParentURL() @@ -677,11 +726,11 @@ class InsertData : public CurlInput { public: - + InsertData(const Reference<XInputStream>& xInputStream) : m_xInputStream(xInputStream) { } virtual ~InsertData() {} - + // returns the number of bytes actually read virtual sal_Int32 read(sal_Int8 *dest,sal_Int32 nBytesRequested); @@ -695,9 +744,9 @@ private: sal_Int32 InsertData::read(sal_Int8 *dest,sal_Int32 nBytesRequested) { sal_Int32 m = 0; - + if(m_xInputStream.is()) { - Sequence<sal_Int8> seq(nBytesRequested); + Sequence<sal_Int8> seq(nBytesRequested); m = m_xInputStream->readBytes(seq,nBytesRequested); rtl_copyMemory(dest,seq.getConstArray(),m); } @@ -720,15 +769,15 @@ void FTPContent::insert(const InsertCommandArgument& aInsertCommand, if(m_bInserted && m_aInfo.Type == FTP_FILE && - !aInsertCommand.Data.is()) + !aInsertCommand.Data.is()) { MissingInputStreamException excep; Any aAny; aAny <<= excep; ucbhelper::cancelCommandExecution(aAny,Env); } - + bool bReplace(aInsertCommand.ReplaceExisting); - + retry: try { if(m_aInfo.Type == FTP_FILE) { @@ -751,17 +800,17 @@ void FTPContent::insert(const InsertCommandArgument& aInsertCommand, Reference<XInteractionHandler> xInt; if(Env.is()) xInt = Env->getInteractionHandler(); - + UnsupportedNameClashException excep; excep.NameClash = 0; //NameClash::ERROR; - + if(!xInt.is()) { Any aAny; aAny <<= excep; ucbhelper::cancelCommandExecution(aAny,Env); } - - XInteractionRequestImpl* p = + + XInteractionRequestImpl* p = new XInteractionRequestImpl(m_aFTPURL.child()); Reference<XInteractionRequest> req(p); xInt->handle(req); @@ -775,7 +824,7 @@ void FTPContent::insert(const InsertCommandArgument& aInsertCommand, else throw; } - + // May not be reached, because both mkdir and insert can throw curl- // exceptions m_bInserted = false; @@ -784,20 +833,23 @@ void FTPContent::insert(const InsertCommandArgument& aInsertCommand, -Reference< XRow > FTPContent::getPropertyValues( +Reference< XRow > FTPContent::getPropertyValues( const Sequence< Property >& seqProp, const Reference<XCommandEnvironment>& /*environment*/ ) { - rtl::Reference<ucbhelper::PropertyValueSet> xRow = + rtl::Reference<ucbhelper::PropertyValueSet> xRow = new ucbhelper::PropertyValueSet(m_xSMgr); - + FTPDirentry aDirEntry = m_aFTPURL.direntry(); - + for(sal_Int32 i = 0; i < seqProp.getLength(); ++i) { const rtl::OUString& Name = seqProp[i].Name; if(Name.compareToAscii("Title") == 0) xRow->appendString(seqProp[i],aDirEntry.m_aName); + else if(Name.compareToAscii("CreatableContentsInfo") == 0) + xRow->appendObject(seqProp[i], + makeAny(queryCreatableContentsInfo())); else if(aDirEntry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN) { if(Name.compareToAscii("ContentType") == 0) xRow->appendString(seqProp[i], @@ -829,7 +881,7 @@ Reference< XRow > FTPContent::getPropertyValues( } else xRow->appendVoid(seqProp[i]); } - + return Reference<XRow>(xRow.get()); } @@ -838,12 +890,9 @@ Reference< XRow > FTPContent::getPropertyValues( Sequence<Any> FTPContent::setPropertyValues( const Sequence<PropertyValue>& seqPropVal) { - Sequence<Property> props = - getProperties(Reference<XCommandEnvironment>(0)); - Sequence<Any> ret(seqPropVal.getLength()); Sequence<PropertyChangeEvent > evt; - + osl::MutexGuard aGuard(m_aMutex); for(sal_Int32 i = 0; i < ret.getLength(); ++i) { if(seqPropVal[i].Name.equalsAscii("Title")) { @@ -855,10 +904,10 @@ Sequence<Any> FTPContent::setPropertyValues( ret[i] <<= IllegalArgumentException(); continue; } - + if(m_bInserted) { m_aFTPURL.child(Title); - m_xIdentifier = + m_xIdentifier = new FTPContentIdentifier(m_aFTPURL.ident(false,false)); m_bTitleSet = true; } else @@ -879,21 +928,30 @@ Sequence<Any> FTPContent::setPropertyValues( ret[i] <<= excep; } } else { - // either not unknown or illegal + Sequence<Property> props = + getProperties(Reference<XCommandEnvironment>(0)); + + // either unknown or read-only ret[i] <<= UnknownPropertyException(); for(sal_Int32 j = 0; j < props.getLength(); ++j) if(props[j].Name == seqPropVal[i].Name) { - ret[i] <<= IllegalAccessException(); + ret[i] <<= IllegalAccessException( + rtl::OUString::createFromAscii( + "Property is read-only!"), + //props[j].Attributes & PropertyAttribute::READONLY + // ? "Property is read-only!" + // : "Access denied!"), + static_cast< cppu::OWeakObject * >( this )); break; } } } - + if(evt.getLength()) { // title has changed notifyPropertiesChange(evt); exchange(new FTPContentIdentifier(m_aFTPURL.ident(false,false))); } - + return ret; } diff --git a/ucb/source/ucp/ftp/ftpcontent.hxx b/ucb/source/ucp/ftp/ftpcontent.hxx index 0d8cd8e425..9dcb8103a5 100644 --- a/ucb/source/ucp/ftp/ftpcontent.hxx +++ b/ucb/source/ucp/ftp/ftpcontent.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontent.hxx,v $ - * $Revision: 1.13 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -51,30 +48,17 @@ namespace ftp { //========================================================================= - + // UNO service name for the content. #define FTP_CONTENT_SERVICE_NAME "com.sun.star.ucb.FTPContent" //========================================================================= - struct ContentProperties - { - ::rtl::OUString aTitle; // Title - ::rtl::OUString aContentType; // ContentType - sal_Bool bIsDocument; // IsDocument - sal_Bool bIsFolder; // IsFolder - - ContentProperties() - : bIsDocument( sal_True ), bIsFolder( sal_False ) {} - }; - -//========================================================================= - class FTPContentProvider; //========================================================================= - - class FTPContent + + class FTPContent : public ::ucbhelper::ContentImplHelper, public com::sun::star::ucb::XContentCreator { @@ -84,23 +68,17 @@ namespace ftp ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, FTPContentProvider* pProvider, const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XContentIdentifier >& Identifier); - - FTPContent( const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, - FTPContentProvider* pProvider, - const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentIdentifier >& Identifier, const FTPURL& FtpUrl); - + FTPContent( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, FTPContentProvider* pProvider, const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentIdentifier >& Identifier, const com::sun::star::ucb::ContentInfo& aInfo); - - + + virtual ~FTPContent(); // XInterface @@ -126,7 +104,7 @@ namespace ftp throw( com::sun::star::uno::Exception, com::sun::star::ucb::CommandAbortedException, com::sun::star::uno::RuntimeException ); - + virtual void SAL_CALL abort(sal_Int32 CommandId) throw( com::sun::star::uno::RuntimeException); @@ -134,62 +112,67 @@ namespace ftp // XContentCreator virtual com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > SAL_CALL - queryCreatableContentsInfo( ) + queryCreatableContentsInfo( ) throw (com::sun::star::uno::RuntimeException); - + virtual com::sun::star::uno::Reference< com::sun::star::ucb::XContent > SAL_CALL createNewContent( const com::sun::star::ucb::ContentInfo& Info ) throw (com::sun::star::uno::RuntimeException); - + // XChild - + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL - getParent( ) + getParent( ) throw (::com::sun::star::uno::RuntimeException); - + virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< - ::com::sun::star::uno::XInterface >& Parent ) - throw (::com::sun::star::lang::NoSupportException, + ::com::sun::star::uno::XInterface >& Parent ) + throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - + + + static com::sun::star::uno::Sequence< + com::sun::star::ucb::ContentInfo > + queryCreatableContentsInfo_Static( ) + throw (com::sun::star::uno::RuntimeException); private: - + FTPContentProvider *m_pFCP; FTPURL m_aFTPURL; - bool m_bInserted; + bool m_bInserted; bool m_bTitleSet; com::sun::star::ucb::ContentInfo m_aInfo; - + virtual com::sun::star::uno::Sequence< com::sun::star::beans::Property > getProperties( const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv ); - - - virtual com::sun::star::uno::Sequence< + + + virtual com::sun::star::uno::Sequence< com::sun::star::ucb::CommandInfo> getCommands(const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv); - - + + virtual ::rtl::OUString getParentURL(); - com::sun::star::uno::Reference<com::sun::star::sdbc::XRow> + com::sun::star::uno::Reference<com::sun::star::sdbc::XRow> getPropertyValues( const com::sun::star::uno::Sequence< com::sun::star::beans::Property>& seqProp, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment + com::sun::star::ucb::XCommandEnvironment >& Environment ); com::sun::star::uno::Sequence<com::sun::star::uno::Any> setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& seqPropVal); - + void insert(const com::sun::star::ucb::InsertCommandArgument&, const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment>&); diff --git a/ucb/source/ucp/ftp/ftpcontentcaps.cxx b/ucb/source/ucp/ftp/ftpcontentcaps.cxx index 7fc47b4cac..607ecbc4b0 100644 --- a/ucb/source/ucp/ftp/ftpcontentcaps.cxx +++ b/ucb/source/ucp/ftp/ftpcontentcaps.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontentcaps.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -49,7 +46,7 @@ using namespace ftp; uno::Sequence< beans::Property > FTPContent::getProperties( const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/) { - #define PROPS_COUNT 7 + #define PROPS_COUNT 8 static const beans::Property aPropsInfoTable[] = { @@ -57,54 +54,63 @@ uno::Sequence< beans::Property > FTPContent::getProperties( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ContentType" ) ), -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::READONLY + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsDocument" ) ), -1, getCppuBooleanType(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::READONLY + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ), -1, getCppuBooleanType(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::READONLY + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ), -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND - // | beans::PropertyAttribute::READONLY + // | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Size" ) ), -1, getCppuType( static_cast< const sal_Int64 * >( 0 ) ), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::READONLY + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DateCreated" ) ), -1, - getCppuType( static_cast< util::DateTime* >( 0 ) ), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::READONLY + getCppuType( static_cast< util::DateTime * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsReadOnly" ) ), -1, getCppuBooleanType(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::READONLY + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ), + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( + static_cast< const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) }; - return uno::Sequence< beans::Property >( aPropsInfoTable,PROPS_COUNT); + return uno::Sequence< beans::Property >( aPropsInfoTable, PROPS_COUNT ); } //========================================================================= @@ -112,15 +118,15 @@ uno::Sequence< beans::Property > FTPContent::getProperties( uno::Sequence< ucb::CommandInfo > FTPContent::getCommands( const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ ) { -// osl::MutexGuard aGuard( m_aMutex ); - +// osl::MutexGuard aGuard( m_aMutex ); + //================================================================= // // Supported commands // //================================================================= - #define COMMAND_COUNT 7 + #define COMMAND_COUNT 8 static const ucb::CommandInfo aCommandInfoTable[] = { @@ -133,44 +139,49 @@ uno::Sequence< ucb::CommandInfo > FTPContent::getCommands( getCppuVoidType() ), ucb::CommandInfo( - rtl::OUString( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ), -1, getCppuVoidType() ), ucb::CommandInfo( - rtl::OUString( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ), -1, - getCppuType( + getCppuType( static_cast< uno::Sequence< beans::Property > * >( 0 ) ) ), ucb::CommandInfo( - rtl::OUString( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ), -1, - getCppuType( + getCppuType( static_cast< uno::Sequence< beans::PropertyValue > * >( 0 ) ) ), ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ), -1, - getCppuType( + getCppuType( static_cast< ucb::OpenCommandArgument2 * >( 0 ) ) ), ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "insert" ) ), -1, - getCppuType( + getCppuType( static_cast< ucb::InsertCommandArgument * >( 0 ) ) ), ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "delete" ) ), -1, - getCppuType( static_cast< sal_Bool * >( 0 ) ) + getCppuBooleanType() + ), + ucb::CommandInfo( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) ) }; - - return uno::Sequence<ucb::CommandInfo>(aCommandInfoTable,COMMAND_COUNT); + + return uno::Sequence< ucb::CommandInfo >( aCommandInfoTable, COMMAND_COUNT ); } diff --git a/ucb/source/ucp/ftp/ftpcontentidentifier.cxx b/ucb/source/ucp/ftp/ftpcontentidentifier.cxx index dc6b550c4c..eaff30cce1 100644 --- a/ucb/source/ucp/ftp/ftpcontentidentifier.cxx +++ b/ucb/source/ucp/ftp/ftpcontentidentifier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontentidentifier.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcontentidentifier.hxx b/ucb/source/ucp/ftp/ftpcontentidentifier.hxx index 27038ca3df..d4f423b059 100644 --- a/ucb/source/ucp/ftp/ftpcontentidentifier.hxx +++ b/ucb/source/ucp/ftp/ftpcontentidentifier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontentidentifier.hxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcontentprovider.cxx b/ucb/source/ucp/ftp/ftpcontentprovider.cxx index 15fcf5378b..f0e1f09624 100644 --- a/ucb/source/ucp/ftp/ftpcontentprovider.cxx +++ b/ucb/source/ucp/ftp/ftpcontentprovider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontentprovider.cxx,v $ - * $Revision: 1.14 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpcontentprovider.hxx b/ucb/source/ucp/ftp/ftpcontentprovider.hxx index 1ab2f8dd54..9e67a8c6fd 100644 --- a/ucb/source/ucp/ftp/ftpcontentprovider.hxx +++ b/ucb/source/ucp/ftp/ftpcontentprovider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpcontentprovider.hxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpdirp.cxx b/ucb/source/ucp/ftp/ftpdirp.cxx index f25474ef53..0a47535d59 100644 --- a/ucb/source/ucp/ftp/ftpdirp.cxx +++ b/ucb/source/ucp/ftp/ftpdirp.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpdirp.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -874,17 +871,17 @@ sal_Bool FTPDirectoryParser::parseUNIX ( { const sal_Char *p1, *p2; p1 = p2 = pBuffer; - + if (!((*p1 == '-') || (*p1 == 'd') || (*p1 == 'l'))) return sal_False; // 1st column: FileMode. if (*p1 == 'd') rEntry.m_nMode |= INETCOREFTP_FILEMODE_ISDIR; - + if (*p1 == 'l') rEntry.m_nMode |= INETCOREFTP_FILEMODE_ISLINK; - + // Skip to end of column and set rights by the way while (*p1 && !ascii_isWhitespace(*p1)) { if(*p1 == 'r') @@ -893,7 +890,7 @@ sal_Bool FTPDirectoryParser::parseUNIX ( rEntry.m_nMode |= INETCOREFTP_FILEMODE_WRITE; p1++; } - + /* * Scan for the sequence of size and date fields: * *LWS 1*DIGIT 1*LWS 3CHAR 1*LWS 1*2DIGIT 1*LWS @@ -970,19 +967,7 @@ sal_Bool FTPDirectoryParser::parseUNIX ( // Done. return sal_True; } - return sal_False; -} - -/* - * parseUNKNOWN. - */ -sal_Bool FTPDirectoryParser::parseUNKNOWN ( - FTPDirentry &rEntry, - const sal_Char *pBuffer, - sal_uInt32 nLength) -{ - setPath (rEntry.m_aName, pBuffer,sal_Int32 (nLength)); - return sal_True; + return sal_False; } /* @@ -1204,7 +1189,7 @@ sal_Bool FTPDirectoryParser::parseUNIX_isYearTimeField ( nNumber = 10 * nNumber + (*pStart - '0'); if (pStart + 1 != pEnd || nNumber < 1970) return sal_False; - + rDateTime.SetYear(nNumber); rDateTime.SetTime(0); return sal_True; @@ -1237,12 +1222,12 @@ sal_Bool FTPDirectoryParser::parseUNIX_isTime ( // else // rDateTime.SetYear(aCurDate.GetYear()); // return sal_True; - + TimeValue aTimeVal; osl_getSystemTime(&aTimeVal); oslDateTime aCurrDateTime; osl_getDateTimeFromTimeValue(&aTimeVal,&aCurrDateTime); - + if (rDateTime.GetMonth() > aCurrDateTime.Month) rDateTime.SetYear(aCurrDateTime.Year - 1); else diff --git a/ucb/source/ucp/ftp/ftpdirp.hxx b/ucb/source/ucp/ftp/ftpdirp.hxx index 2083a8beff..810d45f101 100644 --- a/ucb/source/ucp/ftp/ftpdirp.hxx +++ b/ucb/source/ucp/ftp/ftpdirp.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpdirp.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -42,13 +39,13 @@ namespace ftp { - + /*======================================================================== * * the DateTime structure * *======================================================================*/ - + struct DateTime : public com::sun::star::util::DateTime { @@ -66,7 +63,7 @@ namespace ftp { day, month, year) { } - + void SetYear(sal_uInt16 year) { Year = year; } void SetMonth(sal_uInt16 month) { Month = month; } void SetDay(sal_uInt16 day) { Day = day; } @@ -101,12 +98,12 @@ namespace ftp { DateTime m_aDate; sal_uInt32 m_nMode; sal_uInt32 m_nSize; - + FTPDirentry(void) : m_aDate(0,0,0,0,0,0,0), m_nMode(INETCOREFTP_FILEMODE_UNKNOWN), m_nSize((sal_uInt32)(-1)) { } - + void clear() { m_aURL = m_aName = rtl::OUString(); m_aDate = DateTime(0,0,0,0,0,0,0); @@ -115,21 +112,21 @@ namespace ftp { } bool isDir() const { - return bool(m_nMode && INETCOREFTP_FILEMODE_ISDIR); + return bool(m_nMode && INETCOREFTP_FILEMODE_ISDIR); } - + bool isFile() const { - return ! bool(m_nMode && INETCOREFTP_FILEMODE_ISDIR); + return ! bool(m_nMode && INETCOREFTP_FILEMODE_ISDIR); } }; - + /*======================================================================== * * the directory parser * *======================================================================*/ - + class FTPDirectoryParser { @@ -137,28 +134,23 @@ namespace ftp { static sal_Bool parseDOS ( FTPDirentry &rEntry, const sal_Char *pBuffer ); - + static sal_Bool parseVMS ( FTPDirentry &rEntry, const sal_Char *pBuffer ); - + static sal_Bool parseUNIX ( FTPDirentry &rEntry, const sal_Char *pBuffer ); - - static sal_Bool parseUNKNOWN ( - FTPDirentry &rEntry, - const sal_Char *pBuffer, - sal_uInt32 nLength); - + private: - + static sal_Bool parseUNIX_isSizeField ( const sal_Char *pStart, const sal_Char *pEnd, sal_uInt32 &rSize); - + static sal_Bool parseUNIX_isMonthField ( const sal_Char *pStart, const sal_Char *pEnd, @@ -168,7 +160,7 @@ namespace ftp { const sal_Char *pStart, const sal_Char *pEnd, DateTime& rDateTime); - + static sal_Bool parseUNIX_isYearTimeField ( const sal_Char *pStart, const sal_Char *pEnd, @@ -190,7 +182,7 @@ namespace ftp { sal_Int32 length = -1); }; - + } diff --git a/ucb/source/ucp/ftp/ftpdynresultset.cxx b/ucb/source/ucp/ftp/ftpdynresultset.cxx index 84b711cfdd..ac6b5b5546 100644 --- a/ucb/source/ucp/ftp/ftpdynresultset.cxx +++ b/ucb/source/ucp/ftp/ftpdynresultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpdynresultset.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpdynresultset.hxx b/ucb/source/ucp/ftp/ftpdynresultset.hxx index 8139ccacf5..b1d9194f75 100644 --- a/ucb/source/ucp/ftp/ftpdynresultset.hxx +++ b/ucb/source/ucp/ftp/ftpdynresultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpdynresultset.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpinpstr.cxx b/ucb/source/ucp/ftp/ftpinpstr.cxx index 7600ddb6af..2faac1e932 100644 --- a/ucb/source/ucp/ftp/ftpinpstr.cxx +++ b/ucb/source/ucp/ftp/ftpinpstr.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpinpstr.cxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -53,11 +50,11 @@ using namespace com::sun::star::io; FTPInputStream::FTPInputStream(FILE* tmpfl) - : m_tmpfl(tmpfl ? tmpfl : tmpfile()) + : m_tmpfl(tmpfl ? tmpfl : tmpfile()) { fseek(m_tmpfl,0,SEEK_END); -// fpos_t pos; -// fgetpos(m_tmpfl,&pos); +// fpos_t pos; +// fgetpos(m_tmpfl,&pos); long pos = ftell(m_tmpfl); rewind(m_tmpfl); m_nLength = sal_Int64(pos); @@ -65,24 +62,24 @@ FTPInputStream::FTPInputStream(FILE* tmpfl) -FTPInputStream::~FTPInputStream() +FTPInputStream::~FTPInputStream() { if ( 0 != m_tmpfl) fclose(m_tmpfl); } -Any SAL_CALL FTPInputStream::queryInterface( +Any SAL_CALL FTPInputStream::queryInterface( const Type& rType ) throw( - RuntimeException - ) + RuntimeException + ) { Any aRet = ::cppu::queryInterface(rType, SAL_STATIC_CAST( XInputStream*,this ), SAL_STATIC_CAST( XSeekable*,this ) ); - + return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ); } @@ -107,26 +104,29 @@ sal_Int32 SAL_CALL FTPInputStream::readBytes(Sequence< sal_Int8 >& aData, RuntimeException) { osl::MutexGuard aGuard(m_aMutex); - + if(0 <= nBytesToRead && aData.getLength() < nBytesToRead) - aData.realloc(nBytesToRead); - + aData.realloc(nBytesToRead); + // fpos_t bpos,epos; - + // fgetpos(m_tmpfl,&bpos); -// fread(aData.getArray(),nBytesToRead,1,m_tmpfl); +// fread(aData.getArray(),nBytesToRead,1,m_tmpfl); // fgetpos(m_tmpfl,&epos); long bpos,epos; - + bpos = ftell(m_tmpfl); - fread(aData.getArray(),nBytesToRead,1,m_tmpfl); + if (fread(aData.getArray(),nBytesToRead,1,m_tmpfl) != 1) + throw IOException(); + epos = ftell(m_tmpfl); - + return sal_Int32(epos-bpos); } -sal_Int32 SAL_CALL FTPInputStream::readSomeBytes( Sequence< sal_Int8 >& aData,sal_Int32 nMaxBytesToRead ) +sal_Int32 SAL_CALL FTPInputStream::readSomeBytes( Sequence< sal_Int8 >& aData, + sal_Int32 nMaxBytesToRead ) throw( NotConnectedException, BufferSizeExceededException, IOException, @@ -146,7 +146,7 @@ void SAL_CALL FTPInputStream::skipBytes(sal_Int32 nBytesToSkip) osl::MutexGuard aGuard(m_aMutex); if(!m_tmpfl) throw IOException(); - + fseek(m_tmpfl,long(nBytesToSkip),SEEK_CUR); } @@ -155,7 +155,7 @@ void SAL_CALL FTPInputStream::skipBytes(sal_Int32 nBytesToSkip) sal_Int32 SAL_CALL FTPInputStream::available(void) throw(NotConnectedException, IOException, - RuntimeException) + RuntimeException) { return sal::static_int_cast<sal_Int32>(m_nLength - getPosition()); } @@ -177,12 +177,12 @@ void SAL_CALL FTPInputStream::closeInput(void) void SAL_CALL FTPInputStream::seek(sal_Int64 location) throw( IllegalArgumentException, IOException, - RuntimeException ) + RuntimeException ) { osl::MutexGuard aGuard(m_aMutex); if(!m_tmpfl) throw IOException(); - + fseek(m_tmpfl,long(location),SEEK_SET); } @@ -197,7 +197,7 @@ FTPInputStream::getPosition( osl::MutexGuard aGuard(m_aMutex); if(!m_tmpfl) throw IOException(); - + // fpos_t pos; // fgetpos(m_tmpfl,&pos); long pos; @@ -207,11 +207,11 @@ FTPInputStream::getPosition( -sal_Int64 SAL_CALL FTPInputStream::getLength( - void +sal_Int64 SAL_CALL FTPInputStream::getLength( + void ) throw( IOException,RuntimeException ) { - return m_nLength; + return m_nLength; } diff --git a/ucb/source/ucp/ftp/ftpinpstr.hxx b/ucb/source/ucp/ftp/ftpinpstr.hxx index 1ecf5e8bab..83431371ec 100644 --- a/ucb/source/ucp/ftp/ftpinpstr.hxx +++ b/ucb/source/ucp/ftp/ftpinpstr.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpinpstr.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpintreq.cxx b/ucb/source/ucp/ftp/ftpintreq.cxx index 78d3db6ecd..9d9bf49b28 100644 --- a/ucb/source/ucp/ftp/ftpintreq.cxx +++ b/ucb/source/ucp/ftp/ftpintreq.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpintreq.cxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -71,7 +68,7 @@ Any SAL_CALL XInteractionApproveImpl::queryInterface( const Type& rType ) throw( RuntimeException ) { - Any aRet = cppu::queryInterface( + Any aRet = cppu::queryInterface( rType, SAL_STATIC_CAST( lang::XTypeProvider*, this ), SAL_STATIC_CAST( XInteractionApprove*,this) ); @@ -83,13 +80,13 @@ XInteractionApproveImpl::queryInterface( const Type& rType ) // XTypeProvider ////////////////////////////////////////////////////////////////////////////// -XTYPEPROVIDER_IMPL_2( XInteractionApproveImpl, +XTYPEPROVIDER_IMPL_2( XInteractionApproveImpl, XTypeProvider, XInteractionApprove ) - + void SAL_CALL XInteractionApproveImpl::select() - throw (RuntimeException) + throw (RuntimeException) { m_bSelected = true; } @@ -101,7 +98,6 @@ bool XInteractionApproveImpl::isSelected() const } - // XInteractionDisapproveImpl XInteractionDisapproveImpl::XInteractionDisapproveImpl() @@ -131,7 +127,7 @@ Any SAL_CALL XInteractionDisapproveImpl::queryInterface( const Type& rType ) throw( RuntimeException ) { - Any aRet = cppu::queryInterface( + Any aRet = cppu::queryInterface( rType, SAL_STATIC_CAST( lang::XTypeProvider*, this ), SAL_STATIC_CAST( XInteractionDisapprove*,this) ); @@ -143,26 +139,19 @@ XInteractionDisapproveImpl::queryInterface( const Type& rType ) // XTypeProvider ////////////////////////////////////////////////////////////////////////////// -XTYPEPROVIDER_IMPL_2( XInteractionDisapproveImpl, +XTYPEPROVIDER_IMPL_2( XInteractionDisapproveImpl, XTypeProvider, XInteractionDisapprove ) - + void SAL_CALL XInteractionDisapproveImpl::select() throw (RuntimeException) - -{ - m_bSelected = true; -} - -bool XInteractionDisapproveImpl::isSelected() const { - return m_bSelected; + m_bSelected = true; } - // XInteractionRequestImpl XInteractionRequestImpl::XInteractionRequestImpl(const rtl::OUString& aName) @@ -170,12 +159,12 @@ XInteractionRequestImpl::XInteractionRequestImpl(const rtl::OUString& aName) p2( new XInteractionDisapproveImpl ), m_aName(aName), m_aSeq( 2 ) -{ +{ m_aSeq[0] = Reference<XInteractionContinuation>(p1); m_aSeq[1] = Reference<XInteractionContinuation>(p2); } - + void SAL_CALL XInteractionRequestImpl::acquire( void ) throw() @@ -198,7 +187,7 @@ Any SAL_CALL XInteractionRequestImpl::queryInterface( const Type& rType ) throw( RuntimeException ) { - Any aRet = cppu::queryInterface( + Any aRet = cppu::queryInterface( rType, SAL_STATIC_CAST( lang::XTypeProvider*, this ), SAL_STATIC_CAST( XInteractionRequest*,this) ); @@ -210,7 +199,7 @@ XInteractionRequestImpl::queryInterface( const Type& rType ) // XTypeProvider ///////////////////////////////////////////////////////////////////////////// -XTYPEPROVIDER_IMPL_2( XInteractionRequestImpl, +XTYPEPROVIDER_IMPL_2( XInteractionRequestImpl, XTypeProvider, XInteractionRequest ) @@ -234,12 +223,6 @@ XInteractionRequestImpl::getContinuations( ) } -bool XInteractionRequestImpl::aborted() const -{ - return p2->isSelected(); -} - - bool XInteractionRequestImpl::approved() const { return p1->isSelected(); diff --git a/ucb/source/ucp/ftp/ftpintreq.hxx b/ucb/source/ucp/ftp/ftpintreq.hxx index 7b3fbca577..8ffb48232d 100644 --- a/ucb/source/ucp/ftp/ftpintreq.hxx +++ b/ucb/source/ucp/ftp/ftpintreq.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpintreq.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -43,26 +40,26 @@ namespace ftp { - + class XInteractionApproveImpl : public cppu::OWeakObject, public com::sun::star::lang::XTypeProvider, public com::sun::star::task::XInteractionApprove { public: - + XInteractionApproveImpl(); - + virtual com::sun::star::uno::Any SAL_CALL queryInterface( const com::sun::star::uno::Type& rType ) throw( com::sun::star::uno::RuntimeException); - + virtual void SAL_CALL acquire( void ) throw(); - + virtual void SAL_CALL release( void ) @@ -72,12 +69,12 @@ namespace ftp { // XTypeProvider XTYPEPROVIDER_DECL() - + virtual void SAL_CALL select() throw (com::sun::star::uno::RuntimeException); - + bool isSelected() const; - + private: bool m_bSelected; @@ -85,26 +82,26 @@ namespace ftp { - + class XInteractionDisapproveImpl : public cppu::OWeakObject, public com::sun::star::lang::XTypeProvider, public com::sun::star::task::XInteractionDisapprove { public: - + XInteractionDisapproveImpl(); - + virtual com::sun::star::uno::Any SAL_CALL queryInterface( const com::sun::star::uno::Type& rType ) throw( com::sun::star::uno::RuntimeException); - + virtual void SAL_CALL acquire( void ) throw(); - + virtual void SAL_CALL release( void ) @@ -114,38 +111,36 @@ namespace ftp { // XTypeProvider XTYPEPROVIDER_DECL() - + virtual void SAL_CALL select() throw (com::sun::star::uno::RuntimeException); - - bool isSelected() const; - + private: bool m_bSelected; }; - - + + class XInteractionRequestImpl : public cppu::OWeakObject, public com::sun::star::lang::XTypeProvider, public com::sun::star::task::XInteractionRequest { public: - + XInteractionRequestImpl(const rtl::OUString& aName); - + virtual com::sun::star::uno::Any SAL_CALL queryInterface( const com::sun::star::uno::Type& rType ) throw( com::sun::star::uno::RuntimeException); - + virtual void SAL_CALL acquire( void ) throw(); - + virtual void SAL_CALL release( void ) @@ -153,35 +148,33 @@ namespace ftp { // XTypeProvider - + XTYPEPROVIDER_DECL() - com::sun::star::uno::Any SAL_CALL + com::sun::star::uno::Any SAL_CALL getRequest( ) throw (com::sun::star::uno::RuntimeException); - com::sun::star::uno::Sequence< - com::sun::star::uno::Reference< + com::sun::star::uno::Sequence< + com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations( ) throw (com::sun::star::uno::RuntimeException); - - bool aborted() const; - - bool approved() const; + + bool approved() const; private: XInteractionApproveImpl* p1; XInteractionDisapproveImpl* p2; - + rtl::OUString m_aName; - - com::sun::star::uno::Sequence< - com::sun::star::uno::Reference< + + com::sun::star::uno::Sequence< + com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation > > m_aSeq; }; - + } diff --git a/ucb/source/ucp/ftp/ftploaderthread.cxx b/ucb/source/ucp/ftp/ftploaderthread.cxx index 930beaa873..0d81ee9a82 100644 --- a/ucb/source/ucp/ftp/ftploaderthread.cxx +++ b/ucb/source/ucp/ftp/ftploaderthread.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftploaderthread.cxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftploaderthread.hxx b/ucb/source/ucp/ftp/ftploaderthread.hxx index a12d3ecca6..ac3048080e 100644 --- a/ucb/source/ucp/ftp/ftploaderthread.hxx +++ b/ucb/source/ucp/ftp/ftploaderthread.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftploaderthread.hxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpresultsetI.cxx b/ucb/source/ucp/ftp/ftpresultsetI.cxx index 40bd4569fd..f9944f363f 100644 --- a/ucb/source/ucp/ftp/ftpresultsetI.cxx +++ b/ucb/source/ucp/ftp/ftpresultsetI.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpresultsetI.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -38,7 +35,7 @@ #include "com/sun/star/ucb/XCommandProcessor.hpp" #include "com/sun/star/sdbc/XRow.hpp" #include "ftpresultsetI.hxx" - +#include "ftpcontent.hxx" using namespace std; @@ -62,14 +59,14 @@ ResultSetI::ResultSetI(const Reference<XMultiServiceFactory>& xMSF, m_aPath.push_back(dirvec[i].m_aURL); // m_aIdents holds the contentidentifiers - + m_aItems.resize( m_aPath.size() ); m_aIdents.resize( m_aPath.size() ); - + for(unsigned n = 0; n < m_aItems.size(); ++n) { - rtl::Reference<ucbhelper::PropertyValueSet> xRow = + rtl::Reference<ucbhelper::PropertyValueSet> xRow = new ucbhelper::PropertyValueSet(xMSF); - + for( int i = 0; i < seqProp.getLength(); ++i) { const rtl::OUString& Name = seqProp[i].Name; if(Name.compareToAscii("ContentType") == 0 ) @@ -96,6 +93,10 @@ ResultSetI::ResultSetI(const Reference<XMultiServiceFactory>& xMSF, else if(Name.compareToAscii("DateCreated") == 0) xRow->appendTimestamp(seqProp[i], dirvec[n].m_aDate); + else if(Name.compareToAscii("CreatableContentsInfo") == 0) + xRow->appendObject( + seqProp[i], + makeAny(FTPContent::queryCreatableContentsInfo_Static())); else xRow->appendVoid(seqProp[i]); } diff --git a/ucb/source/ucp/ftp/ftpresultsetI.hxx b/ucb/source/ucp/ftp/ftpresultsetI.hxx index 433a64ad1b..f108063c06 100644 --- a/ucb/source/ucp/ftp/ftpresultsetI.hxx +++ b/ucb/source/ucp/ftp/ftpresultsetI.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpresultsetI.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpresultsetbase.cxx b/ucb/source/ucp/ftp/ftpresultsetbase.cxx index 12ef1cb180..ead162c99d 100644 --- a/ucb/source/ucp/ftp/ftpresultsetbase.cxx +++ b/ucb/source/ucp/ftp/ftpresultsetbase.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpresultsetbase.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpresultsetbase.hxx b/ucb/source/ucp/ftp/ftpresultsetbase.hxx index 90d001743f..75198bea70 100644 --- a/ucb/source/ucp/ftp/ftpresultsetbase.hxx +++ b/ucb/source/ucp/ftp/ftpresultsetbase.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpresultsetbase.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpresultsetfactory.hxx b/ucb/source/ucp/ftp/ftpresultsetfactory.hxx index 7949017c38..b609ff30e4 100644 --- a/ucb/source/ucp/ftp/ftpresultsetfactory.hxx +++ b/ucb/source/ucp/ftp/ftpresultsetfactory.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpresultsetfactory.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpservices.cxx b/ucb/source/ucp/ftp/ftpservices.cxx index a8eb26069d..ca2cf3823d 100644 --- a/ucb/source/ucp/ftp/ftpservices.cxx +++ b/ucb/source/ucp/ftp/ftpservices.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpservices.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpstrcont.hxx b/ucb/source/ucp/ftp/ftpstrcont.hxx index 17a8cd158c..c79c8e8a01 100644 --- a/ucb/source/ucp/ftp/ftpstrcont.hxx +++ b/ucb/source/ucp/ftp/ftpstrcont.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpstrcont.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/ftpurl.cxx b/ucb/source/ucp/ftp/ftpurl.cxx index 06ea07b855..c107d3b16d 100644 --- a/ucb/source/ucp/ftp/ftpurl.cxx +++ b/ucb/source/ucp/ftp/ftpurl.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpurl.cxx,v $ - * $Revision: 1.25 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -130,7 +127,7 @@ FTPURL::FTPURL(const FTPURL& r) m_aHost(r.m_aHost), m_aPort(r.m_aPort), m_aPathSegmentVec(r.m_aPathSegmentVec) - + { } @@ -163,19 +160,18 @@ void FTPURL::parse(const rtl::OUString& url) rtl::OString aIdent(url.getStr(), url.getLength(), RTL_TEXTENCODING_UTF8); - char *buffer = new char[1+aIdent.getLength()]; - - const char* p2 = aIdent.getStr(); rtl::OString lower = aIdent.toAsciiLowerCase(); if(lower.getLength() < 6 || strncmp("ftp://",lower.getStr(),6)) throw malformed_exception(); + char *buffer = new char[1+aIdent.getLength()]; + const char* p2 = aIdent.getStr(); p2 += 6; char ch; - char *p1 = buffer; // determine "username:password@host:port" + char *p1 = buffer; // determine "username:password@host:port" while((ch = *p2++) != '/' && ch) *p1++ = ch; *p1 = 0; @@ -393,7 +389,7 @@ namespace ftp { #define SET_DATA_CONTAINER \ - curl_easy_setopt(curl,CURLOPT_NOBODY,false); \ + curl_easy_setopt(curl,CURLOPT_NOBODY,false); \ MemoryContainer data; \ curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,memory_write); \ curl_easy_setopt(curl,CURLOPT_WRITEDATA,&data) @@ -567,7 +563,7 @@ rtl::OUString FTPURL::net_title() const SET_URL(url); err = curl_easy_perform(curl); - if(err == CURLE_OK) { // get the title from the server + if(err == CURLE_OK) { // get the title from the server char* fwd = (char*) control.m_pBuffer; sal_uInt32 len = (sal_uInt32) control.m_nWritePos; @@ -590,6 +586,12 @@ rtl::OUString FTPURL::net_title() const // the client should retry after getting the correct // username + password throw curl_exception(err); +#if LIBCURL_VERSION_NUM>=0x070d01 /* 7.13.1 */ + else if(err == CURLE_LOGIN_DENIED) + // the client should retry after getting the correct + // username + password + throw curl_exception(err); +#endif else if(try_more && err == CURLE_FTP_ACCESS_DENIED) { // We were either denied access when trying to login to // an FTP server or when trying to change working directory @@ -665,8 +667,8 @@ void FTPURL::insert(bool replaceExisting,void* stream) const throw(curl_exception) { if(!replaceExisting) { -// FTPDirentry aDirentry(direntry()); -// if(aDirentry.m_nMode == INETCOREFTP_FILEMODE_UNKNOWN) +// FTPDirentry aDirentry(direntry()); +// if(aDirentry.m_nMode == INETCOREFTP_FILEMODE_UNKNOWN) // throw curl_exception(FILE_EXIST_DURING_INSERT); throw curl_exception(FILE_MIGHT_EXIST_DURING_INSERT); } // else @@ -716,8 +718,8 @@ void FTPURL::mkdir(bool ReplaceExisting) const FTPDirentry aDirentry(direntry()); if(!ReplaceExisting) { -// if(aDirentry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN) -// throw curl_exception(FOLDER_EXIST_DURING_INSERT); +// if(aDirentry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN) +// throw curl_exception(FOLDER_EXIST_DURING_INSERT); throw curl_exception(FOLDER_MIGHT_EXIST_DURING_INSERT); } else if(aDirentry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN) slist = curl_slist_append(slist,aDel.getStr()); diff --git a/ucb/source/ucp/ftp/ftpurl.hxx b/ucb/source/ucp/ftp/ftpurl.hxx index 52103f7274..d595573a76 100644 --- a/ucb/source/ucp/ftp/ftpurl.hxx +++ b/ucb/source/ucp/ftp/ftpurl.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ftpurl.hxx,v $ - * $Revision: 1.15 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -56,7 +53,7 @@ namespace ftp { class FTPHandleProvider; - + enum FTPErrors { FILE_EXIST_DURING_INSERT = CURL_LAST +1, FOLDER_EXIST_DURING_INSERT, FOLDER_MIGHT_EXIST_DURING_INSERT, @@ -64,36 +61,36 @@ namespace ftp { class malformed_exception { }; - - - class curl_exception + + + class curl_exception { - public: - + public: + curl_exception(sal_Int32 err) : n_err(err) { } - + sal_Int32 code() const { return n_err; } - - + + private: - + sal_Int32 n_err; }; class CurlInput { - + public: - + // returns the number of bytes actually read virtual sal_Int32 read(sal_Int8 *dest,sal_Int32 nBytesRequested) = 0; }; - - + + class FTPURL { public: - + FTPURL( const rtl::OUString& aIdent, FTPHandleProvider* pFCP = 0 @@ -103,11 +100,11 @@ namespace ftp { ); FTPURL(const FTPURL& r); - + ~FTPURL(); - + rtl::OUString host() const { return m_aHost; } - + rtl::OUString port() const { return m_aPort; } rtl::OUString username() const { return m_aUsername; } @@ -115,30 +112,30 @@ namespace ftp { /** This returns the URL, but cleaned from * unnessary ellipses. */ - + rtl::OUString ident(bool withslash,bool internal) const; - + /** returns the parent url. */ - + rtl::OUString parent(bool internal = false) const; - + /** sets the unencoded title */ void child(const rtl::OUString& title); /** returns the unencoded title */ rtl::OUString child(void) const; - + std::vector<FTPDirentry> list(sal_Int16 nMode) const throw(curl_exception); // returns a pointer to an open tempfile, // seeked to the beginning of. FILE* open() throw(curl_exception); - + FTPDirentry direntry() const throw(curl_exception); - - void insert(bool ReplaceExisting,void* stream) const + + void insert(bool ReplaceExisting,void* stream) const throw(curl_exception); void mkdir(bool ReplaceExisting) const @@ -146,32 +143,32 @@ namespace ftp { rtl::OUString ren(const rtl::OUString& NewTitle) throw(curl_exception); - + void del() const throw(curl_exception); - + private: osl::Mutex m_mutex; - + FTPHandleProvider *m_pFCP; - + mutable rtl::OUString m_aUsername; bool m_bShowPassword; mutable rtl::OUString m_aHost; mutable rtl::OUString m_aPort; mutable rtl::OUString m_aType; - + /** Contains the encoded pathsegments of the url. */ std::vector<rtl::OUString> m_aPathSegmentVec; - + void parse(const rtl::OUString& url) throw( malformed_exception ); - + rtl::OUString net_title() const throw(curl_exception); }; diff --git a/ucb/source/ucp/ftp/makefile.mk b/ucb/source/ucp/ftp/makefile.mk index 75f5512c72..d9b674b786 100644 --- a/ucb/source/ucp/ftp/makefile.mk +++ b/ucb/source/ucp/ftp/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.19 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test.cxx b/ucb/source/ucp/ftp/test.cxx index 9fd7b0281a..d15cbf9279 100644 --- a/ucb/source/ucp/ftp/test.cxx +++ b/ucb/source/ucp/ftp/test.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test_activedatasink.cxx b/ucb/source/ucp/ftp/test_activedatasink.cxx index cd008735df..3d609e1a99 100644 --- a/ucb/source/ucp/ftp/test_activedatasink.cxx +++ b/ucb/source/ucp/ftp/test_activedatasink.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test_activedatasink.cxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test_activedatasink.hxx b/ucb/source/ucp/ftp/test_activedatasink.hxx index 75835ded99..096710aae9 100644 --- a/ucb/source/ucp/ftp/test_activedatasink.hxx +++ b/ucb/source/ucp/ftp/test_activedatasink.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test_activedatasink.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test_ftpurl.cxx b/ucb/source/ucp/ftp/test_ftpurl.cxx index 9d7167e078..5eaa165003 100755 --- a/ucb/source/ucp/ftp/test_ftpurl.cxx +++ b/ucb/source/ucp/ftp/test_ftpurl.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test_ftpurl.cxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test_interactionhandler.hxx b/ucb/source/ucp/ftp/test_interactionhandler.hxx index 51cb804cf3..edb27f5651 100644 --- a/ucb/source/ucp/ftp/test_interactionhandler.hxx +++ b/ucb/source/ucp/ftp/test_interactionhandler.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test_interactionhandler.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test_multiservicefac.cxx b/ucb/source/ucp/ftp/test_multiservicefac.cxx index 6dcf8b054f..5c7e2a31a8 100644 --- a/ucb/source/ucp/ftp/test_multiservicefac.cxx +++ b/ucb/source/ucp/ftp/test_multiservicefac.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test_multiservicefac.cxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/ftp/test_multiservicefac.hxx b/ucb/source/ucp/ftp/test_multiservicefac.hxx index 8b55046535..6e99e953ed 100644 --- a/ucb/source/ucp/ftp/test_multiservicefac.hxx +++ b/ucb/source/ucp/ftp/test_multiservicefac.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: test_multiservicefac.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_content.cxx b/ucb/source/ucp/gio/gio_content.cxx index fa6d8f74c8..249eace0ea 100644 --- a/ucb/source/ucp/gio/gio_content.cxx +++ b/ucb/source/ucp/gio/gio_content.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_content.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -151,8 +148,8 @@ void SAL_CALL Content::abort( sal_Int32 /*CommandId*/ ) rtl::OUString SAL_CALL Content::getContentType() throw( uno::RuntimeException ) { - return isFolder(uno::Reference< ucb::XCommandEnvironment >()) - ? rtl::OUString::createFromAscii( GIO_FOLDER_TYPE ) + return isFolder(uno::Reference< ucb::XCommandEnvironment >()) + ? rtl::OUString::createFromAscii( GIO_FOLDER_TYPE ) : rtl::OUString::createFromAscii( GIO_FILE_TYPE ); } @@ -183,17 +180,17 @@ uno::Any convertToException(GError *pError, const uno::Reference< uno::XInterfac EXCEPT(aExcept); } break; case G_IO_ERROR_NOT_MOUNTED: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NOT_EXISTING_PATH, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_NOT_FOUND: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NOT_EXISTING, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_EXISTS: - { ucb::NameClashException aExcept(sMessage, rContext, + { ucb::NameClashException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, sName); EXCEPT(aExcept); } break; @@ -202,32 +199,32 @@ uno::Any convertToException(GError *pError, const uno::Reference< uno::XInterfac EXCEPT(aExcept); } break; case G_IO_ERROR_PERMISSION_DENIED: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_ACCESS_DENIED, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_IS_DIRECTORY: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NO_FILE, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_NOT_REGULAR_FILE: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NO_FILE, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_NOT_DIRECTORY: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NO_DIRECTORY, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_FILENAME_TOO_LONG: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NAME_TOO_LONG, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_PENDING: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_PENDING, aArgs); EXCEPT(aExcept); } break; @@ -235,50 +232,50 @@ uno::Any convertToException(GError *pError, const uno::Reference< uno::XInterfac case G_IO_ERROR_CANCELLED: case G_IO_ERROR_TOO_MANY_LINKS: case G_IO_ERROR_WRONG_ETAG: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_GENERAL, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_NOT_SUPPORTED: case G_IO_ERROR_CANT_CREATE_BACKUP: case G_IO_ERROR_WOULD_MERGE: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_NOT_SUPPORTED, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_NO_SPACE: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_OUT_OF_DISK_SPACE, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_INVALID_FILENAME: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_INVALID_CHARACTER, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_READ_ONLY: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_WRITE_PROTECTED, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_TIMED_OUT: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_DEVICE_NOT_READY, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_WOULD_RECURSE: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_RECURSIVE, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_BUSY: case G_IO_ERROR_WOULD_BLOCK: - { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, + { ucb::InteractiveAugmentedIOException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, ucb::IOErrorCode_LOCKING_VIOLATION, aArgs); EXCEPT(aExcept); } break; case G_IO_ERROR_HOST_NOT_FOUND: - { ucb::InteractiveNetworkResolveNameException aExcept(sMessage, rContext, + { ucb::InteractiveNetworkResolveNameException aExcept(sMessage, rContext, task::InteractionClassification_ERROR, sHost); EXCEPT(aExcept);} break; @@ -288,7 +285,7 @@ uno::Any convertToException(GError *pError, const uno::Reference< uno::XInterfac case G_IO_ERROR_NOT_SYMBOLIC_LINK: case G_IO_ERROR_NOT_MOUNTABLE_FILE: case G_IO_ERROR_FAILED_HANDLED: - { ucb::InteractiveNetworkGeneralException aExcept(sMessage, rContext, + { ucb::InteractiveNetworkGeneralException aExcept(sMessage, rContext, task::InteractionClassification_ERROR); EXCEPT(aExcept);} break; @@ -306,7 +303,7 @@ uno::Any Content::mapGIOError( GError *pError ) uno::Any Content::getBadArgExcept() { - return uno::makeAny( lang::IllegalArgumentException( + return uno::makeAny( lang::IllegalArgumentException( rtl::OUString::createFromAscii( "Wrong argument type!" ), static_cast< cppu::OWeakObject * >( this ), -1) ); } @@ -402,6 +399,7 @@ static util::DateTime getDateFromUnix (time_t t) uno::Reference< sdbc::XRow > Content::getPropertyValuesFromGFileInfo(GFileInfo *pInfo, const uno::Reference< lang::XMultiServiceFactory >& rSMgr, + const uno::Reference< ucb::XCommandEnvironment > & xEnv, const uno::Sequence< beans::Property >& rProperties) { rtl::Reference< ::ucbhelper::PropertyValueSet > xRow = new ::ucbhelper::PropertyValueSet( rSMgr ); @@ -419,7 +417,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValuesFromGFileInfo(GFileInfo * if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsDocument" ) ) ) { if (g_file_info_has_attribute(pInfo, G_FILE_ATTRIBUTE_STANDARD_TYPE)) - xRow->appendBoolean( rProp, ( g_file_info_get_file_type( pInfo ) == G_FILE_TYPE_REGULAR || + xRow->appendBoolean( rProp, ( g_file_info_get_file_type( pInfo ) == G_FILE_TYPE_REGULAR || g_file_info_get_file_type( pInfo ) == G_FILE_TYPE_UNKNOWN ) ); else xRow->appendVoid( rProp ); @@ -457,7 +455,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValuesFromGFileInfo(GFileInfo * } else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "DateModified" ) ) ) { - if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_TIME_CHANGED ) ) + if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_TIME_CHANGED ) ) xRow->appendTimestamp( rProp, getDateFromUnix(g_file_info_get_attribute_uint64(pInfo, G_FILE_ATTRIBUTE_TIME_CHANGED)) ); else xRow->appendVoid( rProp ); @@ -499,10 +497,14 @@ uno::Reference< sdbc::XRow > Content::getPropertyValuesFromGFileInfo(GFileInfo * else xRow->appendVoid( rProp ); } + else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + xRow->appendObject( rProp, uno::makeAny( queryCreatableContentsInfo( xEnv ) ) ); + } #ifdef DEBUG else { - fprintf(stderr, "Looking for unsupported property %s\n", + fprintf(stderr, "Looking for unsupported property %s\n", rtl::OUStringToOString(rProp.Name, RTL_TEXTENCODING_UTF8).getStr()); } #endif @@ -520,10 +522,10 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( if (!pInfo) ucbhelper::cancelCommandExecution(mapGIOError(pError), xEnv); - return getPropertyValuesFromGFileInfo(pInfo, m_xSMgr, rProperties); + return getPropertyValuesFromGFileInfo(pInfo, m_xSMgr, xEnv, rProperties); } -static lang::IllegalAccessException +static lang::IllegalAccessException getReadOnlyException( const uno::Reference< uno::XInterface >& rContext ) { return lang::IllegalAccessException ( rtl::OUString::createFromAscii( "Property is read-only!" ), rContext ); @@ -607,10 +609,10 @@ sal_Bool Content::exchangeIdentity( const uno::Reference< ucb::XContentIdentifie uno::Reference< ucb::XContentIdentifier > xNewChildId = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewChildURL ); - + if ( !xChild->exchangeIdentity( xNewChildId ) ) return sal_False; - + ++it; } return sal_True; @@ -650,7 +652,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( sal_Int32 nChanged = 0, nTitlePos = -1; const char *newName = NULL; uno::Sequence< beans::PropertyChangeEvent > aChanges(nCount); - + uno::Sequence< uno::Any > aRet( nCount ); const beans::PropertyValue* pValues = rValues.getConstArray(); for ( sal_Int32 n = 0; n < nCount; ++n ) @@ -663,7 +665,8 @@ uno::Sequence< uno::Any > Content::setPropertyValues( rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaType" ) ) || rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsDocument" ) ) || rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsFolder" ) ) || - rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Size" ) ) ) + rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Size" ) ) || + rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) { aRet[ n ] <<= getReadOnlyException( static_cast< cppu::OWeakObject * >(this) ); } @@ -703,9 +706,9 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.NewValue = uno::makeAny(aNewTitle); aChanges.getArray()[ nChanged ] = aEvent; nTitlePos = nChanged++; - + g_file_info_set_name(pNewInfo, newName); - } + } } else { @@ -737,7 +740,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aNewURL += rtl::OUString( newName, strlen(newName), RTL_TEXTENCODING_UTF8 ); uno::Reference< ucb::XContentIdentifier > xNewId = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewURL ); - + if (!exchangeIdentity( xNewId ) ) { aRet[ nTitlePos ] <<= uno::Exception @@ -808,7 +811,7 @@ sal_Bool Content::feedSink( uno::Reference< uno::XInterface > xSink, uno::Reference< io::XOutputStream > xOut = uno::Reference< io::XOutputStream >(xSink, uno::UNO_QUERY ); uno::Reference< io::XActiveDataSink > xDataSink = uno::Reference< io::XActiveDataSink >(xSink, uno::UNO_QUERY ); - + if ( !xOut.is() && !xDataSink.is() ) return sal_False; @@ -820,7 +823,7 @@ sal_Bool Content::feedSink( uno::Reference< uno::XInterface > xSink, uno::Reference< io::XInputStream > xIn = new ::gio::InputStream(pStream); if ( !xIn.is() ) return sal_False; - + if ( xOut.is() ) copyData( xIn, xOut ); @@ -840,9 +843,9 @@ uno::Any Content::open(const ucb::OpenCommandArgument2 & rOpenCommand, { uno::Sequence< uno::Any > aArgs( 1 ); aArgs[ 0 ] <<= m_xIdentifier->getContentIdentifier(); - uno::Any aErr = uno::makeAny( + uno::Any aErr = uno::makeAny( ucb::InteractiveAugmentedIOException(rtl::OUString(), static_cast< cppu::OWeakObject * >( this ), - task::InteractionClassification_ERROR, + task::InteractionClassification_ERROR, bIsFolder ? ucb::IOErrorCode_NOT_EXISTING_PATH : ucb::IOErrorCode_NOT_EXISTING, aArgs) ); @@ -867,12 +870,12 @@ uno::Any Content::open(const ucb::OpenCommandArgument2 & rOpenCommand, { if ( ( rOpenCommand.Mode == ucb::OpenMode::DOCUMENT_SHARE_DENY_NONE ) || - ( rOpenCommand.Mode == ucb::OpenMode::DOCUMENT_SHARE_DENY_WRITE ) + ( rOpenCommand.Mode == ucb::OpenMode::DOCUMENT_SHARE_DENY_WRITE ) ) { - ucbhelper::cancelCommandExecution( - uno::makeAny ( ucb::UnsupportedOpenModeException - ( rtl::OUString(), static_cast< cppu::OWeakObject * >( this ), + ucbhelper::cancelCommandExecution( + uno::makeAny ( ucb::UnsupportedOpenModeException + ( rtl::OUString(), static_cast< cppu::OWeakObject * >( this ), sal_Int16( rOpenCommand.Mode ) ) ), xEnv ); } @@ -883,7 +886,7 @@ uno::Any Content::open(const ucb::OpenCommandArgument2 & rOpenCommand, // implementation. Support for this type of // sink is optional... #ifdef DEBUG - g_warning ("Failed to load data from '%s'", + g_warning ("Failed to load data from '%s'", rtl::OUStringToOString(m_xIdentifier->getContentIdentifier(), RTL_TEXTENCODING_UTF8).getStr()); #endif @@ -944,6 +947,14 @@ uno::Any SAL_CALL Content::execute( ucbhelper::cancelCommandExecution ( getBadArgExcept (), xEnv ); aRet <<= setPropertyValues( aProperties, xEnv ); } + else if (aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "createNewContent" ) ) + && isFolder( xEnv ) ) + { + ucb::ContentInfo arg; + if ( !( aCommand.Argument >>= arg ) ) + ucbhelper::cancelCommandExecution ( getBadArgExcept (), xEnv ); + aRet <<= createNewContent( arg ); + } else if (aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "insert" ) )) { ucb::InsertCommandArgument arg; @@ -956,8 +967,8 @@ uno::Any SAL_CALL Content::execute( sal_Bool bDeletePhysical = sal_False; aCommand.Argument >>= bDeletePhysical; - //If no delete physical, try and trashcan it, if that doesn't work go - //ahead and try and delete it anyway + //If no delete physical, try and trashcan it, if that doesn't work go + //ahead and try and delete it anyway if (!bDeletePhysical && !g_file_trash(getGFile(), NULL, NULL)) bDeletePhysical = true; @@ -996,10 +1007,10 @@ void Content::destroy( sal_Bool bDeletePhysical ) ::gio::Content::ContentRefList aChildren; queryChildren( aChildren ); - + ContentRefList::const_iterator it = aChildren.begin(); ContentRefList::const_iterator end = aChildren.end(); - + while ( it != end ) { (*it)->destroy( bDeletePhysical ); @@ -1055,7 +1066,7 @@ void Content::insert(const uno::Reference< io::XInputStream > &xInputStream, } } -void Content::transfer( const ucb::TransferInfo& aTransferInfo, const uno::Reference< ucb::XCommandEnvironment >& xEnv ) +void Content::transfer( const ucb::TransferInfo& aTransferInfo, const uno::Reference< ucb::XCommandEnvironment >& xEnv ) throw( uno::Exception ) { rtl::OUString sDest = m_xIdentifier->getContentIdentifier(); @@ -1079,36 +1090,50 @@ void Content::transfer( const ucb::TransferInfo& aTransferInfo, const uno::Refer ucbhelper::cancelCommandExecution(mapGIOError(pError), xEnv); } -com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > SAL_CALL Content::queryCreatableContentsInfo() - throw( com::sun::star::uno::RuntimeException ) +uno::Sequence< ucb::ContentInfo > Content::queryCreatableContentsInfo( + const uno::Reference< ucb::XCommandEnvironment >& xEnv) + throw( uno::RuntimeException ) +{ + if ( isFolder( xEnv ) ) + { + uno::Sequence< ucb::ContentInfo > seq(2); + + // Minimum set of props we really need + uno::Sequence< beans::Property > props( 1 ); + props[0] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< rtl::OUString* >( 0 ) ), + beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::BOUND ); + + // file + seq[0].Type = rtl::OUString::createFromAscii( GIO_FILE_TYPE ); + seq[0].Attributes = ( ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM | + ucb::ContentInfoAttribute::KIND_DOCUMENT ); + seq[0].Properties = props; + + // folder + seq[1].Type = rtl::OUString::createFromAscii( GIO_FOLDER_TYPE ); + seq[1].Attributes = ucb::ContentInfoAttribute::KIND_FOLDER; + seq[1].Properties = props; + + return seq; + } + else + { + return uno::Sequence< ucb::ContentInfo >(); + } +} + +uno::Sequence< ucb::ContentInfo > SAL_CALL Content::queryCreatableContentsInfo() + throw( uno::RuntimeException ) { - uno::Sequence< ucb::ContentInfo > seq(2); - - // Minimum set of props we really need - uno::Sequence< beans::Property > props( 1 ); - props[0] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< rtl::OUString* >( 0 ) ), - beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::BOUND ); - - // file - seq[0].Type = rtl::OUString::createFromAscii( GIO_FILE_TYPE ); - seq[0].Attributes = ( ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM | - ucb::ContentInfoAttribute::KIND_DOCUMENT ); - seq[0].Properties = props; - - // folder - seq[1].Type = rtl::OUString::createFromAscii( GIO_FOLDER_TYPE ); - seq[1].Attributes = ucb::ContentInfoAttribute::KIND_FOLDER; - seq[1].Properties = props; - - return seq; + return queryCreatableContentsInfo( uno::Reference< ucb::XCommandEnvironment >() ); } -com::sun::star::uno::Reference< com::sun::star::ucb::XContent > - SAL_CALL Content::createNewContent( const com::sun::star::ucb::ContentInfo& Info ) - throw( com::sun::star::uno::RuntimeException ) +uno::Reference< ucb::XContent > + SAL_CALL Content::createNewContent( const ucb::ContentInfo& Info ) + throw( uno::RuntimeException ) { bool create_document; const char *name; @@ -1120,7 +1145,7 @@ com::sun::star::uno::Reference< com::sun::star::ucb::XContent > else { #ifdef DEBUG - g_warning( "Failed to create new content '%s'", rtl::OUStringToOString(Info.Type, + g_warning( "Failed to create new content '%s'", rtl::OUStringToOString(Info.Type, RTL_TEXTENCODING_UTF8).getStr() ); #endif return uno::Reference< ucb::XContent >(); @@ -1223,6 +1248,9 @@ uno::Sequence< beans::Property > Content::getProperties( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsHidden" ) ), -1, getCppuBooleanType(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), + beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CreatableContentsInfo" ) ), + -1, getCppuType( static_cast< const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ) }; @@ -1232,7 +1260,7 @@ uno::Sequence< beans::Property > Content::getProperties( uno::Sequence< ucb::CommandInfo > Content::getCommands( const uno::Reference< ucb::XCommandEnvironment > & xEnv) { - static ucb::CommandInfo aDocumentCommandInfoTable[] = + static ucb::CommandInfo aCommandInfoTable[] = { // Required commands ucb::CommandInfo @@ -1262,11 +1290,14 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( const uno::Reference< uc // Folder Only, omitted if not a folder ucb::CommandInfo ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), - -1, getCppuType( static_cast<ucb::TransferInfo * >( 0 ) ) ) + -1, getCppuType( static_cast<ucb::TransferInfo * >( 0 ) ) ), + ucb::CommandInfo + ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, getCppuType( static_cast<ucb::ContentInfo * >( 0 ) ) ) }; - const int nProps = sizeof (aDocumentCommandInfoTable) / sizeof (aDocumentCommandInfoTable[0]); - return uno::Sequence< ucb::CommandInfo >(aDocumentCommandInfoTable, isFolder(xEnv) ? nProps : nProps - 1); + const int nProps = sizeof (aCommandInfoTable) / sizeof (aCommandInfoTable[0]); + return uno::Sequence< ucb::CommandInfo >(aCommandInfoTable, isFolder(xEnv) ? nProps : nProps - 2); } XTYPEPROVIDER_COMMON_IMPL( Content ); diff --git a/ucb/source/ucp/gio/gio_content.hxx b/ucb/source/ucp/gio/gio_content.hxx index 9b63edf0ba..7d004d5242 100644 --- a/ucb/source/ucp/gio/gio_content.hxx +++ b/ucb/source/ucp/gio/gio_content.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_content.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -42,11 +39,11 @@ #include <list> -namespace com { namespace sun { namespace star { +namespace com { namespace sun { namespace star { namespace beans { struct Property; struct PropertyValue; - } + } namespace sdbc { class XRow; } @@ -65,7 +62,7 @@ namespace gio #define GIO_FILE_TYPE "application/vnd.sun.staroffice.gio-file" #define GIO_FOLDER_TYPE "application/vnd.sun.staroffice.gio-folder" -com::sun::star::uno::Any convertToException(GError *pError, +com::sun::star::uno::Any convertToException(GError *pError, const com::sun::star::uno::Reference< com::sun::star::uno::XInterface >& rContext, bool bThrow=true); class ContentProvider; @@ -98,7 +95,7 @@ private: bool doSetFileInfo ( GFileInfo *pNewInfo ); com::sun::star::uno::Any open(const com::sun::star::ucb::OpenCommandArgument2 & rArg, - const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv ) + const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv ) throw( com::sun::star::uno::Exception ); void transfer( const com::sun::star::ucb::TransferInfo& rTransferInfo, @@ -123,7 +120,7 @@ private: sal_Bool feedSink( com::sun::star::uno::Reference< com::sun::star::uno::XInterface> aSink, const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ); - com::sun::star::uno::Reference< com::sun::star::io::XInputStream > + com::sun::star::uno::Reference< com::sun::star::io::XInputStream > createInputStream(const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw( com::sun::star::uno::Exception ); @@ -144,7 +141,8 @@ public: virtual ~Content(); static com::sun::star::uno::Reference< com::sun::star::sdbc::XRow > getPropertyValuesFromGFileInfo( - GFileInfo *pInfo, const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rSMgr, + GFileInfo *pInfo, const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rSMgr, + const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv, const com::sun::star::uno::Sequence< com::sun::star::beans::Property >& rProperties); virtual com::sun::star::uno::Sequence< com::sun::star::beans::Property > @@ -176,10 +174,10 @@ public: virtual com::sun::star::uno::Any SAL_CALL execute( const com::sun::star::ucb::Command& aCommand, sal_Int32 CommandId, - const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment ) + const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( com::sun::star::uno::Exception, com::sun::star::ucb::CommandAbortedException, com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL abort( sal_Int32 CommandId ) + virtual void SAL_CALL abort( sal_Int32 CommandId ) throw( com::sun::star::uno::RuntimeException ); virtual com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > @@ -189,6 +187,11 @@ public: SAL_CALL createNewContent( const com::sun::star::ucb::ContentInfo& Info ) throw( com::sun::star::uno::RuntimeException ); + com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > + queryCreatableContentsInfo( + const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv) + throw( com::sun::star::uno::RuntimeException ); + GFile* getGFile(); }; diff --git a/ucb/source/ucp/gio/gio_datasupplier.cxx b/ucb/source/ucp/gio/gio_datasupplier.cxx index 384c5278ac..2bf26bbd6b 100644 --- a/ucb/source/ucp/gio/gio_datasupplier.cxx +++ b/ucb/source/ucp/gio/gio_datasupplier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_datasupplier.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -51,7 +48,7 @@ namespace gio typedef std::vector< ResultListEntry* > ResultList; DataSupplier::DataSupplier( const uno::Reference< lang::XMultiServiceFactory >& rxSMgr, - const uno::Reference< ::gio::Content >& rContent, sal_Int32 nOpenMode ) + const uno::Reference< ::gio::Content >& rContent, sal_Int32 nOpenMode ) : mxContent(rContent), m_xSMgr(rxSMgr), mnOpenMode(nOpenMode), mbCountFinal(false) { } @@ -92,7 +89,7 @@ bool DataSupplier::getData() } mbCountFinal = sal_True; - + g_file_enumerator_close(pEnumerator, NULL, NULL); return true; } @@ -128,14 +125,14 @@ DataSupplier::~DataSupplier() rtl::OUString aId = rtl::OUString::createFromAscii( parent ); g_free(parent); - char *escaped_name = + char *escaped_name = g_uri_escape_string( g_file_info_get_name(maResults[ nIndex ]->pInfo) , NULL, false); if ( ( aId.lastIndexOf( '/' ) + 1 ) != aId.getLength() ) aId += rtl::OUString::createFromAscii( "/" ); aId += rtl::OUString::createFromAscii( escaped_name ); - + g_free( escaped_name ); maResults[ nIndex ]->aId = aId; @@ -240,7 +237,7 @@ uno::Reference< sdbc::XRow > DataSupplier::queryPropertyValues( sal_uInt32 nInde if ( getResult( nIndex ) ) { uno::Reference< sdbc::XRow > xRow = Content::getPropertyValuesFromGFileInfo( - maResults[ nIndex ]->pInfo, m_xSMgr, getResultSet()->getProperties()); + maResults[ nIndex ]->pInfo, m_xSMgr, getResultSet()->getEnvironment(), getResultSet()->getProperties()); maResults[ nIndex ]->xRow = xRow; return xRow; diff --git a/ucb/source/ucp/gio/gio_datasupplier.hxx b/ucb/source/ucp/gio/gio_datasupplier.hxx index c2f2ee1290..6b15ccf1ec 100644 --- a/ucb/source/ucp/gio/gio_datasupplier.hxx +++ b/ucb/source/ucp/gio/gio_datasupplier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_datasupplier.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_inputstream.cxx b/ucb/source/ucp/gio/gio_inputstream.cxx index b173b4724c..008d9c4cdc 100644 --- a/ucb/source/ucp/gio/gio_inputstream.cxx +++ b/ucb/source/ucp/gio/gio_inputstream.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_inputstream.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_inputstream.hxx b/ucb/source/ucp/gio/gio_inputstream.hxx index 1f53b7117a..70a65236c8 100644 --- a/ucb/source/ucp/gio/gio_inputstream.hxx +++ b/ucb/source/ucp/gio/gio_inputstream.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_inputstream.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_mount.cxx b/ucb/source/ucp/gio/gio_mount.cxx index 4166366c09..3617ed9ee7 100644 --- a/ucb/source/ucp/gio/gio_mount.cxx +++ b/ucb/source/ucp/gio/gio_mount.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_mount.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_mount.hxx b/ucb/source/ucp/gio/gio_mount.hxx index 3890e49a58..21fa002274 100644 --- a/ucb/source/ucp/gio/gio_mount.hxx +++ b/ucb/source/ucp/gio/gio_mount.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_mount.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_outputstream.cxx b/ucb/source/ucp/gio/gio_outputstream.cxx index 3bb20f5db5..2d10e25eb1 100644 --- a/ucb/source/ucp/gio/gio_outputstream.cxx +++ b/ucb/source/ucp/gio/gio_outputstream.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_outputstream.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_outputstream.hxx b/ucb/source/ucp/gio/gio_outputstream.hxx index 2e5479bece..aa8e22f11a 100644 --- a/ucb/source/ucp/gio/gio_outputstream.hxx +++ b/ucb/source/ucp/gio/gio_outputstream.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_outputstream.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_provider.cxx b/ucb/source/ucp/gio/gio_provider.cxx index d799a38fd4..9921f3a118 100644 --- a/ucb/source/ucp/gio/gio_provider.cxx +++ b/ucb/source/ucp/gio/gio_provider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_provider.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_provider.hxx b/ucb/source/ucp/gio/gio_provider.hxx index 0eaa21c518..a4bf10d62a 100644 --- a/ucb/source/ucp/gio/gio_provider.hxx +++ b/ucb/source/ucp/gio/gio_provider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_provider.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_resultset.cxx b/ucb/source/ucp/gio/gio_resultset.cxx index ae9019e73a..847be8b9d6 100644 --- a/ucb/source/ucp/gio/gio_resultset.cxx +++ b/ucb/source/ucp/gio/gio_resultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_resultset.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_resultset.hxx b/ucb/source/ucp/gio/gio_resultset.hxx index e5edd110a9..6041383326 100644 --- a/ucb/source/ucp/gio/gio_resultset.hxx +++ b/ucb/source/ucp/gio/gio_resultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_resultset.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_seekable.cxx b/ucb/source/ucp/gio/gio_seekable.cxx index 6c3b680121..562d04211e 100644 --- a/ucb/source/ucp/gio/gio_seekable.cxx +++ b/ucb/source/ucp/gio/gio_seekable.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_seekable.cxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/gio_seekable.hxx b/ucb/source/ucp/gio/gio_seekable.hxx index 1c25a7aaac..ea9953ca0e 100644 --- a/ucb/source/ucp/gio/gio_seekable.hxx +++ b/ucb/source/ucp/gio/gio_seekable.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: gio_seekable.hxx,v $ - * $Revision: 1.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gio/makefile.mk b/ucb/source/ucp/gio/makefile.mk index 2e7009e52a..e6ebe2413e 100644 --- a/ucb/source/ucp/gio/makefile.mk +++ b/ucb/source/ucp/gio/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.2 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gvfs/content.cxx b/ucb/source/ucp/gvfs/gvfs_content.cxx index 2eb0ac2e00..121c69346f 100644 --- a/ucb/source/ucp/gvfs/content.cxx +++ b/ucb/source/ucp/gvfs/gvfs_content.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: content.cxx,v $ - * $Revision: 1.12 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -39,9 +36,7 @@ #include "osl/doublecheckedlocking.h" -#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUES_HPP_ #include <com/sun/star/beans/PropertyValue.hpp> -#endif #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/PropertySetInfoChange.hpp> #include <com/sun/star/beans/PropertySetInfoChangeEvent.hpp> @@ -50,14 +45,10 @@ #include <com/sun/star/lang/IllegalAccessException.hpp> #include <com/sun/star/ucb/ContentInfoAttribute.hpp> #include <com/sun/star/ucb/InsertCommandArgument.hpp> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVEBADTRANSFRERURLEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveBadTransferURLException.hpp> -#endif #include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp> #include <com/sun/star/ucb/InteractiveNetworkConnectException.hpp> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVENETWORKGENBERALEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveNetworkGeneralException.hpp> -#endif #include <com/sun/star/ucb/InteractiveNetworkReadException.hpp> #include <com/sun/star/ucb/InteractiveNetworkResolveNameException.hpp> #include <com/sun/star/ucb/InteractiveNetworkWriteException.hpp> @@ -79,9 +70,7 @@ #include <com/sun/star/ucb/NameClashException.hpp> #include <ucbhelper/contentidentifier.hxx> #include <ucbhelper/propertyvalueset.hxx> -#ifndef _UCBHELPER_INTERACTIONREQUEST_HXX #include <ucbhelper/interactionrequest.hxx> -#endif #include <ucbhelper/cancelcommandexecution.hxx> #include <ucbhelper/simpleauthenticationrequest.hxx> @@ -98,10 +87,10 @@ extern "C" { // missing in the header: doh. # include <libgnomevfs/gnome-vfs-module-callback.h> } -#include "content.hxx" -#include "provider.hxx" -#include "directory.hxx" -#include "stream.hxx" +#include "gvfs_content.hxx" +#include "gvfs_provider.hxx" +#include "gvfs_directory.hxx" +#include "gvfs_stream.hxx" using namespace gvfs; using namespace com::sun::star; @@ -141,7 +130,7 @@ Content::Content( #endif } -Content::Content( +Content::Content( const uno::Reference< lang::XMultiServiceFactory >& rxSMgr, ContentProvider * pProvider, const uno::Reference< ucb::XContentIdentifier >& Identifier, @@ -235,7 +224,7 @@ uno::Sequence< uno::Type > SAL_CALL Content::getTypes() CPPU_TYPE_REF( beans::XPropertyContainer ), CPPU_TYPE_REF( beans::XPropertySetInfoChangeNotifier ), CPPU_TYPE_REF( container::XChild ) ); - + pFolderCollection = &aFolderCollection; pFileCollection = &aFileCollection; OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); @@ -265,7 +254,7 @@ uno::Sequence< rtl::OUString > SAL_CALL Content::getSupportedServiceNames() throw( uno::RuntimeException ) { uno::Sequence< rtl::OUString > aSNS( 1 ); - aSNS.getArray()[ 0 ] = rtl::OUString::createFromAscii( + aSNS.getArray()[ 0 ] = rtl::OUString::createFromAscii( "com.sun.star.ucb.GnomeVFSContent" ); return aSNS; } @@ -326,7 +315,7 @@ uno::Any SAL_CALL Content::execute( if ( !( aCommand.Argument >>= Properties ) ) ucbhelper::cancelCommandExecution ( getBadArgExcept (), xEnv ); - + aRet <<= getPropertyValues( Properties, xEnv ); } else if ( COMMAND_IS( aCommand, "setPropertyValues" ) ) { @@ -398,6 +387,13 @@ uno::Any SAL_CALL Content::execute( g_warning ("Open falling through ..."); #endif + } else if ( COMMAND_IS( aCommand, "createNewContent" ) && isFolder( xEnv ) ) { + ucb::ContentInfo arg; + if ( !( aCommand.Argument >>= arg ) ) + ucbhelper::cancelCommandExecution ( getBadArgExcept (), xEnv ); + + aRet <<= createNewContent( arg ); + } else if ( COMMAND_IS( aCommand, "insert" ) ) { ucb::InsertCommandArgument arg; if ( !( aCommand.Argument >>= arg ) ) @@ -452,32 +448,45 @@ void SAL_CALL Content::abort( sal_Int32 /*CommandId*/ ) // XContentCreator methods. // -uno::Sequence< ucb::ContentInfo > SAL_CALL -Content::queryCreatableContentsInfo() - throw( uno::RuntimeException ) +uno::Sequence< ucb::ContentInfo > Content::queryCreatableContentsInfo( + const uno::Reference< ucb::XCommandEnvironment >& xEnv) + throw( uno::RuntimeException ) { - uno::Sequence< ucb::ContentInfo > seq(2); - - // Minimum set of props we really need - uno::Sequence< beans::Property > props( 1 ); - props[0] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< rtl::OUString* >( 0 ) ), - beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::BOUND ); - - // file - seq[0].Type = rtl::OUString::createFromAscii( GVFS_FILE_TYPE ); - seq[0].Attributes = ( ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM | - ucb::ContentInfoAttribute::KIND_DOCUMENT ); - seq[0].Properties = props; - - // folder - seq[1].Type = rtl::OUString::createFromAscii( GVFS_FOLDER_TYPE ); - seq[1].Attributes = ucb::ContentInfoAttribute::KIND_FOLDER; - seq[1].Properties = props; - - return seq; + if ( isFolder( xEnv ) ) + { + uno::Sequence< ucb::ContentInfo > seq(2); + + // Minimum set of props we really need + uno::Sequence< beans::Property > props( 1 ); + props[0] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< rtl::OUString* >( 0 ) ), + beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::BOUND ); + + // file + seq[0].Type = rtl::OUString::createFromAscii( GVFS_FILE_TYPE ); + seq[0].Attributes = ( ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM | + ucb::ContentInfoAttribute::KIND_DOCUMENT ); + seq[0].Properties = props; + + // folder + seq[1].Type = rtl::OUString::createFromAscii( GVFS_FOLDER_TYPE ); + seq[1].Attributes = ucb::ContentInfoAttribute::KIND_FOLDER; + seq[1].Properties = props; + + return seq; + } + else + { + return uno::Sequence< ucb::ContentInfo >(); + } +} + +uno::Sequence< ucb::ContentInfo > SAL_CALL Content::queryCreatableContentsInfo() + throw( uno::RuntimeException ) +{ + return queryCreatableContentsInfo( uno::Reference< ucb::XCommandEnvironment >() ); } uno::Reference< ucb::XContent > SAL_CALL @@ -487,7 +496,7 @@ Content::createNewContent( const ucb::ContentInfo& Info ) bool create_document; const char *name; - if ( Info.Type.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( GVFS_FILE_TYPE ) ) ) + if ( Info.Type.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( GVFS_FILE_TYPE ) ) ) create_document = true; else if ( Info.Type.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( GVFS_FOLDER_TYPE ) ) ) create_document = false; @@ -515,11 +524,11 @@ Content::createNewContent( const ucb::ContentInfo& Info ) uno::Reference< ucb::XContentIdentifier > xId ( new ::ucbhelper::ContentIdentifier( m_xSMgr, aURL ) ); - try { + try { return new ::gvfs::Content( m_xSMgr, m_pProvider, xId, !create_document ); } catch ( ucb::ContentCreationException & ) { return uno::Reference< ucb::XContent >(); - } + } } rtl::OUString Content::getParentURL() @@ -581,7 +590,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( if( ( result = getInfo( xEnv ) ) != GNOME_VFS_OK ) cancelCommandExecution( result, xEnv, sal_False ); - + const beans::Property* pProps; if( rProperties.getLength() ) { @@ -609,7 +618,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ContentType" ) ) ) xRow->appendString( rProp, getContentType () ); - + else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsDocument" ) ) ) { if (m_info.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) xRow->appendBoolean( rProp, ( m_info.type == GNOME_VFS_FILE_TYPE_REGULAR || @@ -617,38 +626,38 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( else xRow->appendVoid( rProp ); } - else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsFolder" ) ) ) { if (m_info.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) xRow->appendBoolean( rProp, ( m_info.type == GNOME_VFS_FILE_TYPE_DIRECTORY ) ); else xRow->appendVoid( rProp ); } + else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsReadOnly" ) ) ) { - else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Size" ) ) ) { - if (m_info.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) - xRow->appendLong( rProp, m_info.size ); - else - xRow->appendVoid( rProp ); - } + GnomeVFSFileInfo* fileInfo = gnome_vfs_file_info_new (); - else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsReadOnly" ) ) ) { - if (m_info.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS) { + ::rtl::OString aURI = getOURI(); + gnome_vfs_get_file_info + ( (const sal_Char *)aURI, fileInfo, + GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS ); + + if (fileInfo->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_ACCESS) { bool read_only = true; - if (m_info.uid == getuid () && - m_info.permissions & GNOME_VFS_PERM_USER_WRITE) - read_only = false; - else if (m_info.gid == getgid () && - m_info.permissions & GNOME_VFS_PERM_GROUP_WRITE) - read_only = false; - else if (m_info.permissions & GNOME_VFS_PERM_OTHER_WRITE) - read_only = false; + if (fileInfo->permissions & GNOME_VFS_PERM_ACCESS_WRITABLE) + read_only = false; + xRow->appendBoolean( rProp, read_only ); } else xRow->appendVoid( rProp ); + gnome_vfs_file_info_unref (fileInfo); + } + else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Size" ) ) ) { + if (m_info.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) + xRow->appendLong( rProp, m_info.size ); + else + xRow->appendVoid( rProp ); } - else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsHidden" ) ) ) xRow->appendBoolean( rProp, ( m_info.name && m_info.name[0] == '.' ) ); @@ -669,14 +678,17 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( else xRow->appendVoid( rProp ); } - + else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaType" ) ) ) { // We do this by sniffing in gnome-vfs; rather expensively. #ifdef DEBUG g_warning ("FIXME: Requested mime-type - an expensive op. indeed!"); #endif xRow->appendVoid( rProp ); - } else { + } else if (rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + xRow->appendObject( rProp, uno::makeAny( queryCreatableContentsInfo( xEnv ) ) ); + + else { xRow->appendVoid( rProp ); } } @@ -688,7 +700,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( return uno::Reference< sdbc::XRow >( xRow.get() ); } -static lang::IllegalAccessException +static lang::IllegalAccessException getReadOnlyException( Content *ctnt ) { return lang::IllegalAccessException @@ -740,7 +752,7 @@ Content::doSetFileInfo( const GnomeVFSFileInfo *newInfo, result = gnome_vfs_move ((const sal_Char *)aURI, newURI, FALSE); - g_free (newURI); + g_free (newURI); } return result; @@ -757,7 +769,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( getInfo( xEnv ); - osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); gnome_vfs_file_info_copy( &newInfo, &m_info ); @@ -769,16 +781,16 @@ uno::Sequence< uno::Any > Content::setPropertyValues( beans::PropertyChangeEvent aEvent; aEvent.Source = static_cast< cppu::OWeakObject * >( this ); - aEvent.Further = sal_False; - aEvent.PropertyHandle = -1; - // aEvent.PropertyName = fill in later ... - // aEvent.OldValue = - // aEvent.NewValue = + aEvent.Further = sal_False; + aEvent.PropertyHandle = -1; + // aEvent.PropertyName = fill in later ... + // aEvent.OldValue = + // aEvent.NewValue = - int nCount = rValues.getLength(); + int nCount = rValues.getLength(); const beans::PropertyValue* pValues = rValues.getConstArray(); - for ( sal_Int32 n = 0; n < nCount; ++n ) { + for ( sal_Int32 n = 0; n < nCount; ++n ) { const beans::PropertyValue& rValue = pValues[ n ]; #ifdef DEBUG @@ -788,7 +800,8 @@ uno::Sequence< uno::Any > Content::setPropertyValues( rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaType" ) ) || rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsDocument" ) ) || rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsFolder" ) ) || - rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Size" ) ) ) + rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Size" ) ) || + rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) aRet[ n ] <<= getReadOnlyException( this ); else if ( rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Title" ) ) ) { @@ -810,9 +823,9 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.NewValue = uno::makeAny( aNewTitle ); aChanges.getArray()[ nChanged ] = aEvent; nTitlePos = nChanged++; - + newInfo.name = newName; - setMask |= GNOME_VFS_SET_FILE_INFO_NAME; + setMask |= GNOME_VFS_SET_FILE_INFO_NAME; } else // same name g_free (newName); } @@ -832,7 +845,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aRet[ n ] <<= getReadOnlyException( this ); } } - + GnomeVFSResult result = GNOME_VFS_OK; if ( !m_bTransient && @@ -849,9 +862,9 @@ uno::Sequence< uno::Any > Content::setPropertyValues( if ( setMask & GNOME_VFS_SET_FILE_INFO_NAME ) { uno::Reference< ucb::XContentIdentifier > xNewId - = new ::ucbhelper::ContentIdentifier( + = new ::ucbhelper::ContentIdentifier( m_xSMgr, makeNewURL( newInfo.name ) ); - + aGuard.clear(); if (!exchangeIdentity( xNewId ) ) aRet[ nTitlePos ] <<= uno::Exception @@ -859,7 +872,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( static_cast< cppu::OWeakObject * >( this ) ); } } - + gnome_vfs_file_info_clear( &newInfo ); if ( nChanged > 0 ) { @@ -919,7 +932,7 @@ void Content::insert( const uno::Reference< ucb::XCommandEnvironment > &xEnv ) throw( uno::Exception ) { - osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); #ifdef DEBUG g_warning( "Insert '%s' (%d) (0x%x:%d)", getURI(), bReplaceExisting, @@ -1004,9 +1017,9 @@ void Content::insert( } if (m_bTransient) { - m_bTransient = sal_False; + m_bTransient = sal_False; aGuard.clear(); - inserted(); + inserted(); } } @@ -1035,14 +1048,14 @@ void Content::destroy( sal_Bool bDeletePhysical ) deleted(); osl::Guard< osl::Mutex > aGuard( m_aMutex ); - + // Process instanciated children... ::gvfs::Content::ContentRefList aChildren; queryChildren( aChildren ); - + ContentRefList::const_iterator it = aChildren.begin(); ContentRefList::const_iterator end = aChildren.end(); - + while ( it != end ) { (*it)->destroy( bDeletePhysical ); ++it; @@ -1100,10 +1113,10 @@ sal_Bool Content::exchangeIdentity( uno::Reference< ucb::XContentIdentifier > xNewChildId = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewChildURL ); - + if ( !xChild->exchangeIdentity( xNewChildId ) ) return sal_False; - + ++it; } return sal_True; @@ -1161,7 +1174,7 @@ uno::Any Content::mapVFSException( const GnomeVFSResult result, sal_Bool bWrite if ((gvfs_message = gnome_vfs_result_to_string (result))) message = GnomeToOUString( gvfs_message ); - + switch (result) { case GNOME_VFS_OK: g_error ("VFS_OK mapped to exception."); @@ -1181,7 +1194,7 @@ uno::Any Content::mapVFSException( const GnomeVFSResult result, sal_Bool bWrite break; case GNOME_VFS_ERROR_BAD_PARAMETERS: aException <<= - lang::IllegalArgumentException + lang::IllegalArgumentException ( rtl::OUString(), static_cast< cppu::OWeakObject * >( this ), -1 ); @@ -1319,8 +1332,8 @@ uno::Sequence< beans::Property > Content::getProperties( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), // FIXME: Too expensive for now (?) // beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ), -// -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), -// beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), +// -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), +// beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Size" ) ), -1, getCppuType( static_cast< const sal_Int64 * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), @@ -1335,19 +1348,22 @@ uno::Sequence< beans::Property > Content::getProperties( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsHidden" ) ), -1, getCppuBooleanType(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), + beans::Property( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CreatableContentsInfo" ) ), + -1, getCppuType( static_cast< const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ) }; const int nProps = sizeof (aGenericProperties) / sizeof (aGenericProperties[0]); return uno::Sequence< beans::Property > ( aGenericProperties, nProps ); - + } uno::Sequence< ucb::CommandInfo > Content::getCommands( const uno::Reference< ucb::XCommandEnvironment > & xEnv ) { - static ucb::CommandInfo aDocumentCommandInfoTable[] = { + static ucb::CommandInfo aCommandInfoTable[] = { // Required commands ucb::CommandInfo ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ), @@ -1373,17 +1389,19 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ), -1, getCppuType( static_cast<ucb::OpenCommandArgument2 * >( 0 ) ) ), - // Folder only + // Folder Only, omitted if not a folder ucb::CommandInfo ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), - -1, getCppuType( static_cast<ucb::TransferInfo * >( 0 ) ) ) + -1, getCppuType( static_cast<ucb::TransferInfo * >( 0 ) ) ), + ucb::CommandInfo + ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, getCppuType( static_cast<ucb::ContentInfo * >( 0 ) ) ) }; - int num = 7; - - if ( isFolder( xEnv ) ) - num += 1; - return uno::Sequence< ucb::CommandInfo >(aDocumentCommandInfoTable, num ); + const int nProps + = sizeof( aCommandInfoTable ) / sizeof( aCommandInfoTable[ 0 ] ); + return uno::Sequence< ucb::CommandInfo >( + aCommandInfoTable, isFolder( xEnv ) ? nProps : nProps - 2 ); } rtl::OUString @@ -1420,8 +1438,8 @@ Content::copyData( uno::Reference< io::XInputStream > xIn, } // Inherits an authentication context -uno::Reference< io::XInputStream > -Content::createTempStream( +uno::Reference< io::XInputStream > +Content::createTempStream( const uno::Reference< ucb::XCommandEnvironment >& xEnv ) throw( uno::Exception ) { @@ -1450,8 +1468,8 @@ Content::createTempStream( return uno::Reference < io::XInputStream > ( xTempOut, uno::UNO_QUERY ); } -uno::Reference< io::XInputStream > -Content::createInputStream( +uno::Reference< io::XInputStream > +Content::createInputStream( const uno::Reference< ucb::XCommandEnvironment >& xEnv ) throw( uno::Exception ) { @@ -1471,11 +1489,11 @@ Content::createInputStream( result = gnome_vfs_open ( &handle, (const sal_Char *)aURI, (GnomeVFSOpenMode) (GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_RANDOM ) ); - + if (result == GNOME_VFS_ERROR_INVALID_OPEN_MODE || result == GNOME_VFS_ERROR_NOT_SUPPORTED) return createTempStream( xEnv ); - + if (result != GNOME_VFS_OK) cancelCommandExecution( result, xEnv ); @@ -1506,14 +1524,14 @@ Content::feedSink( uno::Reference< uno::XInterface > aSink, = uno::Reference< io::XOutputStream >(aSink, uno::UNO_QUERY ); uno::Reference< io::XActiveDataSink > xDataSink = uno::Reference< io::XActiveDataSink >(aSink, uno::UNO_QUERY ); - + if ( !xOut.is() && !xDataSink.is() ) return sal_False; uno::Reference< io::XInputStream > xIn = createInputStream( xEnv ); if ( !xIn.is() ) return sal_False; - + if ( xOut.is() ) copyData( xIn, xOut ); @@ -1538,7 +1556,7 @@ extern "C" { { task::XInteractionHandler *xIH; -#ifdef DEBUG +#ifdef DEBUG g_warning ("Full authentication callback (%p) ...", callback_data); #endif @@ -1547,7 +1565,7 @@ extern "C" { const GnomeVFSModuleCallbackFullAuthenticationIn *in = (const GnomeVFSModuleCallbackFullAuthenticationIn *) in_void; - GnomeVFSModuleCallbackFullAuthenticationOut *out = + GnomeVFSModuleCallbackFullAuthenticationOut *out = (GnomeVFSModuleCallbackFullAuthenticationOut *) out_void; g_return_if_fail (in != NULL && out != NULL); @@ -1590,7 +1608,7 @@ extern "C" { (aUserName.getLength() ? ucbhelper::SimpleAuthenticationRequest::ENTITY_FIXED : ucbhelper::SimpleAuthenticationRequest::ENTITY_NA); - + // No suggested password. ePassword = (in->flags & GNOME_VFS_MODULE_CALLBACK_FULL_AUTHENTICATION_NEED_PASSWORD) ? ucbhelper::SimpleAuthenticationRequest::ENTITY_MODIFY : @@ -1662,30 +1680,30 @@ extern "C" { gsize out_size, gpointer callback_data) { -#ifdef DEBUG +#ifdef DEBUG g_warning ("Old authentication callback (%p) [ UNTESTED ] ...", callback_data); #endif const GnomeVFSModuleCallbackAuthenticationIn *in = (const GnomeVFSModuleCallbackAuthenticationIn *) in_void; - GnomeVFSModuleCallbackAuthenticationOut *out = + GnomeVFSModuleCallbackAuthenticationOut *out = (GnomeVFSModuleCallbackAuthenticationOut *) out_void; g_return_if_fail (in != NULL && out != NULL); g_return_if_fail (sizeof (GnomeVFSModuleCallbackAuthenticationIn) == in_size && sizeof (GnomeVFSModuleCallbackAuthenticationOut) == out_size); - GnomeVFSModuleCallbackFullAuthenticationIn mapped_in = { + GnomeVFSModuleCallbackFullAuthenticationIn mapped_in = { (GnomeVFSModuleCallbackFullAuthenticationFlags) (GNOME_VFS_MODULE_CALLBACK_FULL_AUTHENTICATION_NEED_PASSWORD | GNOME_VFS_MODULE_CALLBACK_FULL_AUTHENTICATION_NEED_USERNAME | GNOME_VFS_MODULE_CALLBACK_FULL_AUTHENTICATION_NEED_DOMAIN), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; GnomeVFSModuleCallbackFullAuthenticationOut mapped_out = { 0, 0, 0, 0, 0, 0, 0, 0 }; - + // Map the old style input auth. data to the new style structure. if (in->previous_attempt_failed) mapped_in.flags = (GnomeVFSModuleCallbackFullAuthenticationFlags) - (mapped_in.flags | + (mapped_in.flags | GNOME_VFS_MODULE_CALLBACK_FULL_AUTHENTICATION_PREVIOUS_ATTEMPT_FAILED); GnomeVFSURI *pURI = NULL; @@ -1698,11 +1716,11 @@ extern "C" { mapped_in.server = (char *) gnome_vfs_uri_get_host_name (pURI); mapped_in.port = gnome_vfs_uri_get_host_port (pURI); mapped_in.username = (char *) gnome_vfs_uri_get_user_name (pURI); - } + } mapped_in.domain = in->realm; mapped_in.default_user = mapped_in.username; mapped_in.default_domain = mapped_in.domain; - + vfs_authentication_callback ((gconstpointer) &mapped_in, sizeof (mapped_in), (gpointer) &mapped_out, @@ -1710,7 +1728,7 @@ extern "C" { callback_data); if (pURI) - gnome_vfs_uri_unref (pURI); + gnome_vfs_uri_unref (pURI); // Map the new style auth. out data to the old style out structure. out->username = mapped_out.username; diff --git a/ucb/source/ucp/gvfs/content.hxx b/ucb/source/ucp/gvfs/gvfs_content.hxx index 31254b8733..3b73162572 100644 --- a/ucb/source/ucp/gvfs/content.hxx +++ b/ucb/source/ucp/gvfs/gvfs_content.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: content.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -82,11 +79,11 @@ class Content : public ::ucbhelper::ContentImplHelper, public com::sun::star::ucb::XContentCreator { //========================================================================= -// Internals +// Internals //========================================================================= private: typedef rtl::Reference< Content > ContentRef; - typedef std::list< ContentRef > ContentRefList; + typedef std::list< ContentRef > ContentRefList; // Instance data ContentProvider *m_pProvider; // No need for a ref, base class holds object @@ -98,7 +95,7 @@ private: ::com::sun::star::uno::Any getBadArgExcept (); GnomeVFSResult getInfo ( const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >& xEnv ); - sal_Bool isFolder ( const ::com::sun::star::uno::Reference< + sal_Bool isFolder ( const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >& xEnv ); sal_Bool exchangeIdentity( const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentIdentifier >& xNewId); @@ -110,7 +107,7 @@ private: // End Internal helpers // For ucbhelper - virtual ::rtl::OUString getParentURL(); + virtual ::rtl::OUString getParentURL(); // For ucbhelper virtual com::sun::star::uno::Sequence< com::sun::star::beans::Property > getProperties( const com::sun::star::uno::Reference< @@ -122,8 +119,8 @@ private: public: // Command "getPropertyValues" - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > - getPropertyValues( const ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > + getPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& rProperties, const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >& xEnv ); @@ -136,22 +133,22 @@ private: const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >& xEnv ); - // Command "insert" - void insert( const ::com::sun::star::uno::Reference< + // Command "insert" + void insert( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & xInputStream, - sal_Bool bReplaceExisting, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& xEnv ) + sal_Bool bReplaceExisting, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw( ::com::sun::star::uno::Exception ); // Command "transfer" void transfer( const ::com::sun::star::ucb::TransferInfo & rArgs, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& xEnv ) + com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw( ::com::sun::star::uno::Exception ); // Command "delete" - void destroy( sal_Bool bDeletePhysical ) + void destroy( sal_Bool bDeletePhysical ) throw( ::com::sun::star::uno::Exception ); // "open" helpers @@ -161,21 +158,21 @@ private: ::com::sun::star::io::XOutputStream > xOut ); ::com::sun::star::uno::Reference< - ::com::sun::star::io::XInputStream > + ::com::sun::star::io::XInputStream > createTempStream( const ::com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw( ::com::sun::star::uno::Exception ); ::com::sun::star::uno::Reference< - ::com::sun::star::io::XInputStream > + ::com::sun::star::io::XInputStream > createInputStream( const ::com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw( ::com::sun::star::uno::Exception ); - sal_Bool feedSink( ::com::sun::star::uno::Reference< + sal_Bool feedSink( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> aSink, const ::com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ); - ::com::sun::star::uno::Any mapVFSException( const GnomeVFSResult result, + ::com::sun::star::uno::Any mapVFSException( const GnomeVFSResult result, sal_Bool bWrite ); void cancelCommandExecution(const GnomeVFSResult result, @@ -192,27 +189,27 @@ public: rtl::OUString getOUURI (); //========================================================================= -// Externals +// Externals //========================================================================= public: - Content( const ::com::sun::star::uno::Reference< + Content( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, ContentProvider *pProvider, const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentIdentifier >& Identifier) throw ( ::com::sun::star::ucb::ContentCreationException ); - Content( const ::com::sun::star::uno::Reference< + Content( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, ContentProvider *pProvider, const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContentIdentifier >& Identifier, sal_Bool isFolder) throw ( ::com::sun::star::ucb::ContentCreationException ); - virtual ~Content(); + virtual ~Content(); - // XInterface - XINTERFACE_DECL() + // XInterface + XINTERFACE_DECL() // XTypeProvider XTYPEPROVIDER_DECL() @@ -220,40 +217,47 @@ public: // XServiceInfo virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL - getSupportedServiceNames() + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL + getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); - // XContent - virtual rtl::OUString SAL_CALL - getContentType() + // XContent + virtual rtl::OUString SAL_CALL + getContentType() throw( com::sun::star::uno::RuntimeException ); - // XCommandProcessor - virtual com::sun::star::uno::Any SAL_CALL - execute( const com::sun::star::ucb::Command& aCommand, + // XCommandProcessor + virtual com::sun::star::uno::Any SAL_CALL + execute( const com::sun::star::ucb::Command& aCommand, sal_Int32 CommandId, const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw( com::sun::star::uno::Exception, com::sun::star::ucb::CommandAbortedException, com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL - abort( sal_Int32 CommandId ) + virtual void SAL_CALL + abort( sal_Int32 CommandId ) throw( com::sun::star::uno::RuntimeException ); - ////////////////////////////////////////////////////////////////////// - // Additional interfaces - ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + // Additional interfaces + ////////////////////////////////////////////////////////////////////// - // XContentCreator + // XContentCreator virtual com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > SAL_CALL - queryCreatableContentsInfo() + queryCreatableContentsInfo() throw( com::sun::star::uno::RuntimeException ); - virtual com::sun::star::uno::Reference< - com::sun::star::ucb::XContent > SAL_CALL - createNewContent( const com::sun::star::ucb::ContentInfo& Info ) + virtual com::sun::star::uno::Reference< + com::sun::star::ucb::XContent > SAL_CALL + createNewContent( const com::sun::star::ucb::ContentInfo& Info ) + throw( com::sun::star::uno::RuntimeException ); + + + com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > + queryCreatableContentsInfo( + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& xEnv) throw( com::sun::star::uno::RuntimeException ); }; diff --git a/ucb/source/ucp/gvfs/directory.cxx b/ucb/source/ucp/gvfs/gvfs_directory.cxx index ff699a3c63..9654b3bc8d 100644 --- a/ucb/source/ucp/gvfs/directory.cxx +++ b/ucb/source/ucp/gvfs/gvfs_directory.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: directory.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -40,7 +37,7 @@ #include <ucbhelper/contentidentifier.hxx> #include <ucbhelper/providerhelper.hxx> -#include "directory.hxx" +#include "gvfs_directory.hxx" #include <libgnomevfs/gnome-vfs-utils.h> #include <libgnomevfs/gnome-vfs-directory.h> @@ -96,7 +93,7 @@ struct ResultListEntry gnome_vfs_file_info_copy (&aInfo, fileInfo); } - ~ResultListEntry() + ~ResultListEntry() { gnome_vfs_file_info_clear (&aInfo); } @@ -180,7 +177,7 @@ rtl::OUString DataSupplier::queryContentIdentifierString( sal_uInt32 nIndex ) aId += rtl::OUString::createFromAscii( "/" ); aId += rtl::OUString::createFromAscii( escaped_name ); - + g_free( escaped_name ); m_pImpl->m_aResults[ nIndex ]->aId = aId; @@ -240,7 +237,7 @@ DataSupplier::queryContent( sal_uInt32 nIndex ) = m_pImpl->m_xContent->getProvider()->queryContent( xId ); m_pImpl->m_aResults[ nIndex ]->xContent = xContent; return xContent; - + } catch ( ucb::IllegalIdentifierException& ) { } @@ -347,7 +344,7 @@ sal_Bool DataSupplier::getData() char *uri = m_pImpl->m_xContent->getURI(); result = gnome_vfs_directory_open ( &dirHandle, uri, GNOME_VFS_FILE_INFO_DEFAULT ); - + if (result != GNOME_VFS_OK) { #ifdef DEBUG g_warning ("Failed open of '%s' with '%s'", @@ -360,35 +357,37 @@ sal_Bool DataSupplier::getData() g_free( uri ); } + GnomeVFSFileInfo* fileInfo = gnome_vfs_file_info_new (); - GnomeVFSFileInfo fileInfo; - fileInfo.name = 0; - while ((result = gnome_vfs_directory_read_next (dirHandle, &fileInfo)) == GNOME_VFS_OK) { - if( fileInfo.name && fileInfo.name[0] == '.' && - ( fileInfo.name[1] == '\0' || - ( fileInfo.name[1] == '.' && fileInfo.name[2] == '\0' ) ) ) + while ((result = gnome_vfs_directory_read_next (dirHandle, fileInfo)) == GNOME_VFS_OK) { + if( fileInfo->name && fileInfo->name[0] == '.' && + ( fileInfo->name[1] == '\0' || + ( fileInfo->name[1] == '.' && fileInfo->name[2] == '\0' ) ) ) continue; switch ( m_pImpl->m_nOpenMode ) { case ucb::OpenMode::FOLDERS: - if ( !(fileInfo.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) || - fileInfo.type != GNOME_VFS_FILE_TYPE_DIRECTORY ) + if ( !(fileInfo->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) || + fileInfo->type != GNOME_VFS_FILE_TYPE_DIRECTORY ) continue; break; - + case ucb::OpenMode::DOCUMENTS: - if ( !(fileInfo.valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) || - fileInfo.type != GNOME_VFS_FILE_TYPE_REGULAR ) + if ( !(fileInfo->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) || + fileInfo->type != GNOME_VFS_FILE_TYPE_REGULAR ) continue; break; - + case ucb::OpenMode::ALL: default: break; } - - m_pImpl->m_aResults.push_back( new ResultListEntry( &fileInfo ) ); + + m_pImpl->m_aResults.push_back( new ResultListEntry( fileInfo ) ); } + + gnome_vfs_file_info_unref (fileInfo); + #ifdef DEBUG g_warning ("Got %d directory entries", result); #endif diff --git a/ucb/source/ucp/gvfs/directory.hxx b/ucb/source/ucp/gvfs/gvfs_directory.hxx index d5124eedb6..c771d497d9 100644 --- a/ucb/source/ucp/gvfs/directory.hxx +++ b/ucb/source/ucp/gvfs/gvfs_directory.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: directory.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -33,7 +30,7 @@ #include <rtl/ref.hxx> #include <ucbhelper/resultset.hxx> #include <ucbhelper/resultsethelper.hxx> -#include "content.hxx" +#include "gvfs_content.hxx" namespace gvfs { @@ -44,11 +41,11 @@ class DynamicResultSet : public ::ucbhelper::ResultSetImplHelper com::sun::star::ucb::XCommandEnvironment > m_xEnv; private: - virtual void initStatic(); - virtual void initDynamic(); + virtual void initStatic(); + virtual void initDynamic(); public: - DynamicResultSet( const com::sun::star::uno::Reference< + DynamicResultSet( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr, const rtl::Reference< Content >& rxContent, const com::sun::star::ucb::OpenCommandArgument2& rCommand, diff --git a/ucb/source/ucp/gvfs/provider.cxx b/ucb/source/ucp/gvfs/gvfs_provider.cxx index eec5dd1296..92fa95c0e6 100644 --- a/ucb/source/ucp/gvfs/provider.cxx +++ b/ucb/source/ucp/gvfs/gvfs_provider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: provider.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -33,8 +30,8 @@ #include <ucbhelper/contentidentifier.hxx> #include <libgnomevfs/gnome-vfs-init.h> -#include "provider.hxx" -#include "content.hxx" +#include "gvfs_provider.hxx" +#include "gvfs_content.hxx" using namespace com::sun::star; using namespace gvfs; @@ -114,7 +111,7 @@ ContentProvider::queryContent( uno::RuntimeException ) { #ifdef DEBUG - g_warning ("QueryContent: '%s'", + g_warning ("QueryContent: '%s'", (const sal_Char *)rtl::OUStringToOString (Identifier->getContentIdentifier(), RTL_TEXTENCODING_UTF8)); #endif @@ -182,14 +179,14 @@ writeInfo( void *pRegistryKey, return bSuccess; } -extern "C" void SAL_CALL +extern "C" void SAL_CALL component_getImplementationEnvironment( const sal_Char **ppEnvTypeName, uno_Environment **/*ppEnv*/ ) { *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; } -extern "C" sal_Bool SAL_CALL +extern "C" sal_Bool SAL_CALL component_writeInfo( void */*pServiceManager*/, void *pRegistryKey ) { diff --git a/ucb/source/ucp/gvfs/provider.hxx b/ucb/source/ucp/gvfs/gvfs_provider.hxx index 4aa024ee96..39cd7b0cdb 100644 --- a/ucb/source/ucp/gvfs/provider.hxx +++ b/ucb/source/ucp/gvfs/gvfs_provider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: provider.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gvfs/stream.cxx b/ucb/source/ucp/gvfs/gvfs_stream.cxx index 7ea1e95619..8c5c7c676f 100644 --- a/ucb/source/ucp/gvfs/stream.cxx +++ b/ucb/source/ucp/gvfs/gvfs_stream.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: stream.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -30,7 +27,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_ucb.hxx" -#include "stream.hxx" +#include "gvfs_stream.hxx" #include <rtl/memory.h> #include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp> @@ -89,7 +86,7 @@ Stream::getInputStream( ) } return Reference< XInputStream >( this ); } - + com::sun::star::uno::Reference< com::sun::star::io::XOutputStream > SAL_CALL Stream::getOutputStream( ) throw( com::sun::star::uno::RuntimeException ) @@ -187,13 +184,13 @@ sal_Int32 SAL_CALL Stream::available( ) } void SAL_CALL Stream::closeInput( void ) - throw( NotConnectedException, - IOException, - RuntimeException ) + throw( NotConnectedException, + IOException, + RuntimeException ) { osl::MutexGuard aGuard( m_aMutex ); m_bInputStreamCalled = false; - + if( ! m_bOutputStreamCalled ) closeStream(); } @@ -234,7 +231,7 @@ sal_Int64 SAL_CALL Stream::getPosition() throw IOException(); throwOnError( gnome_vfs_tell( m_handle, &nBytesIn ) ); - + return nBytesIn; } @@ -293,13 +290,13 @@ void SAL_CALL Stream::writeBytes( const com::sun::star::uno::Sequence< sal_Int8 p += bytesWritten; } } - + void SAL_CALL Stream::flush( void ) throw( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException ) { } - + void SAL_CALL Stream::closeOutput( void ) throw( com::sun::star::io::NotConnectedException, com::sun::star::io::IOException, @@ -307,7 +304,7 @@ void SAL_CALL Stream::closeOutput( void ) { osl::MutexGuard aGuard( m_aMutex ); m_bOutputStreamCalled = false; - + if( ! m_bInputStreamCalled ) closeStream(); } diff --git a/ucb/source/ucp/gvfs/stream.hxx b/ucb/source/ucp/gvfs/gvfs_stream.hxx index a621c08e98..d7fb17cd6b 100644 --- a/ucb/source/ucp/gvfs/stream.hxx +++ b/ucb/source/ucp/gvfs/gvfs_stream.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: stream.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/gvfs/makefile.mk b/ucb/source/ucp/gvfs/makefile.mk index 889e3ffd41..b69455777c 100644 --- a/ucb/source/ucp/gvfs/makefile.mk +++ b/ucb/source/ucp/gvfs/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.8 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify @@ -62,10 +58,10 @@ PKGCONFIG_LIBS!:=-Wl,--export-dynamic $(PKGCONFIG_LIBS:s/ -llinc//:s/ -lbonobo-a DLLPRE = SLOFILES=\ - $(SLO)$/content.obj \ - $(SLO)$/directory.obj \ - $(SLO)$/stream.obj \ - $(SLO)$/provider.obj + $(SLO)$/gvfs_content.obj \ + $(SLO)$/gvfs_directory.obj \ + $(SLO)$/gvfs_stream.obj \ + $(SLO)$/gvfs_provider.obj SHL1NOCHECK=TRUE SHL1TARGET=$(TARGET)$(UCPGVFS_MAJOR).uno diff --git a/ucb/source/ucp/hierarchy/dynamicresultset.cxx b/ucb/source/ucp/hierarchy/dynamicresultset.cxx index f0c7ecf4f9..399b000ca0 100644 --- a/ucb/source/ucp/hierarchy/dynamicresultset.cxx +++ b/ucb/source/ucp/hierarchy/dynamicresultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: dynamicresultset.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/dynamicresultset.hxx b/ucb/source/ucp/hierarchy/dynamicresultset.hxx index 7d06819ef9..505d4ea5ae 100644 --- a/ucb/source/ucp/hierarchy/dynamicresultset.hxx +++ b/ucb/source/ucp/hierarchy/dynamicresultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: dynamicresultset.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchycontent.cxx b/ucb/source/ucp/hierarchy/hierarchycontent.cxx index 49774e943f..e868dfc023 100644 --- a/ucb/source/ucp/hierarchy/hierarchycontent.cxx +++ b/ucb/source/ucp/hierarchy/hierarchycontent.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchycontent.cxx,v $ - * $Revision: 1.31 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -41,7 +38,7 @@ ************************************************************************** - Root Folder vs. 'normal' Folder - - root doesn't support command 'delete' + - root doesn't support command 'delete' - root doesn't support command 'insert' - root needs not created via XContentCreator - queryContent with root folder id ( HIERARCHY_ROOT_FOLDER_URL ) always returns a value != 0 @@ -457,8 +454,8 @@ uno::Any SAL_CALL HierarchyContent::execute( aRet <<= getCommandInfo( Environment ); } - else if ( isFolder() && aCommand.Name.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM( "open" ) ) ) + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "open" ) ) && isFolder() ) { ////////////////////////////////////////////////////////////////// // open command for a folder content @@ -481,9 +478,9 @@ uno::Any SAL_CALL HierarchyContent::execute( = new DynamicResultSet( m_xSMgr, this, aOpenCommand ); aRet <<= xSet; } - else if ( ( m_eKind != ROOT ) && !isReadOnly() && - aCommand.Name.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM( "insert" ) ) ) + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "insert" ) ) && + ( m_eKind != ROOT ) && !isReadOnly() ) { ////////////////////////////////////////////////////////////////// // insert @@ -508,9 +505,9 @@ uno::Any SAL_CALL HierarchyContent::execute( : ucb::NameClash::ERROR; insert( nNameClash, Environment ); } - else if ( ( m_eKind != ROOT ) && !isReadOnly() && - aCommand.Name.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM( "delete" ) ) ) + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "delete" ) ) && + ( m_eKind != ROOT ) && !isReadOnly() ) { ////////////////////////////////////////////////////////////////// // delete @@ -546,13 +543,13 @@ uno::Any SAL_CALL HierarchyContent::execute( // Remove own and all children's Additional Core Properties. removeAdditionalPropertySet( sal_True ); } - else if ( isFolder() && !isReadOnly() && - aCommand.Name.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM( "transfer" ) ) ) + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "transfer" ) ) && + isFolder() && !isReadOnly() ) { ////////////////////////////////////////////////////////////////// // transfer - // ( Not available at link objects ) + // ( Not available at link objects ) ////////////////////////////////////////////////////////////////// ucb::TransferInfo aInfo; @@ -571,6 +568,31 @@ uno::Any SAL_CALL HierarchyContent::execute( transfer( aInfo, Environment ); } + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "createNewContent" ) ) && + isFolder() && !isReadOnly() ) + { + ////////////////////////////////////////////////////////////////// + // createNewContent + // ( Not available at link objects ) + ////////////////////////////////////////////////////////////////// + + ucb::ContentInfo aInfo; + if ( !( aCommand.Argument >>= aInfo ) ) + { + OSL_ENSURE( sal_False, "Wrong argument type!" ); + ucbhelper::cancelCommandExecution( + uno::makeAny( lang::IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >( this ), + -1 ) ), + Environment ); + // Unreachable + } + + aRet <<= createNewContent( aInfo ); + } else { ////////////////////////////////////////////////////////////////// @@ -607,54 +629,7 @@ uno::Sequence< ucb::ContentInfo > SAL_CALL HierarchyContent::queryCreatableContentsInfo() throw( uno::RuntimeException ) { - if ( isFolder() ) - { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); - - uno::Sequence< ucb::ContentInfo > aSeq( 2 ); - - // Folder. - aSeq.getArray()[ 0 ].Type - = rtl::OUString::createFromAscii( HIERARCHY_FOLDER_CONTENT_TYPE ); - aSeq.getArray()[ 0 ].Attributes - = ucb::ContentInfoAttribute::KIND_FOLDER; - - uno::Sequence< beans::Property > aFolderProps( 1 ); - aFolderProps.getArray()[ 0 ] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - beans::PropertyAttribute::BOUND ); - aSeq.getArray()[ 0 ].Properties = aFolderProps; - - // Link. - aSeq.getArray()[ 1 ].Type - = rtl::OUString::createFromAscii( HIERARCHY_LINK_CONTENT_TYPE ); - aSeq.getArray()[ 1 ].Attributes - = ucb::ContentInfoAttribute::KIND_LINK; - - uno::Sequence< beans::Property > aLinkProps( 2 ); - aLinkProps.getArray()[ 0 ] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - beans::PropertyAttribute::BOUND ); - aLinkProps.getArray()[ 1 ] = beans::Property( - rtl::OUString::createFromAscii( "TargetURL" ), - -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - beans::PropertyAttribute::BOUND ); - aSeq.getArray()[ 1 ].Properties = aLinkProps; - - return aSeq; - } - else - { - OSL_ENSURE( sal_False, - "queryCreatableContentsInfo called on non-folder object!" ); - - return uno::Sequence< ucb::ContentInfo >( 0 ); - } + return m_aProps.getCreatableContentsInfo(); } //========================================================================= @@ -974,7 +949,7 @@ sal_Bool HierarchyContent::exchangeIdentity( aOldURL.getLength(), xNewId->getContentIdentifier() ); uno::Reference< ucb::XContentIdentifier > xNewChildId - = new ::ucbhelper::ContentIdentifier( + = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewChildURL ); if ( !xChild->exchangeIdentity( xNewChildId ) ) @@ -1026,7 +1001,7 @@ uno::Reference< sdbc::XRow > HierarchyContent::getPropertyValues( xRow->appendString ( rProp, rData.getContentType() ); } else if ( rProp.Name.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM( "Title" ) ) ) + RTL_CONSTASCII_STRINGPARAM( "Title" ) ) ) { xRow->appendString ( rProp, rData.getTitle() ); } @@ -1041,6 +1016,12 @@ uno::Reference< sdbc::XRow > HierarchyContent::getPropertyValues( xRow->appendBoolean( rProp, rData.getIsFolder() ); } else if ( rProp.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + xRow->appendObject( + rProp, uno::makeAny( rData.getCreatableContentsInfo() ) ); + } + else if ( rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "TargetURL" ) ) ) { // TargetURL is only supported by links. @@ -1123,6 +1104,15 @@ uno::Reference< sdbc::XRow > HierarchyContent::getPropertyValues( // @@@ Might actually be read-only! beans::PropertyAttribute::BOUND ), rData.getTargetURL() ); + xRow->appendObject( + beans::Property( + rtl::OUString::createFromAscii( "CreatableContentsInfo" ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), + uno::makeAny( rData.getCreatableContentsInfo() ) ); // Append all Additional Core Properties. @@ -1161,11 +1151,11 @@ uno::Sequence< uno::Any > HierarchyContent::setPropertyValues( beans::PropertyChangeEvent aEvent; aEvent.Source = static_cast< cppu::OWeakObject * >( this ); - aEvent.Further = sal_False; -// aEvent.PropertyName = + aEvent.Further = sal_False; +// aEvent.PropertyName = aEvent.PropertyHandle = -1; -// aEvent.OldValue = -// aEvent.NewValue = +// aEvent.OldValue = +// aEvent.NewValue = const beans::PropertyValue* pValues = rValues.getConstArray(); sal_Int32 nCount = rValues.getLength(); @@ -1210,6 +1200,15 @@ uno::Sequence< uno::Any > HierarchyContent::setPropertyValues( static_cast< cppu::OWeakObject * >( this ) ); } else if ( rValue.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + // Read-only property! + aRet[ n ] <<= lang::IllegalAccessException( + rtl::OUString::createFromAscii( + "Property is read-only!" ), + static_cast< cppu::OWeakObject * >( this ) ); + } + else if ( rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Title" ) ) ) { if ( isReadOnly() ) @@ -1238,7 +1237,7 @@ uno::Sequence< uno::Any > HierarchyContent::setPropertyValues( m_aProps.setTitle( aNewValue ); m_aProps.setName( - ::ucb_impl::urihelper::encodeSegment( + ::ucb_impl::urihelper::encodeSegment( aNewValue ) ); // property change event will be set later... @@ -1350,7 +1349,7 @@ uno::Sequence< uno::Any > HierarchyContent::setPropertyValues( rValue.Name, rValue.Value ); aEvent.PropertyName = rValue.Name; - aEvent.OldValue = aOldValue; + aEvent.OldValue = aOldValue; aEvent.NewValue = rValue.Value; aChanges.getArray()[ nChanged ] = aEvent; @@ -1953,3 +1952,58 @@ void HierarchyContent::transfer( } } +//========================================================================= +//========================================================================= +// +// HierarchyContentProperties Implementation. +// +//========================================================================= +//========================================================================= + +uno::Sequence< ucb::ContentInfo > +HierarchyContentProperties::getCreatableContentsInfo() const +{ + if ( getIsFolder() ) + { + uno::Sequence< ucb::ContentInfo > aSeq( 2 ); + + // Folder. + aSeq.getArray()[ 0 ].Type + = rtl::OUString::createFromAscii( HIERARCHY_FOLDER_CONTENT_TYPE ); + aSeq.getArray()[ 0 ].Attributes + = ucb::ContentInfoAttribute::KIND_FOLDER; + + uno::Sequence< beans::Property > aFolderProps( 1 ); + aFolderProps.getArray()[ 0 ] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< const rtl::OUString * >( 0 ) ), + beans::PropertyAttribute::BOUND ); + aSeq.getArray()[ 0 ].Properties = aFolderProps; + + // Link. + aSeq.getArray()[ 1 ].Type + = rtl::OUString::createFromAscii( HIERARCHY_LINK_CONTENT_TYPE ); + aSeq.getArray()[ 1 ].Attributes + = ucb::ContentInfoAttribute::KIND_LINK; + + uno::Sequence< beans::Property > aLinkProps( 2 ); + aLinkProps.getArray()[ 0 ] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< const rtl::OUString * >( 0 ) ), + beans::PropertyAttribute::BOUND ); + aLinkProps.getArray()[ 1 ] = beans::Property( + rtl::OUString::createFromAscii( "TargetURL" ), + -1, + getCppuType( static_cast< const rtl::OUString * >( 0 ) ), + beans::PropertyAttribute::BOUND ); + aSeq.getArray()[ 1 ].Properties = aLinkProps; + + return aSeq; + } + else + { + return uno::Sequence< ucb::ContentInfo >( 0 ); + } +} diff --git a/ucb/source/ucp/hierarchy/hierarchycontent.hxx b/ucb/source/ucp/hierarchy/hierarchycontent.hxx index 168ada3b23..4dcb339ad6 100644 --- a/ucb/source/ucp/hierarchy/hierarchycontent.hxx +++ b/ucb/source/ucp/hierarchy/hierarchycontent.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchycontent.hxx,v $ - * $Revision: 1.13 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -101,6 +98,9 @@ public: sal_Bool getIsDocument() const { return !getIsFolder(); } + com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > + getCreatableContentsInfo() const; + const HierarchyEntryData & getHierarchyEntryData() const { return m_aData; } private: @@ -117,14 +117,14 @@ class HierarchyContent : public ::ucbhelper::ContentImplHelper, { enum ContentKind { LINK, FOLDER, ROOT }; enum ContentState { TRANSIENT, // created via CreateNewContent, - // but did not process "insert" yet + // but did not process "insert" yet PERSISTENT, // processed "insert" - DEAD // processed "delete" + DEAD // processed "delete" }; HierarchyContentProperties m_aProps; - ContentKind m_eKind; - ContentState m_eState; + ContentKind m_eKind; + ContentState m_eState; HierarchyContentProvider* m_pProvider; bool m_bCheckedReadOnly; bool m_bIsReadOnly; @@ -194,11 +194,11 @@ private: sal_Bool exchangeIdentity( const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XContentIdentifier >& xNewId ); + ::com::sun::star::ucb::XContentIdentifier >& xNewId ); ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > getPropertyValues( const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::Property >& rProperties ); + ::com::sun::star::beans::Property >& rProperties ); ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > setPropertyValues( const ::com::sun::star::uno::Sequence< @@ -270,7 +270,7 @@ public: execute( const com::sun::star::ucb::Command& aCommand, sal_Int32 CommandId, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment ) + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( com::sun::star::uno::Exception, com::sun::star::ucb::CommandAbortedException, com::sun::star::uno::RuntimeException ); @@ -300,7 +300,7 @@ public: getPropertyValues( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rSMgr, const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::Property >& rProperties, + ::com::sun::star::beans::Property >& rProperties, const HierarchyContentProperties& rData, HierarchyContentProvider* pProvider, const ::rtl::OUString& rContentId ); diff --git a/ucb/source/ucp/hierarchy/hierarchycontentcaps.cxx b/ucb/source/ucp/hierarchy/hierarchycontentcaps.cxx index 2adaa8cbb3..32677da383 100644 --- a/ucb/source/ucp/hierarchy/hierarchycontentcaps.cxx +++ b/ucb/source/ucp/hierarchy/hierarchycontentcaps.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchycontentcaps.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -39,25 +36,28 @@ Props/Commands: - root folder folder link link - (new) (new) + root folder folder link link + (new) (new) ---------------------------------------------------------------- - ContentType x x x x x - IsDocument x x x x x - IsFolder x x x x x - Title x x x x x - TargetURL x x + ContentType x x x x x + IsDocument x x x x x + IsFolder x x x x x + Title x x x x x + TargetURL x x + CreatableContentsInfo x x x x x - getCommandInfo x x x x x - getPropertySetInfo x x x x x - getPropertyValues x x x x x - setPropertyValues x x x x x - insert x x - delete x x - open x x - transfer x x + getCommandInfo x x x x x + getPropertySetInfo x x x x x + getPropertyValues x x x x x + setPropertyValues x x x x x + createNewContent x x + insert x x + delete x x + open x x + transfer x x *************************************************************************/ + #include <com/sun/star/beans/Property.hpp> #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/PropertyValue.hpp> @@ -76,6 +76,12 @@ using namespace hierarchy_ucp; // //========================================================================= +#define MAKEPROPSEQUENCE( a ) \ + uno::Sequence< beans::Property >( a, sizeof( a ) / sizeof( a[ 0 ] ) ) + +#define MAKECMDSEQUENCE( a ) \ + uno::Sequence< ucb::CommandInfo >( a, sizeof( a ) / sizeof( a[ 0 ] ) ) + //========================================================================= // // IMPORTENT: If any property data ( name / type / ... ) are changed, then @@ -143,13 +149,20 @@ uno::Sequence< beans::Property > HierarchyContent::getProperties( getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY - ) + ), + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// }; - return uno::Sequence< - beans::Property >( aLinkPropertyInfoTable, 5 ); + return MAKEPROPSEQUENCE( aLinkPropertyInfoTable ); } else { @@ -195,13 +208,20 @@ uno::Sequence< beans::Property > HierarchyContent::getProperties( -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND - ) + ), + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// }; - return uno::Sequence< - beans::Property >( aLinkPropertyInfoTable, 5 ); + return MAKEPROPSEQUENCE( aLinkPropertyInfoTable ); } } else if ( m_eKind == FOLDER ) @@ -248,16 +268,23 @@ uno::Sequence< beans::Property > HierarchyContent::getProperties( getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY - ) + ), /////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// }; - return uno::Sequence< - beans::Property >( aFolderPropertyInfoTable, 4 ); + return MAKEPROPSEQUENCE( aFolderPropertyInfoTable ); } else { @@ -294,16 +321,23 @@ uno::Sequence< beans::Property > HierarchyContent::getProperties( -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND - ) + ), /////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// }; - return uno::Sequence< - beans::Property >( aFolderPropertyInfoTable, 4 ); + return MAKEPROPSEQUENCE( aFolderPropertyInfoTable ); } } else @@ -314,6 +348,9 @@ uno::Sequence< beans::Property > HierarchyContent::getProperties( // //================================================================= + // Currently no difference between reonly /read-write + // -> all props ar read-only + static beans::Property aRootFolderPropertyInfoTable[] = { /////////////////////////////////////////////////////////////// @@ -346,16 +383,23 @@ uno::Sequence< beans::Property > HierarchyContent::getProperties( getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY - ) + ), /////////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) /////////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////////// }; - return uno::Sequence< - beans::Property >( aRootFolderPropertyInfoTable, 4 ); + return MAKEPROPSEQUENCE( aRootFolderPropertyInfoTable ); } } @@ -416,8 +460,7 @@ uno::Sequence< ucb::CommandInfo > HierarchyContent::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aLinkCommandInfoTable, 4 ); + return MAKECMDSEQUENCE( aLinkCommandInfoTable ); } else { @@ -470,8 +513,7 @@ uno::Sequence< ucb::CommandInfo > HierarchyContent::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aLinkCommandInfoTable, 6 ); + return MAKECMDSEQUENCE( aLinkCommandInfoTable ); } } else if ( m_eKind == FOLDER ) @@ -529,8 +571,7 @@ uno::Sequence< ucb::CommandInfo > HierarchyContent::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aFolderCommandInfoTable, 5 ); + return MAKECMDSEQUENCE( aFolderCommandInfoTable ); } else { @@ -589,13 +630,18 @@ uno::Sequence< ucb::CommandInfo > HierarchyContent::getCommands( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), -1, getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) + ), + ucb::CommandInfo( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) ) /////////////////////////////////////////////////////////// // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aFolderCommandInfoTable, 8 ); + return MAKECMDSEQUENCE( aFolderCommandInfoTable ); } } else @@ -653,8 +699,7 @@ uno::Sequence< ucb::CommandInfo > HierarchyContent::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aRootFolderCommandInfoTable, 5 ); + return MAKECMDSEQUENCE( aRootFolderCommandInfoTable ); } else { @@ -703,13 +748,18 @@ uno::Sequence< ucb::CommandInfo > HierarchyContent::getCommands( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), -1, getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) + ), + ucb::CommandInfo( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) ) /////////////////////////////////////////////////////////// // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aRootFolderCommandInfoTable, 6 ); + return MAKECMDSEQUENCE( aRootFolderCommandInfoTable ); } } } diff --git a/ucb/source/ucp/hierarchy/hierarchydata.cxx b/ucb/source/ucp/hierarchy/hierarchydata.cxx index eb88177691..bed1d9105d 100644 --- a/ucb/source/ucp/hierarchy/hierarchydata.cxx +++ b/ucb/source/ucp/hierarchy/hierarchydata.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchydata.cxx,v $ - * $Revision: 1.28 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchydata.hxx b/ucb/source/ucp/hierarchy/hierarchydata.hxx index 4add72a283..419a66b0c6 100644 --- a/ucb/source/ucp/hierarchy/hierarchydata.hxx +++ b/ucb/source/ucp/hierarchy/hierarchydata.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchydata.hxx,v $ - * $Revision: 1.14 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchydatasource.cxx b/ucb/source/ucp/hierarchy/hierarchydatasource.cxx index 933beec7f7..ee1e31821d 100644 --- a/ucb/source/ucp/hierarchy/hierarchydatasource.cxx +++ b/ucb/source/ucp/hierarchy/hierarchydatasource.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchydatasource.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchydatasource.hxx b/ucb/source/ucp/hierarchy/hierarchydatasource.hxx index 4681a53df2..2e4a7bc7d3 100644 --- a/ucb/source/ucp/hierarchy/hierarchydatasource.hxx +++ b/ucb/source/ucp/hierarchy/hierarchydatasource.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchydatasource.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx b/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx index d254d4259b..ebd5739afb 100644 --- a/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx +++ b/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchydatasupplier.cxx,v $ - * $Revision: 1.12 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx b/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx index a18d450310..1d1755b197 100644 --- a/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx +++ b/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchydatasupplier.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchyprovider.cxx b/ucb/source/ucp/hierarchy/hierarchyprovider.cxx index cef8e4759e..e35aa5a22e 100644 --- a/ucb/source/ucp/hierarchy/hierarchyprovider.cxx +++ b/ucb/source/ucp/hierarchy/hierarchyprovider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchyprovider.cxx,v $ - * $Revision: 1.18 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchyprovider.hxx b/ucb/source/ucp/hierarchy/hierarchyprovider.hxx index 4d2f09142a..1db4ce758e 100644 --- a/ucb/source/ucp/hierarchy/hierarchyprovider.hxx +++ b/ucb/source/ucp/hierarchy/hierarchyprovider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchyprovider.hxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchyservices.cxx b/ucb/source/ucp/hierarchy/hierarchyservices.cxx index 6df458de86..3249334d90 100644 --- a/ucb/source/ucp/hierarchy/hierarchyservices.cxx +++ b/ucb/source/ucp/hierarchy/hierarchyservices.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchyservices.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchyuri.cxx b/ucb/source/ucp/hierarchy/hierarchyuri.cxx index 7339e34341..51b18c6482 100644 --- a/ucb/source/ucp/hierarchy/hierarchyuri.cxx +++ b/ucb/source/ucp/hierarchy/hierarchyuri.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchyuri.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/hierarchyuri.hxx b/ucb/source/ucp/hierarchy/hierarchyuri.hxx index 46b9e92a0d..6738214cb6 100644 --- a/ucb/source/ucp/hierarchy/hierarchyuri.hxx +++ b/ucb/source/ucp/hierarchy/hierarchyuri.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: hierarchyuri.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/hierarchy/makefile.mk b/ucb/source/ucp/hierarchy/makefile.mk index b71ee7fa18..a968537873 100644 --- a/ucb/source/ucp/hierarchy/makefile.mk +++ b/ucb/source/ucp/hierarchy/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.15 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/inc/urihelper.hxx b/ucb/source/ucp/inc/urihelper.hxx index a3618293ed..fbf4cdb76f 100644 --- a/ucb/source/ucp/inc/urihelper.hxx +++ b/ucb/source/ucp/inc/urihelper.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: urihelper.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/makefile.mk b/ucb/source/ucp/odma/makefile.mk index 290898e655..d9ddcbfdf0 100644 --- a/ucb/source/ucp/odma/makefile.mk +++ b/ucb/source/ucp/odma/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.8 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_content.cxx b/ucb/source/ucp/odma/odma_content.cxx index fc4be63462..663436b2cb 100644 --- a/ucb/source/ucp/odma/odma_content.cxx +++ b/ucb/source/ucp/odma/odma_content.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_content.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_content.hxx b/ucb/source/ucp/odma/odma_content.hxx index 6c824176ed..ab50e1aec7 100644 --- a/ucb/source/ucp/odma/odma_content.hxx +++ b/ucb/source/ucp/odma/odma_content.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_content.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_contentcaps.cxx b/ucb/source/ucp/odma/odma_contentcaps.cxx index a9df4574c4..aa030af6fd 100644 --- a/ucb/source/ucp/odma/odma_contentcaps.cxx +++ b/ucb/source/ucp/odma/odma_contentcaps.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_contentcaps.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_contentprops.hxx b/ucb/source/ucp/odma/odma_contentprops.hxx index a5b5c7e41e..8ac9fae68f 100644 --- a/ucb/source/ucp/odma/odma_contentprops.hxx +++ b/ucb/source/ucp/odma/odma_contentprops.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_contentprops.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_datasupplier.cxx b/ucb/source/ucp/odma/odma_datasupplier.cxx index a047921752..a9024d4e64 100644 --- a/ucb/source/ucp/odma/odma_datasupplier.cxx +++ b/ucb/source/ucp/odma/odma_datasupplier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_datasupplier.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_datasupplier.hxx b/ucb/source/ucp/odma/odma_datasupplier.hxx index d9624d20f0..3653d0bdc4 100644 --- a/ucb/source/ucp/odma/odma_datasupplier.hxx +++ b/ucb/source/ucp/odma/odma_datasupplier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_datasupplier.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_inputstream.cxx b/ucb/source/ucp/odma/odma_inputstream.cxx index 6de50a90c2..d3011f56d7 100644 --- a/ucb/source/ucp/odma/odma_inputstream.cxx +++ b/ucb/source/ucp/odma/odma_inputstream.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_inputstream.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_inputstream.hxx b/ucb/source/ucp/odma/odma_inputstream.hxx index 93ae4a066b..c5fde77743 100644 --- a/ucb/source/ucp/odma/odma_inputstream.hxx +++ b/ucb/source/ucp/odma/odma_inputstream.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_inputstream.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_lib.cxx b/ucb/source/ucp/odma/odma_lib.cxx index e837c51ad6..b6a0d3ada1 100644 --- a/ucb/source/ucp/odma/odma_lib.cxx +++ b/ucb/source/ucp/odma/odma_lib.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_lib.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_lib.hxx b/ucb/source/ucp/odma/odma_lib.hxx index 2fbc1cda1e..0c9180ee7d 100644 --- a/ucb/source/ucp/odma/odma_lib.hxx +++ b/ucb/source/ucp/odma/odma_lib.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_lib.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_main.cxx b/ucb/source/ucp/odma/odma_main.cxx index 47152d0921..ccd032f686 100644 --- a/ucb/source/ucp/odma/odma_main.cxx +++ b/ucb/source/ucp/odma/odma_main.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_main.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_provider.cxx b/ucb/source/ucp/odma/odma_provider.cxx index 988af49933..c6a30acc86 100644 --- a/ucb/source/ucp/odma/odma_provider.cxx +++ b/ucb/source/ucp/odma/odma_provider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_provider.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_provider.hxx b/ucb/source/ucp/odma/odma_provider.hxx index 682e44fa64..cbd8e6b49f 100644 --- a/ucb/source/ucp/odma/odma_provider.hxx +++ b/ucb/source/ucp/odma/odma_provider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_provider.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_resultset.cxx b/ucb/source/ucp/odma/odma_resultset.cxx index 2fdd2aa0fd..0e87441c77 100644 --- a/ucb/source/ucp/odma/odma_resultset.cxx +++ b/ucb/source/ucp/odma/odma_resultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_resultset.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_resultset.hxx b/ucb/source/ucp/odma/odma_resultset.hxx index cb1ac90597..690f73d19f 100644 --- a/ucb/source/ucp/odma/odma_resultset.hxx +++ b/ucb/source/ucp/odma/odma_resultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_resultset.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/odma/odma_services.cxx b/ucb/source/ucp/odma/odma_services.cxx index 1acb689f86..1140083942 100644 --- a/ucb/source/ucp/odma/odma_services.cxx +++ b/ucb/source/ucp/odma/odma_services.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: odma_services.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/makefile.mk b/ucb/source/ucp/package/makefile.mk index 4b4f066ac1..bd4707cccc 100644 --- a/ucb/source/ucp/package/makefile.mk +++ b/ucb/source/ucp/package/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.11 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgcontent.cxx b/ucb/source/ucp/package/pkgcontent.cxx index eafac3d769..56d60eb551 100644 --- a/ucb/source/ucp/package/pkgcontent.cxx +++ b/ucb/source/ucp/package/pkgcontent.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgcontent.cxx,v $ - * $Revision: 1.59 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -55,9 +52,7 @@ #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/ucb/ContentInfoAttribute.hpp> #include <com/sun/star/ucb/InsertCommandArgument.hpp> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVEBADTRANSFRERURLEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveBadTransferURLException.hpp> -#endif #include <com/sun/star/ucb/MissingInputStreamException.hpp> #include <com/sun/star/ucb/NameClash.hpp> #include <com/sun/star/ucb/NameClashException.hpp> @@ -84,9 +79,9 @@ using namespace com::sun::star; using namespace package_ucp; -#define NONE_MODIFIED sal_uInt32( 0x00 ) -#define MEDIATYPE_MODIFIED sal_uInt32( 0x01 ) -#define COMPRESSED_MODIFIED sal_uInt32( 0x02 ) +#define NONE_MODIFIED sal_uInt32( 0x00 ) +#define MEDIATYPE_MODIFIED sal_uInt32( 0x01 ) +#define COMPRESSED_MODIFIED sal_uInt32( 0x02 ) #define ENCRYPTED_MODIFIED sal_uInt32( 0x04 ) #define ENCRYPTIONKEY_MODIFIED sal_uInt32( 0x08 ) @@ -105,17 +100,60 @@ ContentProperties::ContentProperties( const rtl::OUString& rContentType ) bEncrypted( sal_False ), bHasEncryptedEntries( sal_False ) { - bIsFolder = rContentType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( PACKAGE_FOLDER_CONTENT_TYPE ) ) - || rContentType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( PACKAGE_ZIP_FOLDER_CONTENT_TYPE ) ); + bIsFolder = rContentType.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( PACKAGE_FOLDER_CONTENT_TYPE ) ) + || rContentType.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( PACKAGE_ZIP_FOLDER_CONTENT_TYPE ) ); bIsDocument = !bIsFolder; OSL_ENSURE( bIsFolder || - rContentType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( PACKAGE_STREAM_CONTENT_TYPE ) ) || - rContentType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( PACKAGE_ZIP_STREAM_CONTENT_TYPE ) ), + rContentType.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( PACKAGE_STREAM_CONTENT_TYPE ) ) + || rContentType.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( PACKAGE_ZIP_STREAM_CONTENT_TYPE ) ), "ContentProperties::ContentProperties - Unknown type!" ); } //========================================================================= + +uno::Sequence< ucb::ContentInfo > +ContentProperties::getCreatableContentsInfo( PackageUri const & rUri ) const +{ + if ( bIsFolder ) + { + uno::Sequence< beans::Property > aProps( 1 ); + aProps.getArray()[ 0 ] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< const rtl::OUString * >( 0 ) ), + beans::PropertyAttribute::BOUND ); + + uno::Sequence< ucb::ContentInfo > aSeq( 2 ); + + // Folder. + aSeq.getArray()[ 0 ].Type + = Content::getContentType( rUri.getScheme(), sal_True ); + aSeq.getArray()[ 0 ].Attributes + = ucb::ContentInfoAttribute::KIND_FOLDER; + aSeq.getArray()[ 0 ].Properties = aProps; + + // Stream. + aSeq.getArray()[ 1 ].Type + = Content::getContentType( rUri.getScheme(), sal_False ); + aSeq.getArray()[ 1 ].Attributes + = ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM + | ucb::ContentInfoAttribute::KIND_DOCUMENT; + aSeq.getArray()[ 1 ].Properties = aProps; + + return aSeq; + } + else + { + return uno::Sequence< ucb::ContentInfo >( 0 ); + } +} + +//========================================================================= //========================================================================= // // Content Implementation. @@ -166,9 +204,9 @@ Content* Content::create( ucb::ContentInfo aInfo; if ( bFolder || aURI.isRootFolder() ) - aInfo.Type = GetContentType( aURI.getScheme(), sal_True ); + aInfo.Type = getContentType( aURI.getScheme(), sal_True ); else - aInfo.Type = GetContentType( aURI.getScheme(), sal_False ); + aInfo.Type = getContentType( aURI.getScheme(), sal_False ); return new Content( rxSMgr, pProvider, xId, xPackage, aURI, aInfo ); } @@ -188,9 +226,9 @@ Content* Content::create( PackageUri aURI( Identifier->getContentIdentifier() ); if ( !Info.Type.equalsIgnoreAsciiCase( - GetContentType( aURI.getScheme(), sal_True ) ) && + getContentType( aURI.getScheme(), sal_True ) ) && !Info.Type.equalsIgnoreAsciiCase( - GetContentType( aURI.getScheme(), sal_False ) ) ) + getContentType( aURI.getScheme(), sal_False ) ) ) return 0; uno::Reference< container::XHierarchicalNameAccess > xPackage; @@ -210,13 +248,13 @@ Content* Content::create( //========================================================================= // static -::rtl::OUString Content::GetContentType( +::rtl::OUString Content::getContentType( const ::rtl::OUString& aScheme, sal_Bool bFolder ) { return ( rtl::OUString::createFromAscii( "application/" ) + aScheme - + ( bFolder - ? rtl::OUString::createFromAscii( "-folder" ) + + ( bFolder + ? rtl::OUString::createFromAscii( "-folder" ) : rtl::OUString::createFromAscii( "-stream" ) ) ); } @@ -294,7 +332,7 @@ uno::Any SAL_CALL Content::queryInterface( const uno::Type & rType ) aRet = cppu::queryInterface( rType, static_cast< ucb::XContentCreator * >( this ) ); - return aRet.hasValue() ? aRet : ContentImplHelper::queryInterface( rType ); + return aRet.hasValue() ? aRet : ContentImplHelper::queryInterface( rType ); } //========================================================================= @@ -609,7 +647,7 @@ uno::Any SAL_CALL Content::execute( { ////////////////////////////////////////////////////////////////// // transfer - // ( Not available at stream objects ) + // ( Not available at stream objects ) ////////////////////////////////////////////////////////////////// ucb::TransferInfo aInfo; @@ -628,11 +666,36 @@ uno::Any SAL_CALL Content::execute( transfer( aInfo, Environment ); } else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "createNewContent" ) ) && + isFolder() ) + { + ////////////////////////////////////////////////////////////////// + // createNewContent + // ( Not available at stream objects ) + ////////////////////////////////////////////////////////////////// + + ucb::ContentInfo aInfo; + if ( !( aCommand.Argument >>= aInfo ) ) + { + OSL_ENSURE( sal_False, "Wrong argument type!" ); + ucbhelper::cancelCommandExecution( + uno::makeAny( lang::IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >( this ), + -1 ) ), + Environment ); + // Unreachable + } + + aRet <<= createNewContent( aInfo ); + } + else if ( aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "flush" ) ) ) { ////////////////////////////////////////////////////////////////// // flush - // ( Not available at stream objects ) + // ( Not available at stream objects ) ////////////////////////////////////////////////////////////////// if( !flushData() ) @@ -693,43 +756,7 @@ uno::Sequence< ucb::ContentInfo > SAL_CALL Content::queryCreatableContentsInfo() throw( uno::RuntimeException ) { - if ( isFolder() ) - { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); - - uno::Sequence< beans::Property > aProps( 1 ); - aProps.getArray()[ 0 ] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - beans::PropertyAttribute::BOUND ); - - uno::Sequence< ucb::ContentInfo > aSeq( 2 ); - - // Folder. - aSeq.getArray()[ 0 ].Type - = GetContentType( m_aUri.getScheme(), sal_True ); - aSeq.getArray()[ 0 ].Attributes - = ucb::ContentInfoAttribute::KIND_FOLDER; - aSeq.getArray()[ 0 ].Properties = aProps; - - // Stream. - aSeq.getArray()[ 1 ].Type - = GetContentType( m_aUri.getScheme(), sal_False ); - aSeq.getArray()[ 1 ].Attributes - = ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM - | ucb::ContentInfoAttribute::KIND_DOCUMENT; - aSeq.getArray()[ 1 ].Properties = aProps; - - return aSeq; - } - else - { - OSL_ENSURE( sal_False, - "queryCreatableContentsInfo called on non-folder object!" ); - - return uno::Sequence< ucb::ContentInfo >( 0 ); - } + return m_aProps.getCreatableContentsInfo( m_aUri ); } //========================================================================= @@ -746,16 +773,16 @@ Content::createNewContent( const ucb::ContentInfo& Info ) return uno::Reference< ucb::XContent >(); if ( !Info.Type.equalsIgnoreAsciiCase( - GetContentType( m_aUri.getScheme(), sal_True ) ) && + getContentType( m_aUri.getScheme(), sal_True ) ) && !Info.Type.equalsIgnoreAsciiCase( - GetContentType( m_aUri.getScheme(), sal_False ) ) ) + getContentType( m_aUri.getScheme(), sal_False ) ) ) return uno::Reference< ucb::XContent >(); rtl::OUString aURL = m_aUri.getUri(); aURL += rtl::OUString::createFromAscii( "/" ); if ( Info.Type.equalsIgnoreAsciiCase( - GetContentType( m_aUri.getScheme(), sal_True ) ) ) + getContentType( m_aUri.getScheme(), sal_True ) ) ) aURL += rtl::OUString::createFromAscii( "New_Folder" ); else aURL += rtl::OUString::createFromAscii( "New_Stream" ); @@ -828,7 +855,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( const uno::Reference< lang::XMultiServiceFactory >& rSMgr, const uno::Sequence< beans::Property >& rProperties, const ContentProperties& rData, - const rtl::Reference< ::ucbhelper::ContentProviderImplHelper >& + const rtl::Reference< ::ucbhelper::ContentProviderImplHelper >& rProvider, const rtl::OUString& rContentId ) { @@ -871,6 +898,14 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( xRow->appendBoolean( rProp, rData.bIsFolder ); } else if ( rProp.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + xRow->appendObject( + rProp, uno::makeAny( + rData.getCreatableContentsInfo( + PackageUri( rContentId ) ) ) ); + } + else if ( rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaType" ) ) ) { xRow->appendString ( rProp, rData.aMediaType ); @@ -978,6 +1013,16 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), rData.bIsFolder ); + xRow->appendObject( + beans::Property( + rtl::OUString::createFromAscii( "CreatableContentsInfo" ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), + uno::makeAny( + rData.getCreatableContentsInfo( PackageUri( rContentId ) ) ) ); xRow->appendString( beans::Property( rtl::OUString::createFromAscii( "MediaType" ), @@ -1068,11 +1113,11 @@ uno::Sequence< uno::Any > Content::setPropertyValues( beans::PropertyChangeEvent aEvent; aEvent.Source = static_cast< cppu::OWeakObject * >( this ); - aEvent.Further = sal_False; -// aEvent.PropertyName = + aEvent.Further = sal_False; +// aEvent.PropertyName = aEvent.PropertyHandle = -1; -// aEvent.OldValue = -// aEvent.NewValue = +// aEvent.OldValue = +// aEvent.NewValue = const beans::PropertyValue* pValues = rValues.getConstArray(); sal_Int32 nCount = rValues.getLength(); @@ -1116,6 +1161,15 @@ uno::Sequence< uno::Any > Content::setPropertyValues( static_cast< cppu::OWeakObject * >( this ) ); } else if ( rValue.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + // Read-only property! + aRet[ n ] <<= lang::IllegalAccessException( + rtl::OUString::createFromAscii( + "Property is read-only!" ), + static_cast< cppu::OWeakObject * >( this ) ); + } + else if ( rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Title" ) ) ) { if ( m_aUri.isRootFolder() ) @@ -1181,7 +1235,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.NewValue = uno::makeAny( aNewValue ); m_aProps.aMediaType = aNewValue; - nChanged++; + nChanged++; bStore = sal_True; m_nModifiedProps |= MEDIATYPE_MODIFIED; } @@ -1219,7 +1273,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.NewValue = uno::makeAny( bNewValue ); m_aProps.bCompressed = bNewValue; - nChanged++; + nChanged++; bStore = sal_True; m_nModifiedProps |= COMPRESSED_MODIFIED; } @@ -1256,7 +1310,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.NewValue = uno::makeAny( bNewValue ); m_aProps.bEncrypted = bNewValue; - nChanged++; + nChanged++; bStore = sal_True; m_nModifiedProps |= ENCRYPTED_MODIFIED; } @@ -1350,7 +1404,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( rValue.Name, rValue.Value ); aEvent.PropertyName = rValue.Name; - aEvent.OldValue = aOldValue; + aEvent.OldValue = aOldValue; aEvent.NewValue = rValue.Value; aChanges.getArray()[ nChanged ] = aEvent; @@ -1483,7 +1537,7 @@ uno::Any Content::open( uno::Reference< ucb::XDynamicResultSet > xSet = new DynamicResultSet( m_xSMgr, this, rArg, xEnv ); return uno::makeAny( xSet ); - } + } else { ////////////////////////////////////////////////////////////////// @@ -1506,7 +1560,7 @@ uno::Any Content::open( rtl::OUString aURL = m_xIdentifier->getContentIdentifier(); uno::Reference< io::XOutputStream > xOut( rArg.Sink, uno::UNO_QUERY ); if ( xOut.is() ) - { + { // PUSH: write data into xOut uno::Reference< io::XInputStream > xIn = getInputStream(); @@ -1560,14 +1614,14 @@ uno::Any Content::open( { // closeOutput, readSomeBytes, writeBytes } - } + } else - { + { uno::Reference< io::XActiveDataSink > xDataSink( rArg.Sink, uno::UNO_QUERY ); - if ( xDataSink.is() ) + if ( xDataSink.is() ) { - // PULL: wait for client read + // PULL: wait for client read uno::Reference< io::XInputStream > xIn = getInputStream(); if ( !xIn.is() ) @@ -1598,7 +1652,7 @@ uno::Any Content::open( // Done. xDataSink->setInputStream( xIn ); } - else + else { // Note: aOpenCommand.Sink may contain an XStream // implementation. Support for this type of @@ -1612,7 +1666,7 @@ uno::Any Content::open( xEnv ); // Unreachable } - } + } } return uno::Any(); @@ -1931,8 +1985,8 @@ void Content::transfer( ////////////////////////////////////////////////////////////////////// rtl::OUString aType = xSource->isFolder() - ? GetContentType( m_aUri.getScheme(), sal_True ) - : GetContentType( m_aUri.getScheme(), sal_False ); + ? getContentType( m_aUri.getScheme(), sal_True ) + : getContentType( m_aUri.getScheme(), sal_False ); ucb::ContentInfo aContentInfo; aContentInfo.Type = aType; aContentInfo.Attributes = 0; @@ -2185,7 +2239,7 @@ sal_Bool Content::exchangeIdentity( aOldURL.getLength(), xNewId->getContentIdentifier() ); uno::Reference< ucb::XContentIdentifier > xNewChildId - = new ::ucbhelper::ContentIdentifier( + = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewChildURL ); if ( !xChild->exchangeIdentity( xNewChildId ) ) @@ -2413,14 +2467,14 @@ sal_Bool Content::loadData( if ( xEnumAccess.is() ) { // folder - rProps.aContentType = GetContentType( rURI.getScheme(), sal_True ); + rProps.aContentType = getContentType( rURI.getScheme(), sal_True ); rProps.bIsDocument = sal_False; rProps.bIsFolder = sal_True; } else { // stream - rProps.aContentType = GetContentType( rURI.getScheme(), sal_False ); + rProps.aContentType = getContentType( rURI.getScheme(), sal_False ); rProps.bIsDocument = sal_True; rProps.bIsFolder = sal_False; } @@ -2611,8 +2665,8 @@ sal_Bool Content::storeData( const uno::Reference< io::XInputStream >& xStream ) if ( !xNA->hasByHierarchicalName( m_aUri.getPath() ) ) { -// if ( !bCreate ) -// return sal_True; +// if ( !bCreate ) +// return sal_True; try { @@ -2956,4 +3010,3 @@ uno::Reference< container::XEnumeration > Content::getIterator() return xIter; } - diff --git a/ucb/source/ucp/package/pkgcontent.hxx b/ucb/source/ucp/package/pkgcontent.hxx index 0673465d5c..1021f2563e 100644 --- a/ucb/source/ucp/package/pkgcontent.hxx +++ b/ucb/source/ucp/package/pkgcontent.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgcontent.hxx,v $ - * $Revision: 1.31 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -34,9 +31,7 @@ #include <list> #include <rtl/ref.hxx> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVEBADTRANSFRERURLEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveBadTransferURLException.hpp> -#endif #include <com/sun/star/ucb/XContentCreator.hpp> #include <ucbhelper/contenthelper.hxx> #include "pkguri.hxx" @@ -100,6 +95,9 @@ struct ContentProperties bHasEncryptedEntries( sal_False ) {} ContentProperties( const ::rtl::OUString& rContentType ); + + com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > + getCreatableContentsInfo( PackageUri const & rUri ) const; }; //========================================================================= @@ -110,17 +108,17 @@ class Content : public ::ucbhelper::ContentImplHelper, public com::sun::star::ucb::XContentCreator { enum ContentState { TRANSIENT, // created via CreateNewContent, - // but did not process "insert" yet + // but did not process "insert" yet PERSISTENT, // processed "insert" - DEAD // processed "delete" + DEAD // processed "delete" }; - PackageUri m_aUri; - ContentProperties m_aProps; - ContentState m_eState; + PackageUri m_aUri; + ContentProperties m_aProps; + ContentState m_eState; com::sun::star::uno::Reference< - com::sun::star::container::XHierarchicalNameAccess > m_xPackage; - ContentProvider* m_pProvider; + com::sun::star::container::XHierarchicalNameAccess > m_xPackage; + ContentProvider* m_pProvider; sal_uInt32 m_nModifiedProps; private: @@ -130,7 +128,7 @@ private: const com::sun::star::uno::Reference< com::sun::star::ucb::XContentIdentifier >& Identifier, const ::com::sun::star::uno::Reference< - com::sun::star::container::XHierarchicalNameAccess >& Package, + com::sun::star::container::XHierarchicalNameAccess >& Package, const PackageUri& rUri, const ContentProperties& rProps ); Content( const com::sun::star::uno::Reference< @@ -139,7 +137,7 @@ private: const com::sun::star::uno::Reference< com::sun::star::ucb::XContentIdentifier >& Identifier, const com::sun::star::uno::Reference< - com::sun::star::container::XHierarchicalNameAccess >& Package, + com::sun::star::container::XHierarchicalNameAccess >& Package, const PackageUri& rUri, const com::sun::star::ucb::ContentInfo& Info ); @@ -155,7 +153,7 @@ private: getPropertyValues( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rSMgr, const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::Property >& rProperties, + ::com::sun::star::beans::Property >& rProperties, const ContentProperties& rData, const rtl::Reference< ::ucbhelper::ContentProviderImplHelper >& rProvider, @@ -183,24 +181,20 @@ private: const PackageUri& rURI, ContentProperties& rProps, com::sun::star::uno::Reference< - com::sun::star::container::XHierarchicalNameAccess > & + com::sun::star::container::XHierarchicalNameAccess > & rxPackage ); static sal_Bool hasData( ContentProvider* pProvider, const PackageUri& rURI, com::sun::star::uno::Reference< - com::sun::star::container::XHierarchicalNameAccess > & + com::sun::star::container::XHierarchicalNameAccess > & rxPackage ); - static ::rtl::OUString - GetContentType( const ::rtl::OUString& aScheme, - sal_Bool bFolder ); - sal_Bool hasData( const PackageUri& rURI ); sal_Bool renameData( const com::sun::star::uno::Reference< - com::sun::star::ucb::XContentIdentifier >& xOldId, + com::sun::star::ucb::XContentIdentifier >& xOldId, const com::sun::star::uno::Reference< com::sun::star::ucb::XContentIdentifier >& xNewId ); sal_Bool @@ -223,7 +217,7 @@ private: ::com::sun::star::uno::Any open( const ::com::sun::star::ucb::OpenCommandArgument2& rArg, const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XCommandEnvironment > & xEnv ) + ::com::sun::star::ucb::XCommandEnvironment > & xEnv ) throw( ::com::sun::star::uno::Exception ); void insert( const ::com::sun::star::uno::Reference< @@ -292,7 +286,7 @@ public: execute( const com::sun::star::ucb::Command& aCommand, sal_Int32 CommandId, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment ) + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( com::sun::star::uno::Exception, com::sun::star::ucb::CommandAbortedException, com::sun::star::uno::RuntimeException ); @@ -323,7 +317,7 @@ public: getPropertyValues( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rSMgr, const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::Property >& rProperties, + ::com::sun::star::beans::Property >& rProperties, ContentProvider* pProvider, const ::rtl::OUString& rContentId ); @@ -331,6 +325,9 @@ public: ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > getIterator(); + + static ::rtl::OUString + getContentType( const ::rtl::OUString& aScheme, sal_Bool bFolder ); }; } diff --git a/ucb/source/ucp/package/pkgcontentcaps.cxx b/ucb/source/ucp/package/pkgcontentcaps.cxx index 6e6e4a9123..636b1b3164 100644 --- a/ucb/source/ucp/package/pkgcontentcaps.cxx +++ b/ucb/source/ucp/package/pkgcontentcaps.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgcontentcaps.cxx,v $ - * $Revision: 1.22 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -45,6 +42,7 @@ MediaType (w) (w) w Title r w w Size - - r + CreatableContentsInfo r r r Compressed - - w Encrypted - - w HasEncryptedEntries r - - @@ -58,6 +56,7 @@ open x x x transfer x x - flush x x - + createNewContent x x - *************************************************************************/ #include <com/sun/star/beans/Property.hpp> @@ -78,6 +77,12 @@ using namespace package_ucp; // //========================================================================= +#define MAKEPROPSEQUENCE( a ) \ + uno::Sequence< beans::Property >( a, sizeof( a ) / sizeof( a[ 0 ] ) ) + +#define MAKECMDSEQUENCE( a ) \ + uno::Sequence< ucb::CommandInfo >( a, sizeof( a ) / sizeof( a[ 0 ] ) ) + //========================================================================= // // IMPORTENT: If any property data ( name / type / ... ) are changed, then @@ -145,6 +150,15 @@ uno::Sequence< beans::Property > Content::getProperties( getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND ), + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ), /////////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////////// @@ -157,8 +171,7 @@ uno::Sequence< beans::Property > Content::getProperties( | beans::PropertyAttribute::READONLY ) }; - return uno::Sequence< beans::Property >( - aRootFolderPropertyInfoTable, 6 ); + return MAKEPROPSEQUENCE( aRootFolderPropertyInfoTable ); } else { @@ -210,13 +223,21 @@ uno::Sequence< beans::Property > Content::getProperties( -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND + ), + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) /////////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////////// }; - return uno::Sequence< beans::Property >( - aFolderPropertyInfoTable, 5 ); + return MAKEPROPSEQUENCE( aFolderPropertyInfoTable ); } } else @@ -275,6 +296,15 @@ uno::Sequence< beans::Property > Content::getProperties( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ), /////////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////////// @@ -291,7 +321,7 @@ uno::Sequence< beans::Property > Content::getProperties( beans::PropertyAttribute::BOUND ) }; - return uno::Sequence< beans::Property >( aStreamPropertyInfoTable, 8 ); + return MAKEPROPSEQUENCE( aStreamPropertyInfoTable ); } } @@ -360,6 +390,12 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) ), + ucb::CommandInfo( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) + ), /////////////////////////////////////////////////////////// // New commands /////////////////////////////////////////////////////////// @@ -370,8 +406,7 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( ) }; - return uno::Sequence< - ucb::CommandInfo >( aRootFolderCommandInfoTable, 7 ); + return MAKECMDSEQUENCE( aRootFolderCommandInfoTable ); } else { @@ -439,6 +474,12 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) ), + ucb::CommandInfo( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) + ), /////////////////////////////////////////////////////////// // New commands /////////////////////////////////////////////////////////// @@ -449,8 +490,7 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( ) }; - return uno::Sequence< - ucb::CommandInfo >( aFolderCommandInfoTable, 9 ); + return MAKECMDSEQUENCE( aFolderCommandInfoTable ); } } else @@ -517,8 +557,6 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( /////////////////////////////////////////////////////////////// }; - return uno::Sequence< ucb::CommandInfo >( - aStreamCommandInfoTable, 7 ); + return MAKECMDSEQUENCE( aStreamCommandInfoTable ); } } - diff --git a/ucb/source/ucp/package/pkgdatasupplier.cxx b/ucb/source/ucp/package/pkgdatasupplier.cxx index c465e8d7b4..72a6ffe91b 100644 --- a/ucb/source/ucp/package/pkgdatasupplier.cxx +++ b/ucb/source/ucp/package/pkgdatasupplier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgdatasupplier.cxx,v $ - * $Revision: 1.16 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgdatasupplier.hxx b/ucb/source/ucp/package/pkgdatasupplier.hxx index e0eeccbefb..6775ff581e 100644 --- a/ucb/source/ucp/package/pkgdatasupplier.hxx +++ b/ucb/source/ucp/package/pkgdatasupplier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgdatasupplier.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgprovider.cxx b/ucb/source/ucp/package/pkgprovider.cxx index 434fe969e0..dfaaf43034 100644 --- a/ucb/source/ucp/package/pkgprovider.cxx +++ b/ucb/source/ucp/package/pkgprovider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgprovider.cxx,v $ - * $Revision: 1.22 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgprovider.hxx b/ucb/source/ucp/package/pkgprovider.hxx index 8d84e8cb54..4862f64ace 100644 --- a/ucb/source/ucp/package/pkgprovider.hxx +++ b/ucb/source/ucp/package/pkgprovider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgprovider.hxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgresultset.cxx b/ucb/source/ucp/package/pkgresultset.cxx index 5320b2b16f..a843c6971f 100644 --- a/ucb/source/ucp/package/pkgresultset.cxx +++ b/ucb/source/ucp/package/pkgresultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgresultset.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgresultset.hxx b/ucb/source/ucp/package/pkgresultset.hxx index 6d9fca191e..9b6adca131 100644 --- a/ucb/source/ucp/package/pkgresultset.hxx +++ b/ucb/source/ucp/package/pkgresultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgresultset.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkgservices.cxx b/ucb/source/ucp/package/pkgservices.cxx index 202edf41f8..61edd11642 100644 --- a/ucb/source/ucp/package/pkgservices.cxx +++ b/ucb/source/ucp/package/pkgservices.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkgservices.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkguri.cxx b/ucb/source/ucp/package/pkguri.cxx index a246d9cbd5..12a54eeda5 100644 --- a/ucb/source/ucp/package/pkguri.cxx +++ b/ucb/source/ucp/package/pkguri.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkguri.cxx,v $ - * $Revision: 1.21 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/package/pkguri.hxx b/ucb/source/ucp/package/pkguri.hxx index 42949afd51..ee2bbd9ca3 100644 --- a/ucb/source/ucp/package/pkguri.hxx +++ b/ucb/source/ucp/package/pkguri.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: pkguri.hxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/makefile.mk b/ucb/source/ucp/tdoc/makefile.mk index 1c2c44b124..2c85514ef9 100644 --- a/ucb/source/ucp/tdoc/makefile.mk +++ b/ucb/source/ucp/tdoc/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.10 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_content.cxx b/ucb/source/ucp/tdoc/tdoc_content.cxx index 308dd0a934..8a17b44fb3 100644 --- a/ucb/source/ucp/tdoc/tdoc_content.cxx +++ b/ucb/source/ucp/tdoc/tdoc_content.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_content.cxx,v $ - * $Revision: 1.16 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -226,7 +223,7 @@ uno::Any SAL_CALL Content::queryInterface( const uno::Type & rType ) rType, static_cast< ucb::XContentCreator * >( this ) ); if ( aRet.hasValue() ) { - if ( !isContentCreator() ) + if ( !m_aProps.isContentCreator() ) return uno::Any(); } } @@ -249,7 +246,7 @@ uno::Sequence< uno::Type > SAL_CALL Content::getTypes() { cppu::OTypeCollection * pCollection = 0; - if ( isContentCreator() ) + if ( m_aProps.isContentCreator() ) { static cppu::OTypeCollection* pFolderTypes = 0; @@ -660,6 +657,49 @@ uno::Any SAL_CALL Content::execute( transfer( aInfo, Environment ); } + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "createNewContent" ) ) ) + { + ////////////////////////////////////////////////////////////////// + // createNewContent ( Supported by document and folders only ) + ////////////////////////////////////////////////////////////////// + + { + osl::MutexGuard aGuard( m_aMutex ); + + ContentType eType = m_aProps.getType(); + if ( ( eType != FOLDER ) && ( eType != DOCUMENT ) ) + { + ucbhelper::cancelCommandExecution( + uno::makeAny( ucb::UnsupportedCommandException( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "createNewContent command only " + "supported by folders and " + "documents!" ) ), + static_cast< cppu::OWeakObject * >( + this ) ) ), + Environment ); + // Unreachable + } + } + + ucb::ContentInfo aInfo; + if ( !( aCommand.Argument >>= aInfo ) ) + { + OSL_ENSURE( sal_False, "Wrong argument type!" ); + ucbhelper::cancelCommandExecution( + uno::makeAny( lang::IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >( this ), + -1 ) ), + Environment ); + // Unreachable + } + + aRet <<= createNewContent( aInfo ); + } else { ////////////////////////////////////////////////////////////////// @@ -695,65 +735,7 @@ uno::Sequence< ucb::ContentInfo > SAL_CALL Content::queryCreatableContentsInfo() throw( uno::RuntimeException ) { - if ( isContentCreator() ) - { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); - - uno::Sequence< beans::Property > aProps( 1 ); - aProps.getArray()[ 0 ] = beans::Property( - rtl::OUString::createFromAscii( "Title" ), - -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - beans::PropertyAttribute::BOUND ); - -#ifdef NO_STREAM_CREATION_WITHIN_DOCUMENT_ROOT - if ( m_aProps.getType() == DOCUMENT ) - { - // streams cannot be created as direct children of document root - uno::Sequence< ucb::ContentInfo > aSeq( 1 ); - - // Folder. - aSeq.getArray()[ 0 ].Type - = rtl::OUString::createFromAscii( TDOC_FOLDER_CONTENT_TYPE ); - aSeq.getArray()[ 0 ].Attributes - = ucb::ContentInfoAttribute::KIND_FOLDER; - aSeq.getArray()[ 0 ].Properties = aProps; - - return aSeq; - } - else - { -#endif - uno::Sequence< ucb::ContentInfo > aSeq( 2 ); - - // Folder. - aSeq.getArray()[ 0 ].Type - = rtl::OUString::createFromAscii( TDOC_FOLDER_CONTENT_TYPE ); - aSeq.getArray()[ 0 ].Attributes - = ucb::ContentInfoAttribute::KIND_FOLDER; - aSeq.getArray()[ 0 ].Properties = aProps; - - // Stream. - aSeq.getArray()[ 1 ].Type - = rtl::OUString::createFromAscii( TDOC_STREAM_CONTENT_TYPE ); - aSeq.getArray()[ 1 ].Attributes - = ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM - | ucb::ContentInfoAttribute::KIND_DOCUMENT; - aSeq.getArray()[ 1 ].Properties = aProps; - - return aSeq; -#ifdef NO_STREAM_CREATION_WITHIN_DOCUMENT_ROOT - } -#endif - } - else - { - OSL_ENSURE( sal_False, - "queryCreatableContentsInfo called on non-contentcreator " - "object!" ); - - return uno::Sequence< ucb::ContentInfo >( 0 ); - } + return m_aProps.getCreatableContentsInfo(); } //========================================================================= @@ -762,7 +744,7 @@ uno::Reference< ucb::XContent > SAL_CALL Content::createNewContent( const ucb::ContentInfo& Info ) throw( uno::RuntimeException ) { - if ( isContentCreator() ) + if ( m_aProps.isContentCreator() ) { osl::Guard< osl::Mutex > aGuard( m_aMutex ); @@ -963,7 +945,7 @@ sal_Bool Content::exchangeIdentity( aOldURL.getLength(), xNewId->getContentIdentifier() ); uno::Reference< ucb::XContentIdentifier > xNewChildId - = new ::ucbhelper::ContentIdentifier( + = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewChildURL ); if ( !xChild->exchangeIdentity( xNewChildId ) ) @@ -1061,6 +1043,12 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( xRow->appendBoolean( rProp, rData.getIsFolder() ); } else if ( rProp.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + xRow->appendObject( + rProp, uno::makeAny( rData.getCreatableContentsInfo() ) ); + } + else if ( rProp.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Storage" ) ) ) { // Storage is only supported by folders. @@ -1155,6 +1143,15 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ), rData.getIsFolder() ); + xRow->appendObject( + beans::Property( + rtl::OUString::createFromAscii( "CreatableContentsInfo" ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ), + uno::makeAny( rData.getCreatableContentsInfo() ) ); // Storage is only supported by folders. if ( eType == FOLDER ) @@ -1218,11 +1215,11 @@ uno::Sequence< uno::Any > Content::setPropertyValues( beans::PropertyChangeEvent aEvent; aEvent.Source = static_cast< cppu::OWeakObject * >( this ); - aEvent.Further = sal_False; -// aEvent.PropertyName = + aEvent.Further = sal_False; + // aEvent.PropertyName = aEvent.PropertyHandle = -1; -// aEvent.OldValue = -// aEvent.NewValue = + // aEvent.OldValue = + // aEvent.NewValue = const beans::PropertyValue* pValues = rValues.getConstArray(); sal_Int32 nCount = rValues.getLength(); @@ -1266,6 +1263,15 @@ uno::Sequence< uno::Any > Content::setPropertyValues( static_cast< cppu::OWeakObject * >( this ) ); } else if ( rValue.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + // Read-only property! + aRet[ n ] <<= lang::IllegalAccessException( + rtl::OUString::createFromAscii( + "Property is read-only!" ), + static_cast< cppu::OWeakObject * >( this ) ); + } + else if ( rValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Title" ) ) ) { // Title is read-only for root and documents. @@ -1382,7 +1388,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( rValue.Name, rValue.Value ); aEvent.PropertyName = rValue.Name; - aEvent.OldValue = aOldValue; + aEvent.OldValue = aOldValue; aEvent.NewValue = rValue.Value; aChanges.getArray()[ nChanged ] = aEvent; @@ -1943,7 +1949,7 @@ Content::queryChildContent( const rtl::OUString & rRelativeChildUri ) aBuf.append( rRelativeChildUri.copy( 1 ) ); uno::Reference< ucb::XContentIdentifier > xChildId - = new ::ucbhelper::ContentIdentifier( + = new ::ucbhelper::ContentIdentifier( m_xSMgr, aBuf.makeStringAndClear() ); uno::Reference< ucb::XContent > xChild; @@ -2370,14 +2376,6 @@ void Content::transfer( } //========================================================================= -bool Content::isContentCreator() -{ - osl::Guard< osl::Mutex > aGuard( m_aMutex ); - return - ( m_aProps.getType() == FOLDER ) || ( m_aProps.getType() == DOCUMENT ); -} - -//========================================================================= //static bool Content::hasData( ContentProvider* pProvider, const Uri & rUri ) { @@ -3059,3 +3057,79 @@ uno::Reference< io::XStream > Content::getStream( } } } + +//========================================================================= +//========================================================================= +// +// ContentProperties Implementation. +// +//========================================================================= +//========================================================================= + +uno::Sequence< ucb::ContentInfo > +ContentProperties::getCreatableContentsInfo() const +{ + if ( isContentCreator() ) + { + uno::Sequence< beans::Property > aProps( 1 ); + aProps.getArray()[ 0 ] = beans::Property( + rtl::OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< const rtl::OUString * >( 0 ) ), + beans::PropertyAttribute::BOUND ); + +#ifdef NO_STREAM_CREATION_WITHIN_DOCUMENT_ROOT + if ( getType() == DOCUMENT ) + { + // streams cannot be created as direct children of document root + uno::Sequence< ucb::ContentInfo > aSeq( 1 ); + + // Folder. + aSeq.getArray()[ 0 ].Type + = rtl::OUString::createFromAscii( TDOC_FOLDER_CONTENT_TYPE ); + aSeq.getArray()[ 0 ].Attributes + = ucb::ContentInfoAttribute::KIND_FOLDER; + aSeq.getArray()[ 0 ].Properties = aProps; + + return aSeq; + } + else + { +#endif + uno::Sequence< ucb::ContentInfo > aSeq( 2 ); + + // Folder. + aSeq.getArray()[ 0 ].Type + = rtl::OUString::createFromAscii( TDOC_FOLDER_CONTENT_TYPE ); + aSeq.getArray()[ 0 ].Attributes + = ucb::ContentInfoAttribute::KIND_FOLDER; + aSeq.getArray()[ 0 ].Properties = aProps; + + // Stream. + aSeq.getArray()[ 1 ].Type + = rtl::OUString::createFromAscii( TDOC_STREAM_CONTENT_TYPE ); + aSeq.getArray()[ 1 ].Attributes + = ucb::ContentInfoAttribute::INSERT_WITH_INPUTSTREAM + | ucb::ContentInfoAttribute::KIND_DOCUMENT; + aSeq.getArray()[ 1 ].Properties = aProps; + + return aSeq; +#ifdef NO_STREAM_CREATION_WITHIN_DOCUMENT_ROOT + } +#endif + } + else + { + OSL_ENSURE( sal_False, + "getCreatableContentsInfo called on non-contentcreator " + "object!" ); + + return uno::Sequence< ucb::ContentInfo >( 0 ); + } +} + +//========================================================================= +bool ContentProperties::isContentCreator() const +{ + return ( getType() == FOLDER ) || ( getType() == DOCUMENT ); +} diff --git a/ucb/source/ucp/tdoc/tdoc_content.hxx b/ucb/source/ucp/tdoc/tdoc_content.hxx index 1e6f03544b..7fde2aeea9 100644 --- a/ucb/source/ucp/tdoc/tdoc_content.hxx +++ b/ucb/source/ucp/tdoc/tdoc_content.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_content.hxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -43,7 +40,8 @@ namespace com { namespace sun { namespace star { namespace sdbc { class XRow; } namespace io { class XInputStream; class XOutputStream; } namespace beans { struct PropertyValue; } - namespace ucb { struct OpenCommandArgument2; struct TransferInfo; } + namespace ucb { struct OpenCommandArgument2; struct TransferInfo; + struct ContentInfo; } } } } namespace tdoc_ucp @@ -94,6 +92,11 @@ public: const rtl::OUString & getTitle() const { return m_aTitle; } void setTitle( const rtl::OUString & rTitle ) { m_aTitle = rTitle; } + com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > + getCreatableContentsInfo() const; + + bool isContentCreator() const; + private: ContentType m_eType; rtl::OUString m_aContentType; @@ -106,7 +109,7 @@ class Content : public ::ucbhelper::ContentImplHelper, public com::sun::star::ucb::XContentCreator { enum ContentState { TRANSIENT, // created via createNewContent, - // but did not process "insert" yet + // but did not process "insert" yet PERSISTENT, // processed "insert" DEAD // processed "delete" / document was closed }; @@ -137,8 +140,6 @@ private: com::sun::star::ucb::XCommandEnvironment > & xEnv ); virtual ::rtl::OUString getParentURL(); - bool isContentCreator(); - static bool hasData( ContentProvider* pProvider, const Uri & rUri ); bool hasData( const Uri & rUri ) { return hasData( m_pProvider, rUri ); } @@ -173,7 +174,7 @@ private: ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > getPropertyValues( const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::Property >& rProperties ); + ::com::sun::star::beans::Property >& rProperties ); ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > setPropertyValues( const ::com::sun::star::uno::Sequence< @@ -294,7 +295,7 @@ public: execute( const com::sun::star::ucb::Command& aCommand, sal_Int32 CommandId, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment ) + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( com::sun::star::uno::Exception, com::sun::star::ucb::CommandAbortedException, com::sun::star::uno::RuntimeException ); diff --git a/ucb/source/ucp/tdoc/tdoc_contentcaps.cxx b/ucb/source/ucp/tdoc/tdoc_contentcaps.cxx index b9a1410b55..acb85c2d28 100644 --- a/ucb/source/ucp/tdoc/tdoc_contentcaps.cxx +++ b/ucb/source/ucp/tdoc/tdoc_contentcaps.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_contentcaps.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -46,6 +43,7 @@ IsDocument r r r r r r IsFolder r r r r r r Title r r w w w w + CreatableContentsInfo r r r r r r Storage - - r r - - DocumentModel - r - - - - @@ -57,6 +55,7 @@ delete - - x - x - open x x x - x - transfer - x x - - - + createNewContent - x x - - - #ifdef NO_STREAM_CREATION_WITHIN_DOCUMENT_ROOT (*) not supported by streams that are direct children of document @@ -88,6 +87,12 @@ using namespace tdoc_ucp; // //========================================================================= +#define MAKEPROPSEQUENCE( a ) \ + uno::Sequence< beans::Property >( a, sizeof( a ) / sizeof( a[ 0 ] ) ) + +#define MAKECMDSEQUENCE( a ) \ + uno::Sequence< ucb::CommandInfo >( a, sizeof( a ) / sizeof( a[ 0 ] ) ) + //========================================================================= // // IMPORTENT: If any property data ( name / type / ... ) are changed, then @@ -142,15 +147,24 @@ uno::Sequence< beans::Property > Content::getProperties( -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND - ) + ), /////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ) /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// }; - return uno::Sequence< beans::Property >( aStreamPropertyInfoTable, 4 ); + return MAKEPROPSEQUENCE( aStreamPropertyInfoTable ); } else if ( m_aProps.getType() == FOLDER ) { @@ -197,6 +211,15 @@ uno::Sequence< beans::Property > Content::getProperties( /////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ), /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// @@ -209,7 +232,7 @@ uno::Sequence< beans::Property > Content::getProperties( | beans::PropertyAttribute::READONLY ) }; - return uno::Sequence< beans::Property >( aFolderPropertyInfoTable, 5 ); + return MAKEPROPSEQUENCE( aFolderPropertyInfoTable ); } else if ( m_aProps.getType() == DOCUMENT ) { @@ -257,6 +280,15 @@ uno::Sequence< beans::Property > Content::getProperties( /////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ), /////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////// @@ -269,7 +301,7 @@ uno::Sequence< beans::Property > Content::getProperties( | beans::PropertyAttribute::READONLY ) }; - return uno::Sequence< beans::Property >( aDocPropertyInfoTable, 5 ); + return MAKEPROPSEQUENCE( aDocPropertyInfoTable ); } else { @@ -313,15 +345,24 @@ uno::Sequence< beans::Property > Content::getProperties( getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY - ) + ), /////////////////////////////////////////////////////////////// // Optional standard properties /////////////////////////////////////////////////////////////// + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY + ) /////////////////////////////////////////////////////////////// // New properties /////////////////////////////////////////////////////////////// }; - return uno::Sequence< beans::Property >( aRootPropertyInfoTable, 4 ); + return MAKEPROPSEQUENCE( aRootPropertyInfoTable ); } } @@ -396,8 +437,7 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aStreamCommandInfoTable1, 6 ); + return MAKECMDSEQUENCE( aStreamCommandInfoTable1 ); } #endif //================================================================= @@ -461,8 +501,7 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aStreamCommandInfoTable, 7 ); + return MAKECMDSEQUENCE( aStreamCommandInfoTable ); } else if ( m_aProps.getType() == FOLDER ) { @@ -527,13 +566,18 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), -1, getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) + ), + ucb::CommandInfo( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) ) /////////////////////////////////////////////////////////// // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aFolderCommandInfoTable, 8 ); + return MAKECMDSEQUENCE( aFolderCommandInfoTable ); } else if ( m_aProps.getType() == DOCUMENT ) { @@ -588,13 +632,18 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), -1, getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) + ), + ucb::CommandInfo( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ), + -1, + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) ) /////////////////////////////////////////////////////////// // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aDocCommandInfoTable, 6 ); + return MAKECMDSEQUENCE( aDocCommandInfoTable ); } else { @@ -651,7 +700,6 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( // New commands /////////////////////////////////////////////////////////// }; - return uno::Sequence< - ucb::CommandInfo >( aRootCommandInfoTable, 5 ); + return MAKECMDSEQUENCE( aRootCommandInfoTable ); } } diff --git a/ucb/source/ucp/tdoc/tdoc_datasupplier.cxx b/ucb/source/ucp/tdoc/tdoc_datasupplier.cxx index 4ea50aba52..62bdf66b28 100644 --- a/ucb/source/ucp/tdoc/tdoc_datasupplier.cxx +++ b/ucb/source/ucp/tdoc/tdoc_datasupplier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_datasupplier.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_datasupplier.hxx b/ucb/source/ucp/tdoc/tdoc_datasupplier.hxx index 4e88e63d65..d555f4f739 100644 --- a/ucb/source/ucp/tdoc/tdoc_datasupplier.hxx +++ b/ucb/source/ucp/tdoc/tdoc_datasupplier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_datasupplier.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_docmgr.cxx b/ucb/source/ucp/tdoc/tdoc_docmgr.cxx index 0d1b236397..8361e4bbbc 100644 --- a/ucb/source/ucp/tdoc/tdoc_docmgr.cxx +++ b/ucb/source/ucp/tdoc/tdoc_docmgr.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_docmgr.cxx,v $ - * $Revision: 1.19.24.2 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_docmgr.hxx b/ucb/source/ucp/tdoc/tdoc_docmgr.hxx index ddf990fb4c..c9d68e5f7f 100644 --- a/ucb/source/ucp/tdoc/tdoc_docmgr.hxx +++ b/ucb/source/ucp/tdoc/tdoc_docmgr.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_docmgr.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.cxx b/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.cxx index 7ce9b01f95..02df472ff2 100644 --- a/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.cxx +++ b/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_documentcontentfactory.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.hxx b/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.hxx index 4960777adb..bde79fc1cb 100644 --- a/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.hxx +++ b/ucb/source/ucp/tdoc/tdoc_documentcontentfactory.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_documentcontentfactory.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_passwordrequest.cxx b/ucb/source/ucp/tdoc/tdoc_passwordrequest.cxx index d0c438543c..53c4ce84bb 100644 --- a/ucb/source/ucp/tdoc/tdoc_passwordrequest.cxx +++ b/ucb/source/ucp/tdoc/tdoc_passwordrequest.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_passwordrequest.cxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_passwordrequest.hxx b/ucb/source/ucp/tdoc/tdoc_passwordrequest.hxx index cad379ed63..50381c8873 100644 --- a/ucb/source/ucp/tdoc/tdoc_passwordrequest.hxx +++ b/ucb/source/ucp/tdoc/tdoc_passwordrequest.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_passwordrequest.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_provider.cxx b/ucb/source/ucp/tdoc/tdoc_provider.cxx index 684e4bb609..7bb8af30b2 100644 --- a/ucb/source/ucp/tdoc/tdoc_provider.cxx +++ b/ucb/source/ucp/tdoc/tdoc_provider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_provider.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_provider.hxx b/ucb/source/ucp/tdoc/tdoc_provider.hxx index 3ad5d147cd..ca2ab4e5e7 100644 --- a/ucb/source/ucp/tdoc/tdoc_provider.hxx +++ b/ucb/source/ucp/tdoc/tdoc_provider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_provider.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_resultset.cxx b/ucb/source/ucp/tdoc/tdoc_resultset.cxx index 915d7e416a..7beab3f46f 100644 --- a/ucb/source/ucp/tdoc/tdoc_resultset.cxx +++ b/ucb/source/ucp/tdoc/tdoc_resultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_resultset.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_resultset.hxx b/ucb/source/ucp/tdoc/tdoc_resultset.hxx index bd0c064804..1a13b82443 100644 --- a/ucb/source/ucp/tdoc/tdoc_resultset.hxx +++ b/ucb/source/ucp/tdoc/tdoc_resultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_resultset.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_services.cxx b/ucb/source/ucp/tdoc/tdoc_services.cxx index 4b507f7a2f..26b1d8a2de 100644 --- a/ucb/source/ucp/tdoc/tdoc_services.cxx +++ b/ucb/source/ucp/tdoc/tdoc_services.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_services.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_stgelems.cxx b/ucb/source/ucp/tdoc/tdoc_stgelems.cxx index 6e0e327174..49065d4ae1 100644 --- a/ucb/source/ucp/tdoc/tdoc_stgelems.cxx +++ b/ucb/source/ucp/tdoc/tdoc_stgelems.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_stgelems.cxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_stgelems.hxx b/ucb/source/ucp/tdoc/tdoc_stgelems.hxx index 76917a15f3..424af316ae 100644 --- a/ucb/source/ucp/tdoc/tdoc_stgelems.hxx +++ b/ucb/source/ucp/tdoc/tdoc_stgelems.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_stgelems.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_storage.cxx b/ucb/source/ucp/tdoc/tdoc_storage.cxx index 0ce268bb15..7927108aad 100644 --- a/ucb/source/ucp/tdoc/tdoc_storage.cxx +++ b/ucb/source/ucp/tdoc/tdoc_storage.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_storage.cxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_storage.hxx b/ucb/source/ucp/tdoc/tdoc_storage.hxx index 0c858d5bd4..f570a8a3ab 100644 --- a/ucb/source/ucp/tdoc/tdoc_storage.hxx +++ b/ucb/source/ucp/tdoc/tdoc_storage.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_storage.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_uri.cxx b/ucb/source/ucp/tdoc/tdoc_uri.cxx index 2eef39f6e0..5c52a39248 100644 --- a/ucb/source/ucp/tdoc/tdoc_uri.cxx +++ b/ucb/source/ucp/tdoc/tdoc_uri.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_uri.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/tdoc/tdoc_uri.hxx b/ucb/source/ucp/tdoc/tdoc_uri.hxx index b4e75d327a..91427bddde 100644 --- a/ucb/source/ucp/tdoc/tdoc_uri.hxx +++ b/ucb/source/ucp/tdoc/tdoc_uri.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: tdoc_uri.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/ContentProperties.cxx b/ucb/source/ucp/webdav/ContentProperties.cxx index 4cc975070d..4bb54dea94 100644 --- a/ucb/source/ucp/webdav/ContentProperties.cxx +++ b/ucb/source/ucp/webdav/ContentProperties.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ContentProperties.cxx,v $ - * $Revision: 1.12.18.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/ContentProperties.hxx b/ucb/source/ucp/webdav/ContentProperties.hxx index 4fb9af57f2..5a21dba08a 100644 --- a/ucb/source/ucp/webdav/ContentProperties.hxx +++ b/ucb/source/ucp/webdav/ContentProperties.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: ContentProperties.hxx,v $ - * $Revision: 1.12.34.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVAuthListener.hxx b/ucb/source/ucp/webdav/DAVAuthListener.hxx index 6a4a84db81..fb5f0d0449 100644 --- a/ucb/source/ucp/webdav/DAVAuthListener.hxx +++ b/ucb/source/ucp/webdav/DAVAuthListener.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVAuthListener.hxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVAuthListenerImpl.hxx b/ucb/source/ucp/webdav/DAVAuthListenerImpl.hxx index 2192e1fcca..3ee5bf152c 100644 --- a/ucb/source/ucp/webdav/DAVAuthListenerImpl.hxx +++ b/ucb/source/ucp/webdav/DAVAuthListenerImpl.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVAuthListenerImpl.hxx,v $ - * $Revision: 1.4 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVException.hxx b/ucb/source/ucp/webdav/DAVException.hxx index 4e281543c8..54ad20f440 100644 --- a/ucb/source/ucp/webdav/DAVException.hxx +++ b/ucb/source/ucp/webdav/DAVException.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVException.hxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -108,20 +105,40 @@ class DAVException { public: enum ExceptionCode { - DAV_HTTP_ERROR = 0, // Generic error, mData = error message - DAV_HTTP_LOOKUP, // Name lookup failed, mData = server[:port] - DAV_HTTP_AUTH, // User authentication failed on server - DAV_HTTP_AUTHPROXY, // User authentication failed on proxy - DAV_HTTP_CONNECT, // Could not connect to server, mData = server[:port] + DAV_HTTP_ERROR = 0, // Generic error, + // mData = server error message, + // mStatusCode = HTTP status code + DAV_HTTP_LOOKUP, // Name lookup failed, + // mData = server[:port] + DAV_HTTP_AUTH, // User authentication failed on server, + // mData = server[:port] + DAV_HTTP_AUTHPROXY, // User authentication failed on proxy, + // mData = proxy server[:port] + DAV_HTTP_CONNECT, // Could not connect to server, + // mData = server[:port] DAV_HTTP_TIMEOUT, // Connection timed out + // mData = server[:port] DAV_HTTP_FAILED, // The precondition failed + // mData = server[:port] DAV_HTTP_RETRY, // Retry request - DAV_HTTP_REDIRECT, // See http_redirect.h, mData = new URL - DAV_SESSION_CREATE, // session creation error, mData = server[:port] - DAV_INVALID_ARG }; // mData = file URL + // mData = server[:port] + DAV_HTTP_REDIRECT, // Request was redirected, + // mData = new URL + DAV_SESSION_CREATE, // session creation error, + // mData = server[:port] + DAV_INVALID_ARG, // invalid argument + + DAV_LOCK_EXPIRED, // DAV lock expired + + DAV_NOT_LOCKED, // not locked + + DAV_LOCKED_SELF, // locked by this OOo session + + DAV_LOCKED // locked by third party + }; private: - ExceptionCode mExceptionCode; + ExceptionCode mExceptionCode; rtl::OUString mData; sal_uInt16 mStatusCode; diff --git a/ucb/source/ucp/webdav/DAVProperties.cxx b/ucb/source/ucp/webdav/DAVProperties.cxx index e3a1edd700..1b950984b4 100644 --- a/ucb/source/ucp/webdav/DAVProperties.cxx +++ b/ucb/source/ucp/webdav/DAVProperties.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVProperties.cxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -137,6 +134,26 @@ void DAVProperties::createUCBPropName( const char * nspace, rtl::OUString aName = rtl::OStringToOUString( name, RTL_TEXTENCODING_UTF8 ); + if ( !aNameSpace.getLength() ) + { + // Some servers send XML without proper namespaces. Assume "DAV:" + // in this case, if name is a well-known dav property name. + // Although this is not 100% correct, it solves many problems. + + if ( DAVProperties::RESOURCETYPE.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::SUPPORTEDLOCK.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::LOCKDISCOVERY.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::CREATIONDATE.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::DISPLAYNAME.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::GETCONTENTLANGUAGE.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::GETCONTENTLENGTH.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::GETCONTENTTYPE.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::GETETAG.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::GETLASTMODIFIED.matchIgnoreAsciiCase( aName, 4 ) || + DAVProperties::SOURCE.matchIgnoreAsciiCase( aName, 4 ) ) + aNameSpace = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DAV:" ) ); + } + // Note: Concatenating strings BEFORE comparing against known namespaces // is important. See RFC 2815 ( 23.4.2 Meaning of Qualified Names ). rFullName = aNameSpace; @@ -175,6 +192,8 @@ void DAVProperties::createUCBPropName( const char * nspace, // static bool DAVProperties::isUCBDeadProperty( const NeonPropName & rName ) { - return ( rtl_str_compareIgnoreAsciiCase( - rName.nspace, "http://ucb.openoffice.org/dav/props/" ) == 0 ); + return ( rName.nspace && + ( rtl_str_compareIgnoreAsciiCase( + rName.nspace, "http://ucb.openoffice.org/dav/props/" ) + == 0 ) ); } diff --git a/ucb/source/ucp/webdav/DAVProperties.hxx b/ucb/source/ucp/webdav/DAVProperties.hxx index cd87f8238e..8567946177 100644 --- a/ucb/source/ucp/webdav/DAVProperties.hxx +++ b/ucb/source/ucp/webdav/DAVProperties.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVProperties.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx b/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx index d8cbe527c6..c1a3ffb295 100644 --- a/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx +++ b/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVRequestEnvironment.hxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVResource.hxx b/ucb/source/ucp/webdav/DAVResource.hxx index 8dc62f4171..a133f0ba56 100644 --- a/ucb/source/ucp/webdav/DAVResource.hxx +++ b/ucb/source/ucp/webdav/DAVResource.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVResource.hxx,v $ - * $Revision: 1.9 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVResourceAccess.cxx b/ucb/source/ucp/webdav/DAVResourceAccess.cxx index f26caaedc2..076d92d214 100644 --- a/ucb/source/ucp/webdav/DAVResourceAccess.cxx +++ b/ucb/source/ucp/webdav/DAVResourceAccess.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVResourceAccess.cxx,v $ - * $Revision: 1.29.16.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -67,6 +64,7 @@ int DAVAuthListener_Impl::authenticate( { uno::Reference< task::XInteractionHandler > xIH = m_xEnv->getInteractionHandler(); + if ( xIH.is() ) { // #102871# - Supply username and password from previous try. @@ -78,19 +76,15 @@ int DAVAuthListener_Impl::authenticate( outPassWord = m_aPrevPassword; rtl::Reference< ucbhelper::SimpleAuthenticationRequest > xRequest - = new ucbhelper::SimpleAuthenticationRequest( m_aURL, - inHostName, - inRealm, - inoutUserName, - outPassWord, - ::rtl::OUString(), - bAllowPersistentStoring, - bCanUseSystemCredentials ); + = new ucbhelper::SimpleAuthenticationRequest( + m_aURL, inHostName, inRealm, inoutUserName, + outPassWord, ::rtl::OUString(), + bAllowPersistentStoring, bCanUseSystemCredentials ); xIH->handle( xRequest.get() ); rtl::Reference< ucbhelper::InteractionContinuation > xSelection = xRequest->getSelection(); - + if ( xSelection.is() ) { // Handler handled the request. @@ -105,8 +99,9 @@ int DAVAuthListener_Impl::authenticate( sal_Bool bUseSystemCredentials = sal_False; if ( bCanUseSystemCredentials ) - bUseSystemCredentials = xSupp->getUseSystemCredentials(); - + bUseSystemCredentials + = xSupp->getUseSystemCredentials(); + if ( bUseSystemCredentials ) { // This is the (strange) way to tell neon to use @@ -117,7 +112,7 @@ int DAVAuthListener_Impl::authenticate( else { inoutUserName = xSupp->getUserName(); - outPassWord = xSupp->getPassword(); + outPassWord = xSupp->getPassword(); } // #102871# - Remember username and password. @@ -178,8 +173,9 @@ DAVResourceAccess & DAVResourceAccess::operator=( return *this; } +#if 0 // currently not used, but please don't remove code //========================================================================= -void DAVResourceAccess::OPTIONS( +void DAVResourceAccess::OPTIONS( DAVCapabilities & rCapabilities, const uno::Reference< ucb::XCommandEnvironment > & xEnv ) throw( DAVException ) @@ -194,10 +190,10 @@ void DAVResourceAccess::OPTIONS( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( - "OPTIONS" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( + "OPTIONS" ), aHeaders ); m_xSession->OPTIONS( getRequestURI(), @@ -217,9 +213,10 @@ void DAVResourceAccess::OPTIONS( } while ( bRetry ); } +#endif //========================================================================= -void DAVResourceAccess::PROPFIND( +void DAVResourceAccess::PROPFIND( const Depth nDepth, const std::vector< rtl::OUString > & rPropertyNames, std::vector< DAVResource > & rResources, @@ -237,10 +234,10 @@ void DAVResourceAccess::PROPFIND( { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( - "PROPFIND" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( + "PROPFIND" ), aHeaders ); m_xSession->PROPFIND( getRequestURI(), @@ -264,7 +261,7 @@ void DAVResourceAccess::PROPFIND( } //========================================================================= -void DAVResourceAccess::PROPFIND( +void DAVResourceAccess::PROPFIND( const Depth nDepth, std::vector< DAVResourceInfo > & rResInfo, const uno::Reference< ucb::XCommandEnvironment > & xEnv ) @@ -280,12 +277,12 @@ void DAVResourceAccess::PROPFIND( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( - "PROPFIND" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( + "PROPFIND" ), aHeaders ); - + m_xSession->PROPFIND( getRequestURI(), nDepth, rResInfo, @@ -306,7 +303,7 @@ void DAVResourceAccess::PROPFIND( } //========================================================================= -void DAVResourceAccess::PROPPATCH( +void DAVResourceAccess::PROPPATCH( const std::vector< ProppatchValue >& rValues, const uno::Reference< ucb::XCommandEnvironment >& xEnv ) throw( DAVException ) @@ -321,12 +318,12 @@ void DAVResourceAccess::PROPPATCH( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( - "PROPPATCH" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( + "PROPPATCH" ), aHeaders ); - + m_xSession->PROPPATCH( getRequestURI(), rValues, DAVRequestEnvironment( @@ -346,13 +343,14 @@ void DAVResourceAccess::PROPPATCH( } //========================================================================= -void DAVResourceAccess::HEAD( +void DAVResourceAccess::HEAD( const std::vector< rtl::OUString > & rHeaderNames, DAVResource & rResource, const uno::Reference< ucb::XCommandEnvironment >& xEnv ) throw( DAVException ) { initialize(); + int errorCount = 0; bool bRetry; do @@ -361,11 +359,11 @@ void DAVResourceAccess::HEAD( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "HEAD" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "HEAD" ), aHeaders ); - + m_xSession->HEAD( getRequestURI(), rHeaderNames, rResource, @@ -401,15 +399,16 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "GET" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "GET" ), aHeaders ); - + xStream = m_xSession->GET( getRequestURI(), DAVRequestEnvironment( getRequestURI(), - new DAVAuthListener_Impl( xEnv, m_aURL ), + new DAVAuthListener_Impl( + xEnv, m_aURL ), aHeaders, xEnv ) ); } catch ( DAVException & e ) @@ -421,12 +420,12 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET( } } while ( bRetry ); - + return xStream; } //========================================================================= -void DAVResourceAccess::GET( +void DAVResourceAccess::GET( uno::Reference< io::XOutputStream > & rStream, const uno::Reference< ucb::XCommandEnvironment > & xEnv ) throw( DAVException ) @@ -441,11 +440,11 @@ void DAVResourceAccess::GET( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "GET" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "GET" ), aHeaders ); - + m_xSession->GET( getRequestURI(), rStream, DAVRequestEnvironment( @@ -482,17 +481,18 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "GET" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "GET" ), aHeaders ); - + xStream = m_xSession->GET( getRequestURI(), rHeaderNames, rResource, DAVRequestEnvironment( getRequestURI(), - new DAVAuthListener_Impl( xEnv, m_aURL ), + new DAVAuthListener_Impl( + xEnv, m_aURL ), aHeaders, xEnv ) ); } catch ( DAVException & e ) @@ -526,11 +526,11 @@ void DAVResourceAccess::GET( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "GET" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "GET" ), aHeaders ); - + m_xSession->GET( getRequestURI(), rStream, rHeaderNames, @@ -552,13 +552,15 @@ void DAVResourceAccess::GET( } //========================================================================= -void DAVResourceAccess::ABORT() +void DAVResourceAccess::abort() throw( DAVException ) { - // 17.11.09 (tkr): abort currently disabled caused by issue i106766 - // initialize(); - // m_xSession->ABORT(); + // 17.11.09 (tkr): abort currently disabled caused by issue i106766 + // initialize(); + // m_xSession->abort(); + OSL_TRACE( "Not implemented. -> #i106766#" ); } + //========================================================================= namespace { @@ -567,9 +569,9 @@ namespace { { try { - uno::Reference< io::XSeekable > xSeekable( + uno::Reference< io::XSeekable > xSeekable( rStream, uno::UNO_QUERY ); - if ( xSeekable.is() ) + if ( xSeekable.is() ) { xSeekable->seek( 0 ); return; @@ -588,7 +590,7 @@ namespace { } // namespace //========================================================================= -void DAVResourceAccess::PUT( +void DAVResourceAccess::PUT( const uno::Reference< io::XInputStream > & rStream, const uno::Reference< ucb::XCommandEnvironment > & xEnv ) throw( DAVException ) @@ -597,7 +599,7 @@ void DAVResourceAccess::PUT( // Make stream seekable, if it not. Needed, if request must be retried. uno::Reference< io::XInputStream > xSeekableStream - = comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( + = comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( rStream, m_xSMgr ); int errorCount = 0; @@ -611,11 +613,11 @@ void DAVResourceAccess::PUT( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "PUT" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "PUT" ), aHeaders ); - + m_xSession->PUT( getRequestURI(), xSeekableStream, DAVRequestEnvironment( @@ -646,7 +648,7 @@ uno::Reference< io::XInputStream > DAVResourceAccess::POST( // Make stream seekable, if it not. Needed, if request must be retried. uno::Reference< io::XInputStream > xSeekableStream - = comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( + = comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( rInputStream, m_xSMgr ); uno::Reference< io::XInputStream > xStream; @@ -663,18 +665,19 @@ uno::Reference< io::XInputStream > DAVResourceAccess::POST( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "POST" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "POST" ), aHeaders ); - + xStream = m_xSession->POST( getRequestURI(), rContentType, rReferer, xSeekableStream, DAVRequestEnvironment( getRequestURI(), - new DAVAuthListener_Impl( xEnv, m_aURL ), + new DAVAuthListener_Impl( + xEnv, m_aURL ), aHeaders, xEnv ) ); } catch ( DAVException & e ) @@ -692,12 +695,11 @@ uno::Reference< io::XInputStream > DAVResourceAccess::POST( } } while ( bRetry ); - + return xStream; } //========================================================================= - void DAVResourceAccess::POST( const rtl::OUString & rContentType, const rtl::OUString & rReferer, @@ -710,7 +712,7 @@ void DAVResourceAccess::POST( // Make stream seekable, if it not. Needed, if request must be retried. uno::Reference< io::XInputStream > xSeekableStream - = comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( + = comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( rInputStream, m_xSMgr ); int errorCount = 0; @@ -726,11 +728,11 @@ void DAVResourceAccess::POST( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "POST" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "POST" ), aHeaders ); - + m_xSession->POST( getRequestURI(), rContentType, rReferer, @@ -760,11 +762,12 @@ void DAVResourceAccess::POST( } //========================================================================= -void DAVResourceAccess::MKCOL( +void DAVResourceAccess::MKCOL( const uno::Reference< ucb::XCommandEnvironment > & xEnv ) throw( DAVException ) { initialize(); + int errorCount = 0; bool bRetry; do @@ -773,11 +776,11 @@ void DAVResourceAccess::MKCOL( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "MKCOL" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "MKCOL" ), aHeaders ); - + m_xSession->MKCOL( getRequestURI(), DAVRequestEnvironment( getRequestURI(), @@ -796,7 +799,7 @@ void DAVResourceAccess::MKCOL( } //========================================================================= -void DAVResourceAccess::COPY( +void DAVResourceAccess::COPY( const ::rtl::OUString & rSourcePath, const ::rtl::OUString & rDestinationURI, sal_Bool bOverwrite, @@ -804,6 +807,7 @@ void DAVResourceAccess::COPY( throw( DAVException ) { initialize(); + int errorCount = 0; bool bRetry; do @@ -812,11 +816,11 @@ void DAVResourceAccess::COPY( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "COPY" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "COPY" ), aHeaders ); - + m_xSession->COPY( rSourcePath, rDestinationURI, DAVRequestEnvironment( @@ -837,7 +841,7 @@ void DAVResourceAccess::COPY( } //========================================================================= -void DAVResourceAccess::MOVE( +void DAVResourceAccess::MOVE( const ::rtl::OUString & rSourcePath, const ::rtl::OUString & rDestinationURI, sal_Bool bOverwrite, @@ -845,6 +849,7 @@ void DAVResourceAccess::MOVE( throw( DAVException ) { initialize(); + int errorCount = 0; bool bRetry; do @@ -853,9 +858,9 @@ void DAVResourceAccess::MOVE( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( "MOVE" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "MOVE" ), aHeaders ); m_xSession->MOVE( rSourcePath, @@ -878,7 +883,7 @@ void DAVResourceAccess::MOVE( } //========================================================================= -void DAVResourceAccess::DESTROY( +void DAVResourceAccess::DESTROY( const uno::Reference< ucb::XCommandEnvironment > & xEnv ) throw( DAVException ) { @@ -892,12 +897,12 @@ void DAVResourceAccess::DESTROY( try { DAVRequestHeaders aHeaders; - getUserRequestHeaders( xEnv, - getRequestURI(), - rtl::OUString::createFromAscii( - "DESTROY" ), + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( + "DESTROY" ), aHeaders ); - + m_xSession->DESTROY( getRequestURI(), DAVRequestEnvironment( getRequestURI(), @@ -916,23 +921,124 @@ void DAVResourceAccess::DESTROY( } //========================================================================= -void DAVResourceAccess::LOCK ( - const ucb::Lock & /*rLock*/, - const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ ) - throw( DAVException ) +// set new lock. +void DAVResourceAccess::LOCK( + ucb::Lock & inLock, + const uno::Reference< ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ) +{ + initialize(); + + int errorCount = 0; + bool bRetry; + do + { + bRetry = false; + try + { + DAVRequestHeaders aHeaders; + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "LOCK" ), + aHeaders ); + + m_xSession->LOCK( getRequestURI(), + inLock, + DAVRequestEnvironment( + getRequestURI(), + new DAVAuthListener_Impl( xEnv, m_aURL ), + aHeaders, xEnv ) ); + } + catch ( DAVException & e ) + { + errorCount++; + bRetry = handleException( e, errorCount ); + if ( !bRetry ) + throw; + } + } + while ( bRetry ); +} + +//========================================================================= +// refresh existing lock. +sal_Int64 DAVResourceAccess::LOCK( + sal_Int64 nTimeout, + const uno::Reference< ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ) { -// initialize(); - OSL_ENSURE( sal_False, "DAVResourceAccess::LOCK - NYI" ); + initialize(); + + sal_Int64 nNewTimeout = 0; + int errorCount = 0; + bool bRetry; + do + { + bRetry = false; + try + { + DAVRequestHeaders aHeaders; + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "LOCK" ), + aHeaders ); + + nNewTimeout = m_xSession->LOCK( getRequestURI(), + nTimeout, + DAVRequestEnvironment( + getRequestURI(), + new DAVAuthListener_Impl( + xEnv, m_aURL ), + aHeaders, xEnv ) ); + } + catch ( DAVException & e ) + { + errorCount++; + bRetry = handleException( e, errorCount ); + if ( !bRetry ) + throw; + } + } + while ( bRetry ); + + return nNewTimeout; } //========================================================================= -void DAVResourceAccess::UNLOCK ( - const ucb::Lock & /*rLock*/, - const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ ) - throw( DAVException ) +void DAVResourceAccess::UNLOCK( + const uno::Reference< ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ) { -// initialize(); - OSL_ENSURE( sal_False, "DAVResourceAccess::UNLOCK - NYI" ); + initialize(); + + int errorCount = 0; + bool bRetry; + do + { + bRetry = false; + try + { + DAVRequestHeaders aHeaders; + getUserRequestHeaders( xEnv, + getRequestURI(), + rtl::OUString::createFromAscii( "UNLOCK" ), + aHeaders ); + + m_xSession->UNLOCK( getRequestURI(), + DAVRequestEnvironment( + getRequestURI(), + new DAVAuthListener_Impl( xEnv, m_aURL ), + aHeaders, xEnv ) ); + } + catch ( DAVException & e ) + { + errorCount++; + bRetry = handleException( e, errorCount ); + if ( !bRetry ) + throw; + } + } + while ( bRetry ); } //========================================================================= @@ -1009,9 +1115,9 @@ void DAVResourceAccess::getUserRequestHeaders( { if ( xEnv.is() ) { - uno::Reference< ucb::XWebDAVCommandEnvironment > xDAVEnv( + uno::Reference< ucb::XWebDAVCommandEnvironment > xDAVEnv( xEnv, uno::UNO_QUERY ); - + if ( xDAVEnv.is() ) { uno::Sequence< beans::NamedValue > aRequestHeaders @@ -1021,17 +1127,16 @@ void DAVResourceAccess::getUserRequestHeaders( { rtl::OUString aValue; sal_Bool isString = aRequestHeaders[ n ].Value >>= aValue; - + if ( !isString ) { OSL_ENSURE( isString, "DAVResourceAccess::getUserRequestHeaders :" "Value is not a string! Ignoring..." ); } - - rRequestHeaders.push_back( DAVRequestHeader( - aRequestHeaders[ n ].Name, - aValue ) ); + + rRequestHeaders.push_back( + DAVRequestHeader( aRequestHeaders[ n ].Name, aValue ) ); } } } @@ -1048,12 +1153,12 @@ sal_Bool DAVResourceAccess::detectRedirectCycle( std::vector< NeonUri >::const_iterator it = m_aRedirectURIs.begin(); std::vector< NeonUri >::const_iterator end = m_aRedirectURIs.end(); - + while ( it != end ) { if ( aUri == (*it) ) return sal_True; - + it++; } @@ -1075,7 +1180,6 @@ void DAVResourceAccess::resetUri() } } - //========================================================================= sal_Bool DAVResourceAccess::handleException( DAVException & e, int errorCount ) throw ( DAVException ) @@ -1095,10 +1199,12 @@ sal_Bool DAVResourceAccess::handleException( DAVException & e, int errorCount ) // if we have a bad connection try again. Up to three times. case DAVException::DAV_HTTP_ERROR: // retry up to three times, if not a client-side error. - if ( ( e.getStatus() < 400 || e.getStatus() > 499 ) && errorCount < 3) + if ( e.getStatus() > 0 && + ( e.getStatus() < 400 || e.getStatus() > 499 ) && + errorCount < 3 ) { return sal_True; - } + } return sal_False; // <-- // --> tkr: if connection has said retry then retry! diff --git a/ucb/source/ucp/webdav/DAVResourceAccess.hxx b/ucb/source/ucp/webdav/DAVResourceAccess.hxx index 0d40b57bfb..31b9bbbfd8 100644 --- a/ucb/source/ucp/webdav/DAVResourceAccess.hxx +++ b/ucb/source/ucp/webdav/DAVResourceAccess.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVResourceAccess.hxx,v $ - * $Revision: 1.19 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -59,22 +56,22 @@ class DAVResourceAccess rtl::Reference< DAVSession > m_xSession; rtl::Reference< DAVSessionFactory > m_xSessionFactory; com::sun::star::uno::Reference< - com::sun::star::lang::XMultiServiceFactory > m_xSMgr; + com::sun::star::lang::XMultiServiceFactory > m_xSMgr; std::vector< NeonUri > m_aRedirectURIs; public: DAVResourceAccess() : m_xSessionFactory( 0 ) {} DAVResourceAccess( const com::sun::star::uno::Reference< - com::sun::star::lang::XMultiServiceFactory > & rSMgr, + com::sun::star::lang::XMultiServiceFactory > & rSMgr, rtl::Reference< - DAVSessionFactory > const & rSessionFactory, + DAVSessionFactory > const & rSessionFactory, const rtl::OUString & rURL ); DAVResourceAccess( const DAVResourceAccess & rOther ); DAVResourceAccess & operator=( const DAVResourceAccess & rOther ); void setURL( const rtl::OUString & rNewURL ) - throw( DAVException ); + throw ( DAVException ); void resetUri(); @@ -86,146 +83,156 @@ public: // DAV methods // +#if 0 // currently not used, but please don't remove code void OPTIONS( DAVCapabilities & rCapabilities, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); +#endif // allprop & named void PROPFIND( const Depth nDepth, - const std::vector< rtl::OUString > & rPropertyNames, - std::vector< DAVResource > & rResources, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + const std::vector< rtl::OUString > & rPropertyNames, + std::vector< DAVResource > & rResources, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); // propnames void PROPFIND( const Depth nDepth, - std::vector< DAVResourceInfo > & rResInfo, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + std::vector< DAVResourceInfo > & rResInfo, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void PROPPATCH( const std::vector< ProppatchValue > & rValues, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& xEnv ) - throw( DAVException ); + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& xEnv ) + throw ( DAVException ); void HEAD( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' DAVResource & rResource, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment >& xEnv ) + throw ( DAVException ); com::sun::star::uno::Reference< com::sun::star::io::XInputStream > GET( const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void GET( com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & rStream, + com::sun::star::io::XOutputStream > & rStream, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); com::sun::star::uno::Reference< com::sun::star::io::XInputStream > GET( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' DAVResource & rResource, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void GET( com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & rStream, + com::sun::star::io::XOutputStream > & rStream, const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' DAVResource & rResource, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void PUT( const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & rStream, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::io::XInputStream > & rStream, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); com::sun::star::uno::Reference< com::sun::star::io::XInputStream > POST( const rtl::OUString & rContentType, - const rtl::OUString & rReferer, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & rInputStream, - const com::sun::star::uno::Reference< + const rtl::OUString & rReferer, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & rInputStream, + const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw ( DAVException ); void POST( const rtl::OUString & rContentType, - const rtl::OUString & rReferer, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & rInputStream, - com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & rOutputStream, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& xEnv ) + const rtl::OUString & rReferer, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & rInputStream, + com::sun::star::uno::Reference< + com::sun::star::io::XOutputStream > & rOutputStream, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw ( DAVException ); void MKCOL( const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void COPY( const ::rtl::OUString & rSourcePath, - const ::rtl::OUString & rDestinationURI, - sal_Bool bOverwrite, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + const ::rtl::OUString & rDestinationURI, + sal_Bool bOverwrite, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void MOVE( const ::rtl::OUString & rSourcePath, - const ::rtl::OUString & rDestinationURI, - sal_Bool bOverwrite, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + const ::rtl::OUString & rDestinationURI, + sal_Bool bOverwrite, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void DESTROY( const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); + // set new lock. void - LOCK( const com::sun::star::ucb::Lock & rLock, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + LOCK( com::sun::star::ucb::Lock & inLock, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw( DAVException ); + + // refresh existing lock. + sal_Int64 + LOCK( sal_Int64 nTimeout, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void - UNLOCK( const com::sun::star::ucb::Lock & rLock, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) - throw( DAVException ); + UNLOCK( const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv ) + throw ( DAVException ); void - ABORT() - throw( DAVException ); + abort() + throw ( DAVException ); // helper - static void getUserRequestHeaders( - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv, - const rtl::OUString & rURI, - const rtl::OUString & rMethod, - DAVRequestHeaders & rRequestHeaders ); + static void + getUserRequestHeaders( + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment > & xEnv, + const rtl::OUString & rURI, + const rtl::OUString & rMethod, + DAVRequestHeaders & rRequestHeaders ); private: const rtl::OUString & getRequestURI() const; diff --git a/ucb/source/ucp/webdav/DAVSession.hxx b/ucb/source/ucp/webdav/DAVSession.hxx index 9070b086d6..1206679fc5 100644 --- a/ucb/source/ucp/webdav/DAVSession.hxx +++ b/ucb/source/ucp/webdav/DAVSession.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVSession.hxx,v $ - * $Revision: 1.20 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -42,7 +39,9 @@ #include "DAVTypes.hxx" #include "DAVRequestEnvironment.hxx" - +namespace com { namespace sun { namespace star { namespace ucb { + struct Lock; +} } } } namespace webdav_ucp { @@ -73,28 +72,28 @@ public: // DAV methods // - virtual void OPTIONS( const ::rtl::OUString & inPath, + virtual void OPTIONS( const ::rtl::OUString & inPath, DAVCapabilities & outCapabilities, const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; // allprop & named - virtual void PROPFIND( const ::rtl::OUString & inPath, - const Depth inDepth, + virtual void PROPFIND( const ::rtl::OUString & inPath, + const Depth inDepth, const std::vector< ::rtl::OUString > & inPropertyNames, - std::vector< DAVResource > & ioResources, + std::vector< DAVResource > & ioResources, const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; // propnames - virtual void PROPFIND( const ::rtl::OUString & inPath, - const Depth inDepth, + virtual void PROPFIND( const ::rtl::OUString & inPath, + const Depth inDepth, std::vector< DAVResourceInfo > & ioResInfo, const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; - virtual void PROPPATCH( const ::rtl::OUString & inPath, - const std::vector< ProppatchValue > & inValues, + virtual void PROPPATCH( const ::rtl::OUString & inPath, + const std::vector< ProppatchValue > & inValues, const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; @@ -105,87 +104,95 @@ public: throw( DAVException ) = 0; virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > - GET( const ::rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) + GET( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; - virtual void GET( const ::rtl::OUString & inPath, - com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& o, - const DAVRequestEnvironment & rEnv ) + virtual void GET( const ::rtl::OUString & inPath, + com::sun::star::uno::Reference< + com::sun::star::io::XOutputStream >& o, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > - GET( const ::rtl::OUString & inPath, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, - const DAVRequestEnvironment & rEnv ) + GET( const ::rtl::OUString & inPath, + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; - virtual void GET( const ::rtl::OUString & inPath, - com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& o, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, - const DAVRequestEnvironment & rEnv ) + virtual void + GET( const ::rtl::OUString & inPath, + com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& o, + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; - virtual void PUT( const ::rtl::OUString & inPath, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream >& s, - const DAVRequestEnvironment & rEnv ) - throw( DAVException ) = 0; - - virtual void ABORT() + virtual void PUT( const ::rtl::OUString & inPath, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream >& s, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > - POST( const rtl::OUString & inPath, - const rtl::OUString & rContentType, - const rtl::OUString & rReferer, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & inInputStream, - const DAVRequestEnvironment & rEnv ) + POST( const rtl::OUString & inPath, + const rtl::OUString & rContentType, + const rtl::OUString & rReferer, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & inInputStream, + const DAVRequestEnvironment & rEnv ) throw ( DAVException ) = 0; virtual void POST( const rtl::OUString & inPath, const rtl::OUString & rContentType, const rtl::OUString & rReferer, const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & inInputStream, + com::sun::star::io::XInputStream > & inInputStream, com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & oOutputStream, + com::sun::star::io::XOutputStream > & oOutputStream, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) = 0; - virtual void MKCOL( const ::rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) + virtual void MKCOL( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; - virtual void COPY( const ::rtl::OUString & inSource, - const ::rtl::OUString & inDestination, - const DAVRequestEnvironment & rEnv, - sal_Bool inOverwrite = false ) + virtual void COPY( const ::rtl::OUString & inSource, + const ::rtl::OUString & inDestination, + const DAVRequestEnvironment & rEnv, + sal_Bool inOverwrite = false ) throw( DAVException ) = 0; - virtual void MOVE( const ::rtl::OUString & inSource, - const ::rtl::OUString & inDestination, - const DAVRequestEnvironment & rEnv, - sal_Bool inOverwrite = false ) + virtual void MOVE( const ::rtl::OUString & inSource, + const ::rtl::OUString & inDestination, + const DAVRequestEnvironment & rEnv, + sal_Bool inOverwrite = false ) throw( DAVException ) = 0; - virtual void DESTROY( const ::rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) + virtual void DESTROY( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) throw( DAVException ) = 0; - // Note: Uncomment the following if locking support is required - /* - virtual void LOCK ( const Lock & inLock, - const DAVRequestEnvironment & rEnv ) - throw( DAVException ) = 0; + // set new lock. + virtual void LOCK( const ::rtl::OUString & inPath, + com::sun::star::ucb::Lock & inLock, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ) = 0; - virtual void UNLOCK ( const Lock & inLock, - const DAVRequestEnvironment & rEnv ) + // refresh existing lock. + virtual sal_Int64 LOCK( const ::rtl::OUString & inPath, + sal_Int64 nTimeout, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ) = 0; + + virtual void UNLOCK( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ) = 0; + + virtual void abort() throw( DAVException ) = 0; - */ + protected: rtl::Reference< DAVSessionFactory > m_xFactory; @@ -210,4 +217,3 @@ private: } // namespace webdav_ucp #endif // _DAVSESSION_HXX_ - diff --git a/ucb/source/ucp/webdav/DAVSessionFactory.cxx b/ucb/source/ucp/webdav/DAVSessionFactory.cxx index fba6318638..112fc93ca9 100644 --- a/ucb/source/ucp/webdav/DAVSessionFactory.cxx +++ b/ucb/source/ucp/webdav/DAVSessionFactory.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVSessionFactory.cxx,v $ - * $Revision: 1.14 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVSessionFactory.hxx b/ucb/source/ucp/webdav/DAVSessionFactory.hxx index 0b41f5e5fe..11b2ef29d5 100644 --- a/ucb/source/ucp/webdav/DAVSessionFactory.hxx +++ b/ucb/source/ucp/webdav/DAVSessionFactory.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVSessionFactory.hxx,v $ - * $Revision: 1.13 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DAVTypes.hxx b/ucb/source/ucp/webdav/DAVTypes.hxx index 3d9173f820..4d000057b0 100644 --- a/ucb/source/ucp/webdav/DAVTypes.hxx +++ b/ucb/source/ucp/webdav/DAVTypes.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DAVTypes.hxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DateTimeHelper.cxx b/ucb/source/ucp/webdav/DateTimeHelper.cxx index 4ce2e08c29..ab3da8d22a 100644 --- a/ucb/source/ucp/webdav/DateTimeHelper.cxx +++ b/ucb/source/ucp/webdav/DateTimeHelper.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DateTimeHelper.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/DateTimeHelper.hxx b/ucb/source/ucp/webdav/DateTimeHelper.hxx index eb8999bca0..101bd8191b 100644 --- a/ucb/source/ucp/webdav/DateTimeHelper.hxx +++ b/ucb/source/ucp/webdav/DateTimeHelper.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: DateTimeHelper.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/LinkSequence.cxx b/ucb/source/ucp/webdav/LinkSequence.cxx index f890122dec..1d33216b4d 100644 --- a/ucb/source/ucp/webdav/LinkSequence.cxx +++ b/ucb/source/ucp/webdav/LinkSequence.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: LinkSequence.cxx,v $ - * $Revision: 1.16 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -64,12 +61,11 @@ struct LinkSequenceParseContext extern "C" int LinkSequence_startelement_callback( void *, int parent, - const char *nspace, + const char * /*nspace*/, const char *name, const char ** ) { - if ( ( name != 0 ) && - ( ( nspace == 0 ) || ( strcmp( nspace, "" ) == 0 ) ) ) + if ( name != 0 ) { switch ( parent ) { @@ -192,7 +188,7 @@ bool LinkSequence::createFromXML( const rtl::OString & rInData, rOutData[ nCount - 1 ] = *aCtx.pLink; } - nStart = nEnd + TOKEN_LENGTH + 1; + nStart = nEnd + TOKEN_LENGTH; nEnd = rInData.indexOf( "</link>", nStart ); } @@ -215,11 +211,11 @@ bool LinkSequence::toXML( const uno::Sequence< ucb::Link > & rInData, for ( sal_Int32 n = 0; n < nCount; ++n ) { - rOutData += aPre; - rOutData += rInData[ n ].Source; - rOutData += aMid; - rOutData += rInData[ n ].Destination; - rOutData += aEnd; + rOutData += aPre; + rOutData += rInData[ n ].Source; + rOutData += aMid; + rOutData += rInData[ n ].Destination; + rOutData += aEnd; } return true; } diff --git a/ucb/source/ucp/webdav/LinkSequence.hxx b/ucb/source/ucp/webdav/LinkSequence.hxx index 368becfb06..8a2a13d015 100644 --- a/ucb/source/ucp/webdav/LinkSequence.hxx +++ b/ucb/source/ucp/webdav/LinkSequence.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: LinkSequence.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/LockEntrySequence.cxx b/ucb/source/ucp/webdav/LockEntrySequence.cxx index 6d997bd0a6..8ed838d720 100644 --- a/ucb/source/ucp/webdav/LockEntrySequence.cxx +++ b/ucb/source/ucp/webdav/LockEntrySequence.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: LockEntrySequence.cxx,v $ - * $Revision: 1.16 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -64,12 +61,11 @@ struct LockEntrySequenceParseContext extern "C" int LockEntrySequence_startelement_callback( void *, int parent, - const char *nspace, + const char * /*nspace*/, const char *name, const char ** ) { - if ( ( name != 0 ) && - ( ( nspace == 0 ) || ( strcmp( nspace, "" ) == 0 ) ) ) + if ( name != 0 ) { switch ( parent ) { @@ -83,6 +79,31 @@ extern "C" int LockEntrySequence_startelement_callback( return STATE_LOCKSCOPE; else if ( strcmp( name, "locktype" ) == 0 ) return STATE_LOCKTYPE; + +#define IIS_BUGS_WORKAROUND + +#ifdef IIS_BUGS_WORKAROUND + /* IIS (6) returns XML violating RFC 4918 + for DAV:supportedlock property value. + + <lockentry> + <write></write> + <shared></shared> + </lockentry> + <lockentry> + <write></write> + <exclusive></exclusive> + </lockentry> + + Bother... + */ + else if ( strcmp( name, "exclusive" ) == 0 ) + return STATE_EXCLUSIVE; + else if ( strcmp( name, "shared" ) == 0 ) + return STATE_SHARED; + else if ( strcmp( name, "write" ) == 0 ) + return STATE_WRITE; +#endif break; case STATE_LOCKSCOPE: @@ -165,7 +186,7 @@ extern "C" int LockEntrySequence_endelement_callback( // static bool LockEntrySequence::createFromXML( const rtl::OString & rInData, uno::Sequence< - ucb::LockEntry > & rOutData ) + ucb::LockEntry > & rOutData ) { const sal_Int32 TOKEN_LENGTH = 12; // </lockentry> bool success = true; @@ -191,8 +212,8 @@ bool LockEntrySequence::createFromXML( const rtl::OString & rInData, &aCtx ); ne_xml_parse( parser, - rInData.getStr() + nStart, - nEnd - nStart + TOKEN_LENGTH ); + rInData.getStr() + nStart, + nEnd - nStart + TOKEN_LENGTH ); #if NEON_VERSION >= 0x0250 success = !ne_xml_failed( parser ); @@ -214,7 +235,7 @@ bool LockEntrySequence::createFromXML( const rtl::OString & rInData, rOutData[ nCount - 1 ] = *aCtx.pEntry; } - nStart = nEnd + TOKEN_LENGTH + 1; + nStart = nEnd + TOKEN_LENGTH; nEnd = rInData.indexOf( "</lockentry>", nStart ); } diff --git a/ucb/source/ucp/webdav/LockEntrySequence.hxx b/ucb/source/ucp/webdav/LockEntrySequence.hxx index 7c81a5f215..6f00020b63 100644 --- a/ucb/source/ucp/webdav/LockEntrySequence.hxx +++ b/ucb/source/ucp/webdav/LockEntrySequence.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: LockEntrySequence.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/LockSequence.cxx b/ucb/source/ucp/webdav/LockSequence.cxx index b959ddc109..2c51d5ce1f 100644 --- a/ucb/source/ucp/webdav/LockSequence.cxx +++ b/ucb/source/ucp/webdav/LockSequence.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: LockSequence.cxx,v $ - * $Revision: 1.17 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -74,12 +71,11 @@ struct LockSequenceParseContext extern "C" int LockSequence_startelement_callback( void *, int parent, - const char *nspace, + const char * /*nspace*/, const char *name, const char ** ) { - if ( ( name != 0 ) && - ( ( nspace == 0 ) || ( strcmp( nspace, "" ) == 0 ) ) ) + if ( name != 0 ) { switch ( parent ) { @@ -347,7 +343,7 @@ bool LockSequence::createFromXML( const rtl::OString & rInData, rOutData[ nCount - 1 ] = *aCtx.pLock; } - nStart = nEnd + TOKEN_LENGTH + 1; + nStart = nEnd + TOKEN_LENGTH; nEnd = rInData.indexOf( "</activelock>", nStart ); } diff --git a/ucb/source/ucp/webdav/LockSequence.hxx b/ucb/source/ucp/webdav/LockSequence.hxx index 79fbe4dba5..0e218d1a80 100644 --- a/ucb/source/ucp/webdav/LockSequence.hxx +++ b/ucb/source/ucp/webdav/LockSequence.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: LockSequence.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/NeonHeadRequest.cxx b/ucb/source/ucp/webdav/NeonHeadRequest.cxx index 36208be7b0..4b29afae5a 100644 --- a/ucb/source/ucp/webdav/NeonHeadRequest.cxx +++ b/ucb/source/ucp/webdav/NeonHeadRequest.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonHeadRequest.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/NeonHeadRequest.hxx b/ucb/source/ucp/webdav/NeonHeadRequest.hxx index 6e44df3bb1..9bbafc9d82 100644 --- a/ucb/source/ucp/webdav/NeonHeadRequest.hxx +++ b/ucb/source/ucp/webdav/NeonHeadRequest.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonHeadRequest.hxx,v $ - * $Revision: 1.5 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/NeonInputStream.cxx b/ucb/source/ucp/webdav/NeonInputStream.cxx index 3fdd0dbecd..746ce5666b 100644 --- a/ucb/source/ucp/webdav/NeonInputStream.cxx +++ b/ucb/source/ucp/webdav/NeonInputStream.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonInputStream.cxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/NeonInputStream.hxx b/ucb/source/ucp/webdav/NeonInputStream.hxx index 4d95c3eedd..7130f5a0bd 100644 --- a/ucb/source/ucp/webdav/NeonInputStream.hxx +++ b/ucb/source/ucp/webdav/NeonInputStream.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonInputStream.hxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/NeonLockStore.cxx b/ucb/source/ucp/webdav/NeonLockStore.cxx new file mode 100644 index 0000000000..a73e104649 --- /dev/null +++ b/ucb/source/ucp/webdav/NeonLockStore.cxx @@ -0,0 +1,245 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_ucb.hxx" + +#include <ne_locks.h> +#include <ne_uri.h> +#include "rtl/ustring.hxx" +#include "osl/time.h" +#include "osl/thread.hxx" +#include "NeonSession.hxx" +#include "NeonLockStore.hxx" + +using namespace webdav_ucp; + +namespace webdav_ucp { + +class TickerThread : public osl::Thread +{ + bool m_bFinish; + NeonLockStore & m_rLockStore; + +public: + + TickerThread( NeonLockStore & rLockStore ) + : osl::Thread(), m_bFinish( false ), m_rLockStore( rLockStore ) {} + + void finish() { m_bFinish = true; } + +protected: + + virtual void SAL_CALL run(); +}; + +} // namespace webdav_ucp + +// ------------------------------------------------------------------- +void TickerThread::run() +{ + OSL_TRACE( "TickerThread: start." ); + + // we have to go through the loop more often to be able to finish ~quickly + const int nNth = 25; + + int nCount = nNth; + while ( !m_bFinish ) + { + if ( nCount-- <= 0 ) + { + m_rLockStore.refreshLocks(); + nCount = nNth; + } + + TimeValue aTV; + aTV.Seconds = 0; + aTV.Nanosec = 1000000000 / nNth; + wait( aTV ); + } + + OSL_TRACE( "TickerThread: stop." ); +} + +// ------------------------------------------------------------------- +NeonLockStore::NeonLockStore() + : m_pNeonLockStore( ne_lockstore_create() ), + m_pTickerThread( 0 ) +{ + OSL_ENSURE( m_pNeonLockStore, "Unable to create neon lock store!" ); +} + +// ------------------------------------------------------------------- +NeonLockStore::~NeonLockStore() +{ + stopTicker(); + + // release active locks, if any. + OSL_ENSURE( m_aLockInfoMap.size() == 0, + "NeonLockStore::~NeonLockStore - Releasing active locks!" ); + + LockInfoMap::const_iterator it( m_aLockInfoMap.begin() ); + const LockInfoMap::const_iterator end( m_aLockInfoMap.end() ); + while ( it != end ) + { + NeonLock * pLock = (*it).first; + (*it).second.xSession->UNLOCK( pLock ); + + ne_lockstore_remove( m_pNeonLockStore, pLock ); + ne_lock_destroy( pLock ); + + ++it; + } + + ne_lockstore_destroy( m_pNeonLockStore ); +} + +// ------------------------------------------------------------------- +void NeonLockStore::startTicker() +{ + osl::MutexGuard aGuard( m_aMutex ); + + if ( !m_pTickerThread ) + { + m_pTickerThread = new TickerThread( *this ); + m_pTickerThread->create(); + } +} + +// ------------------------------------------------------------------- +void NeonLockStore::stopTicker() +{ + osl::MutexGuard aGuard( m_aMutex ); + + if ( m_pTickerThread ) + { + m_pTickerThread->finish(); + m_pTickerThread->join(); + delete m_pTickerThread; + m_pTickerThread = 0; + } +} + +// ------------------------------------------------------------------- +void NeonLockStore::registerSession( HttpSession * pHttpSession ) +{ + osl::MutexGuard aGuard( m_aMutex ); + + ne_lockstore_register( m_pNeonLockStore, pHttpSession ); +} + +// ------------------------------------------------------------------- +NeonLock * NeonLockStore::findByUri( rtl::OUString const & rUri ) +{ + osl::MutexGuard aGuard( m_aMutex ); + + ne_uri aUri; + ne_uri_parse( rtl::OUStringToOString( + rUri, RTL_TEXTENCODING_UTF8 ).getStr(), &aUri ); + return ne_lockstore_findbyuri( m_pNeonLockStore, &aUri ); +} + +// ------------------------------------------------------------------- +void NeonLockStore::addLock( NeonLock * pLock, + rtl::Reference< NeonSession > const & xSession, + sal_Int32 nLastChanceToSendRefreshRequest ) +{ + osl::MutexGuard aGuard( m_aMutex ); + + ne_lockstore_add( m_pNeonLockStore, pLock ); + m_aLockInfoMap[ pLock ] + = LockInfo( xSession, nLastChanceToSendRefreshRequest ); + + startTicker(); +} + +// ------------------------------------------------------------------- +void NeonLockStore::updateLock( NeonLock * pLock, + sal_Int32 nLastChanceToSendRefreshRequest ) +{ + osl::MutexGuard aGuard( m_aMutex ); + + LockInfoMap::iterator it( m_aLockInfoMap.find( pLock ) ); + OSL_ENSURE( it != m_aLockInfoMap.end(), + "NeonLockStore::updateLock: lock not found!" ); + + if ( it != m_aLockInfoMap.end() ) + { + (*it).second.nLastChanceToSendRefreshRequest + = nLastChanceToSendRefreshRequest; + } +} + +// ------------------------------------------------------------------- +void NeonLockStore::removeLock( NeonLock * pLock ) +{ + osl::MutexGuard aGuard( m_aMutex ); + + m_aLockInfoMap.erase( pLock ); + ne_lockstore_remove( m_pNeonLockStore, pLock ); + + if ( m_aLockInfoMap.size() == 0 ) + stopTicker(); +} + +// ------------------------------------------------------------------- +void NeonLockStore::refreshLocks() +{ + osl::MutexGuard aGuard( m_aMutex ); + + LockInfoMap::iterator it( m_aLockInfoMap.begin() ); + const LockInfoMap::const_iterator end( m_aLockInfoMap.end() ); + while ( it != end ) + { + LockInfo & rInfo = (*it).second; + if ( rInfo.nLastChanceToSendRefreshRequest != -1 ) + { + // 30 seconds or less remaining until lock expires? + TimeValue t1; + osl_getSystemTime( &t1 ); + if ( rInfo.nLastChanceToSendRefreshRequest - 30 + <= sal_Int32( t1.Seconds ) ) + { + // refresh the lock. + sal_Int32 nlastChanceToSendRefreshRequest = -1; + if ( rInfo.xSession->LOCK( + (*it).first, + /* out param */ nlastChanceToSendRefreshRequest ) ) + { + rInfo.nLastChanceToSendRefreshRequest + = nlastChanceToSendRefreshRequest; + } + else + { + // refresh failed. stop auto-refresh. + rInfo.nLastChanceToSendRefreshRequest = -1; + } + } + } + ++it; + } +} diff --git a/ucb/source/ucp/webdav/NeonLockStore.hxx b/ucb/source/ucp/webdav/NeonLockStore.hxx new file mode 100644 index 0000000000..4db273ca73 --- /dev/null +++ b/ucb/source/ucp/webdav/NeonLockStore.hxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#ifndef INCLUDED_NEONLOCKSTORE_HXX +#define INCLUDED_NEONLOCKSTORE_HXX + +#include <map> +#include "ne_locks.h" +#include "osl/mutex.hxx" +#include "rtl/ref.hxx" +#include "NeonTypes.hxx" + +namespace webdav_ucp +{ + +class TickerThread; +class NeonSession; + +struct ltptr +{ + bool operator()( const NeonLock * p1, const NeonLock * p2 ) const + { + return p1 < p2; + } +}; + +typedef struct _LockInfo +{ + rtl::Reference< NeonSession > xSession; + sal_Int32 nLastChanceToSendRefreshRequest; + + _LockInfo() + : nLastChanceToSendRefreshRequest( -1 ) {} + + _LockInfo( rtl::Reference< NeonSession > const & _xSession, + sal_Int32 _nLastChanceToSendRefreshRequest ) + : xSession( _xSession ), + nLastChanceToSendRefreshRequest( _nLastChanceToSendRefreshRequest ) {} + +} LockInfo; + +typedef std::map< NeonLock *, LockInfo, ltptr > LockInfoMap; + +class NeonLockStore +{ + osl::Mutex m_aMutex; + ne_lock_store * m_pNeonLockStore; + TickerThread * m_pTickerThread; + LockInfoMap m_aLockInfoMap; + +public: + NeonLockStore(); + ~NeonLockStore(); + + void registerSession( HttpSession * pHttpSession ); + + NeonLock * findByUri( rtl::OUString const & rUri ); + + void addLock( NeonLock * pLock, + rtl::Reference< NeonSession > const & xSession, + // time in seconds since Jan 1 1970 + // -1: infinite lock, no refresh + sal_Int32 nLastChanceToSendRefreshRequest ); + + void updateLock( NeonLock * pLock, + sal_Int32 nLastChanceToSendRefreshRequest ); + + void removeLock( NeonLock * pLock ); + + void refreshLocks(); + +private: + void startTicker(); + void stopTicker(); +}; + +} // namespace webdav_ucp + +#endif // INCLUDED_NEONLOCKSTORE_HXX diff --git a/ucb/source/ucp/webdav/NeonPropFindRequest.cxx b/ucb/source/ucp/webdav/NeonPropFindRequest.cxx index ab1132fa88..172e43511b 100644 --- a/ucb/source/ucp/webdav/NeonPropFindRequest.cxx +++ b/ucb/source/ucp/webdav/NeonPropFindRequest.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonPropFindRequest.cxx,v $ - * $Revision: 1.24 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -30,14 +27,14 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_ucb.hxx" -#include <osl/diagnose.h> + +#include "osl/diagnose.h" +#include "rtl/strbuf.hxx" #include "NeonTypes.hxx" #include "DAVException.hxx" #include "DAVProperties.hxx" #include "NeonPropFindRequest.hxx" -#ifndef _LINKSEQUENCE_HXX_ #include "LinkSequence.hxx" -#endif #include "LockSequence.hxx" #include "LockEntrySequence.hxx" #include "UCBDeadPropertyValue.hxx" @@ -49,6 +46,40 @@ using namespace std; using namespace webdav_ucp; // ------------------------------------------------------------------- +namespace +{ + // strip "DAV:" namespace from XML snippets to avoid + // parser error (undeclared namespace) later on. + rtl::OString stripDavNamespace( const rtl::OString & in ) + { + const rtl::OString inXML( in.toAsciiLowerCase() ); + + rtl::OStringBuffer buf; + sal_Int32 start = 0; + sal_Int32 end = inXML.indexOf( "dav:" ); + while ( end != -1 ) + { + if ( inXML[ end - 1 ] == '<' || + inXML[ end - 1 ] == '/' ) + { + // copy from original buffer - preserve case. + buf.append( in.copy( start, end - start ) ); + } + else + { + // copy from original buffer - preserve case. + buf.append( in.copy( start, end - start + 4 ) ); + } + start = end + 4; + end = inXML.indexOf( "dav:", start ); + } + buf.append( inXML.copy( start ) ); + + return rtl::OString( buf.makeStringAndClear() ); + } +} + +// ------------------------------------------------------------------- extern "C" int NPFR_propfind_iter( void* userdata, const NeonPropName* pname, const char* value, @@ -57,9 +88,9 @@ extern "C" int NPFR_propfind_iter( void* userdata, /* HTTP Response Status Classes: - - 1: Informational - Request received, continuing process + - 1: Informational - Request received, continuing process - - 2: Success - The action was successfully received, + - 2: Success - The action was successfully received, understood, and accepted - 3: Redirection - Further action must be taken in order to @@ -79,18 +110,22 @@ extern "C" int NPFR_propfind_iter( void* userdata, DAVPropertyValue thePropertyValue; thePropertyValue.IsCaseSensitive = true; + OSL_ENSURE( pname->nspace, "NPFR_propfind_iter - No namespace!" ); + DAVProperties::createUCBPropName( pname->nspace, - pname->name, - thePropertyValue.Name ); + pname->name, + thePropertyValue.Name ); bool bHasValue = false; if ( DAVProperties::isUCBDeadProperty( *pname ) ) { // DAV dead property added by WebDAV UCP? if ( UCBDeadPropertyValue::createFromXML( - value, thePropertyValue.Value ) ) + value, thePropertyValue.Value ) ) + { OSL_ENSURE( thePropertyValue.Value.hasValue(), - "NeonPropFindRequest::propfind_iter - No value!" ); + "NPFR_propfind_iter - No value!" ); bHasValue = true; + } } if ( !bHasValue ) @@ -102,13 +137,9 @@ extern "C" int NPFR_propfind_iter( void* userdata, aValue = aValue.trim(); // #107358# remove leading/trailing spaces if ( aValue.getLength() ) { - aValue = aValue.toAsciiLowerCase(); - if ( - ( aValue.compareTo( - RTL_CONSTASCII_STRINGPARAM( "<collection" ) ) == 0 ) || - ( aValue.compareTo( - RTL_CONSTASCII_STRINGPARAM( "<dav:collection" ) ) == 0 ) - ) + aValue = stripDavNamespace( aValue ).toAsciiLowerCase(); + if ( aValue.compareTo( + RTL_CONSTASCII_STRINGPARAM( "<collection" ) ) == 0 ) { thePropertyValue.Value <<= OUString::createFromAscii( "collection" ); @@ -125,20 +156,23 @@ extern "C" int NPFR_propfind_iter( void* userdata, pname->name, "supportedlock" ) == 0 ) { Sequence< LockEntry > aEntries; - LockEntrySequence::createFromXML( value, aEntries ); + LockEntrySequence::createFromXML( + stripDavNamespace( value ), aEntries ); thePropertyValue.Value <<= aEntries; } else if ( rtl_str_compareIgnoreAsciiCase( pname->name, "lockdiscovery" ) == 0 ) { Sequence< Lock > aLocks; - LockSequence::createFromXML( value, aLocks ); + LockSequence::createFromXML( + stripDavNamespace( value ), aLocks ); thePropertyValue.Value <<= aLocks; } else if ( rtl_str_compareIgnoreAsciiCase( pname->name, "source" ) == 0 ) { Sequence< Link > aLinks; - LinkSequence::createFromXML( value, aLinks ); + LinkSequence::createFromXML( + stripDavNamespace( value ), aLinks ); thePropertyValue.Value <<= aLinks; } else @@ -168,10 +202,10 @@ extern "C" void NPFR_propfind_results( void* userdata, #if NEON_VERSION >= 0x0260 DAVResource theResource( - OStringToOUString( uri->path, RTL_TEXTENCODING_UTF8 ) ); + OStringToOUString( uri->path, RTL_TEXTENCODING_UTF8 ) ); #else DAVResource theResource( - OStringToOUString( href, RTL_TEXTENCODING_UTF8 ) ); + OStringToOUString( href, RTL_TEXTENCODING_UTF8 ) ); #endif ne_propset_iterate( set, NPFR_propfind_iter, &theResource ); @@ -210,10 +244,10 @@ extern "C" void NPFR_propnames_results( void* userdata, // Create entry for the resource. #if NEON_VERSION >= 0x0260 DAVResourceInfo theResource( - OStringToOUString( uri->path, RTL_TEXTENCODING_UTF8 ) ); + OStringToOUString( uri->path, RTL_TEXTENCODING_UTF8 ) ); #else DAVResourceInfo theResource( - OStringToOUString( href, RTL_TEXTENCODING_UTF8 ) ); + OStringToOUString( href, RTL_TEXTENCODING_UTF8 ) ); #endif // Fill entry. @@ -247,7 +281,7 @@ NeonPropFindRequest::NeonPropFindRequest( HttpSession* inSession, { // Split fullname into namespace and name! DAVProperties::createNeonPropName( - inPropNames[ theIndex ], thePropNames[ theIndex ] ); + inPropNames[ theIndex ], thePropNames[ theIndex ] ); } thePropNames[ theIndex ].nspace = NULL; thePropNames[ theIndex ].name = NULL; @@ -288,7 +322,7 @@ NeonPropFindRequest::NeonPropFindRequest( HttpSession* inSession, NeonPropFindRequest::NeonPropFindRequest( HttpSession* inSession, const char* inPath, - const Depth inDepth, + const Depth inDepth, std::vector< DAVResourceInfo > & ioResInfo, int & nError ) { diff --git a/ucb/source/ucp/webdav/NeonPropFindRequest.hxx b/ucb/source/ucp/webdav/NeonPropFindRequest.hxx index 1e6d3a07b2..7487b29b74 100644 --- a/ucb/source/ucp/webdav/NeonPropFindRequest.hxx +++ b/ucb/source/ucp/webdav/NeonPropFindRequest.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonPropFindRequest.hxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/NeonSession.cxx b/ucb/source/ucp/webdav/NeonSession.cxx index 9b6bae2c15..d9ff4c0290 100644 --- a/ucb/source/ucp/webdav/NeonSession.cxx +++ b/ucb/source/ucp/webdav/NeonSession.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonSession.cxx,v $ - * $Revision: 1.55.12.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -34,12 +31,14 @@ #include <hash_map> #include <vector> #include <string.h> +#include "osl/diagnose.h" +#include "osl/time.h" #include <rtl/string.h> #include <ne_socket.h> #include <ne_auth.h> #include <ne_redirect.h> -#include <ne_locks.h> #include <ne_ssl.h> +#include <ne_compress.h> #include "libxml/parser.h" #include "rtl/ustrbuf.hxx" #include "comphelper/sequence.hxx" @@ -62,6 +61,7 @@ #include <com/sun/star/security/CertificateContainer.hpp> #include <com/sun/star/security/XCertificateContainer.hpp> #include <com/sun/star/task/XMasterPasswordHandling.hpp> +#include <com/sun/star/ucb/Lock.hpp> #include <com/sun/star/xml/crypto/XSEInitializer.hpp> using namespace com::sun::star; @@ -119,10 +119,6 @@ typedef std::hash_map RequestDataMap; // ------------------------------------------------------------------- -// static members! -bool NeonSession::m_bGlobalsInited = false; -osl::Mutex NeonSession::m_aGlobalMutex; -// ------------------------------------------------------------------- // Helper fuction // ------------------------------------------------------------------- static sal_uInt16 makeStatusCode( const rtl::OUString & rStatusText ) @@ -190,21 +186,21 @@ struct NeonRequestContext // ------------------------------------------------------------------- #if NEON_VERSION >= 0x0250 -extern "C" int NeonSession_ResponseBlockReader(void * inUserData, +extern "C" int NeonSession_ResponseBlockReader(void * inUserData, #else -extern "C" void NeonSession_ResponseBlockReader(void * inUserData, +extern "C" void NeonSession_ResponseBlockReader(void * inUserData, #endif - const char * inBuf, + const char * inBuf, size_t inLen ) { - // neon calls this function with (inLen == 0)... + // neon sometimes calls this function with (inLen == 0)... if ( inLen > 0 ) { NeonRequestContext * pCtx = static_cast< NeonRequestContext * >( inUserData ); - + rtl::Reference< NeonInputStream > xInputStream( - pCtx->xInputStream); + pCtx->xInputStream ); if ( xInputStream.is() ) xInputStream->AddToStream( inBuf, inLen ); @@ -220,11 +216,11 @@ extern "C" void NeonSession_ResponseBlockReader(void * inUserData, // ------------------------------------------------------------------- #if NEON_VERSION >= 0x0250 -extern "C" int NeonSession_ResponseBlockWriter( void * inUserData, +extern "C" int NeonSession_ResponseBlockWriter( void * inUserData, #else -extern "C" void NeonSession_ResponseBlockWriter( void * inUserData, +extern "C" void NeonSession_ResponseBlockWriter( void * inUserData, #endif - const char * inBuf, + const char * inBuf, size_t inLen ) { // neon calls this function with (inLen == 0)... @@ -232,7 +228,7 @@ extern "C" void NeonSession_ResponseBlockWriter( void * inUserData, { NeonRequestContext * pCtx = static_cast< NeonRequestContext * >( inUserData ); - uno::Reference< io::XOutputStream > xOutputStream + uno::Reference< io::XOutputStream > xOutputStream = pCtx->xOutputStream; if ( xOutputStream.is() ) @@ -289,7 +285,7 @@ extern "C" int NeonSession_NeonAuth( void * inUserData, if ( attempt == 0 ) { - // neon does not handle username supplied with request URI (for + // neon does not handle username supplied with request URI (for // instance when doing FTP over proxy - last checked: 0.23.5 ) try @@ -327,22 +323,23 @@ extern "C" int NeonSession_NeonAuth( void * inUserData, bool bCanUseSystemCreds = false; #ifdef NE_FEATURE_SSPI - bCanUseSystemCreds = (attempt == 0) && // avoid endless loops - ne_has_support( NE_FEATURE_SSPI ) && // Windows-only feature. - ( ( ne_strcasecmp( inAuthProtocol, "NTLM" ) == 0 ) || - ( ne_strcasecmp( inAuthProtocol, "Negotiate" ) == 0 ) ); + bCanUseSystemCreds + = (attempt == 0) && // avoid endless loops + ne_has_support( NE_FEATURE_SSPI ) && // Windows-only feature. + ( ( ne_strcasecmp( inAuthProtocol, "NTLM" ) == 0 ) || + ( ne_strcasecmp( inAuthProtocol, "Negotiate" ) == 0 ) ); #endif - // #i97003# (tkr): Ask XMasterPasswordHandling if we should store the + // #i97003# (tkr): Ask XMasterPasswordHandling if we should store the // credentials persistently and give this information to the auth listener uno::Reference< task::XMasterPasswordHandling > xMasterPasswordHandling; try { - xMasterPasswordHandling = + xMasterPasswordHandling = uno::Reference< task::XMasterPasswordHandling >( - theSession->getMSF()->createInstance( - rtl::OUString::createFromAscii( - "com.sun.star.task.PasswordContainer" )), + theSession->getMSF()->createInstance( + rtl::OUString::createFromAscii( + "com.sun.star.task.PasswordContainer" ) ), uno::UNO_QUERY ); } catch ( uno::Exception const & ) @@ -354,9 +351,9 @@ extern "C" int NeonSession_NeonAuth( void * inUserData, theSession->getHostName(), theUserName, thePassWord, - xMasterPasswordHandling.is() + xMasterPasswordHandling.is() ? xMasterPasswordHandling-> - isPersistentStoringAllowed() + isPersistentStoringAllowed() : sal_False, bCanUseSystemCreds); @@ -400,17 +397,17 @@ namespace { if ( nContStart != -1 ) { nContStart = nContStart + sPartId.getLength(); - sal_Int32 nContEnd + sal_Int32 nContEnd = _rRawString.indexOf( sal_Unicode( ',' ), nContStart ); sPart = _rRawString.copy( nContStart, nContEnd - nContStart ); } return sPart; } -} +} // namespace // ------------------------------------------------------------------- -extern "C" int NeonSession_CertificationNotify( void *userdata, - int failures, +extern "C" int NeonSession_CertificationNotify( void *userdata, + int failures, const ne_ssl_certificate *cert ) { OSL_ASSERT( cert ); @@ -418,12 +415,12 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, NeonSession * pSession = static_cast< NeonSession * >( userdata ); uno::Reference< security::XCertificateContainer > xCertificateContainer; try - { - xCertificateContainer + { + xCertificateContainer = uno::Reference< security::XCertificateContainer >( - pSession->getMSF()->createInstance( - rtl::OUString::createFromAscii( - "com.sun.star.security.CertificateContainer" ) ), + pSession->getMSF()->createInstance( + rtl::OUString::createFromAscii( + "com.sun.star.security.CertificateContainer" ) ), uno::UNO_QUERY ); } catch ( uno::Exception const & ) @@ -434,27 +431,27 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, return 1; failures = 0; - + char * dn = ne_ssl_readable_dname( ne_ssl_cert_subject( cert ) ); rtl::OUString cert_subject( dn, strlen( dn ), RTL_TEXTENCODING_UTF8, 0 ); free( dn ); security::CertificateContainerStatus certificateContainer( - xCertificateContainer->hasCertificate( + xCertificateContainer->hasCertificate( pSession->getHostName(), cert_subject ) ); if ( certificateContainer != security::CertificateContainerStatus_NOCERT ) - return - certificateContainer == security::CertificateContainerStatus_TRUSTED - ? 0 + return + certificateContainer == security::CertificateContainerStatus_TRUSTED + ? 0 : 1; - + uno::Reference< xml::crypto::XSEInitializer > xSEInitializer; try { xSEInitializer = uno::Reference< xml::crypto::XSEInitializer >( - pSession->getMSF()->createInstance( + pSession->getMSF()->createInstance( rtl::OUString::createFromAscii( SEINITIALIZER_COMPONENT ) ), uno::UNO_QUERY ); } @@ -467,22 +464,22 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext( xSEInitializer->createSecurityContext( rtl::OUString() ) ); - + uno::Reference< xml::crypto::XSecurityEnvironment > xSecurityEnv( xSecurityContext->getSecurityEnvironment() ); - + //The end entity certificate char * eeCertB64 = ne_ssl_cert_export( cert ); rtl::OString sEECertB64( eeCertB64 ); - uno::Reference< com::sun::star::security::XCertificate > xEECert( - xSecurityEnv->createCertificateFromAscii( + uno::Reference< security::XCertificate > xEECert( + xSecurityEnv->createCertificateFromAscii( rtl::OStringToOUString( sEECertB64, RTL_TEXTENCODING_ASCII_US ) ) ); ne_free( eeCertB64 ); eeCertB64 = 0; - + std::vector< uno::Reference< security::XCertificate > > vecCerts; const ne_ssl_certificate * issuerCert = cert; do @@ -493,24 +490,24 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, issuerCert = ne_ssl_cert_signedby( issuerCert ); if ( NULL == issuerCert ) break; - + char * imCertB64 = ne_ssl_cert_export( issuerCert ); rtl::OString sInterMediateCertB64( imCertB64 ); ne_free( imCertB64 ); - uno::Reference< security::XCertificate> xImCert( - xSecurityEnv->createCertificateFromAscii( - rtl::OStringToOUString( + uno::Reference< security::XCertificate> xImCert( + xSecurityEnv->createCertificateFromAscii( + rtl::OStringToOUString( sInterMediateCertB64, RTL_TEXTENCODING_ASCII_US ) ) ); if ( xImCert.is() ) vecCerts.push_back( xImCert ); } while ( 1 ); - sal_Int64 certValidity = xSecurityEnv->verifyCertificate( xEECert, + sal_Int64 certValidity = xSecurityEnv->verifyCertificate( xEECert, ::comphelper::containerToSequence( vecCerts ) ); - - if ( pSession->isDomainMatch( + + if ( pSession->isDomainMatch( GetHostnamePart( xEECert.get()->getSubjectName() ) ) ) { // if host name matched with certificate then look if the @@ -519,24 +516,24 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, return 0; } - const uno::Reference< ucb::XCommandEnvironment > xEnv( + const uno::Reference< ucb::XCommandEnvironment > xEnv( pSession->getRequestEnvironment().m_xEnv ); if ( xEnv.is() ) { failures = static_cast< int >( certValidity ); - + uno::Reference< task::XInteractionHandler > xIH( xEnv->getInteractionHandler() ); if ( xIH.is() ) { - rtl::Reference< ucbhelper::SimpleCertificateValidationRequest > + rtl::Reference< ucbhelper::SimpleCertificateValidationRequest > xRequest( new ucbhelper::SimpleCertificateValidationRequest( (sal_Int32)failures, xEECert, pSession->getHostName() ) ); xIH->handle( xRequest.get() ); rtl::Reference< ucbhelper::InteractionContinuation > xSelection = xRequest->getSelection(); - + if ( xSelection.is() ) { uno::Reference< task::XInteractionApprove > xApprove( @@ -546,22 +543,22 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, xCertificateContainer->addCertificate( pSession->getHostName(), cert_subject, sal_True ); return 0; - } - else + } + else { // Don't trust cert xCertificateContainer->addCertificate( pSession->getHostName(), cert_subject, sal_False ); - return 1; + return 1; } } - } + } else { // Don't trust cert xCertificateContainer->addCertificate( pSession->getHostName(), cert_subject, sal_False ); - return 1; + return 1; } } return 1; @@ -617,36 +614,41 @@ extern "C" void NeonSession_PreSendRequest( ne_request * req, } } - const DAVRequestHeaders & rHeaders - = pSession->getRequestEnvironment().m_aRequestHeaders; + const DAVRequestHeaders & rHeaders + = pSession->getRequestEnvironment().m_aRequestHeaders; - DAVRequestHeaders::const_iterator it1( rHeaders.begin() ); - const DAVRequestHeaders::const_iterator end1( rHeaders.end() ); + DAVRequestHeaders::const_iterator it1( rHeaders.begin() ); + const DAVRequestHeaders::const_iterator end1( rHeaders.end() ); - while ( it1 != end1 ) - { - rtl::OString aHeader - = rtl::OUStringToOString( (*it1).first, - RTL_TEXTENCODING_UTF8 ); - rtl::OString aValue - = rtl::OUStringToOString( (*it1).second, - RTL_TEXTENCODING_UTF8 ); - ne_buffer_concat( headers, aHeader.getStr(), ": ", - aValue.getStr(), EOL, NULL ); - - ++it1; + while ( it1 != end1 ) + { + rtl::OString aHeader + = rtl::OUStringToOString( (*it1).first, + RTL_TEXTENCODING_UTF8 ); + rtl::OString aValue + = rtl::OUStringToOString( (*it1).second, + RTL_TEXTENCODING_UTF8 ); + ne_buffer_concat( headers, aHeader.getStr(), ": ", + aValue.getStr(), EOL, NULL ); + + ++it1; + } } } -} // namespace +// ------------------------------------------------------------------- +// static members! +bool NeonSession::m_bGlobalsInited = false; +osl::Mutex NeonSession::m_aGlobalMutex; +NeonLockStore NeonSession::m_aNeonLockStore; // ------------------------------------------------------------------- // Constructor // ------------------------------------------------------------------- NeonSession::NeonSession( - const rtl::Reference< DAVSessionFactory > & rSessionFactory, - const rtl::OUString& inUri, - const ucbhelper::InternetProxyDecider & rProxyDecider ) + const rtl::Reference< DAVSessionFactory > & rSessionFactory, + const rtl::OUString& inUri, + const ucbhelper::InternetProxyDecider & rProxyDecider ) throw ( DAVException ) : DAVSession( rSessionFactory ), m_pHttpSession( 0 ), @@ -657,8 +659,6 @@ NeonSession::NeonSession( m_aScheme = theUri.GetScheme(); m_aHostName = theUri.GetHost(); m_nPort = theUri.GetPort(); - -// Init(); } // ------------------------------------------------------------------- @@ -670,17 +670,17 @@ NeonSession::~NeonSession( ) { ne_session_destroy( m_pHttpSession ); m_pHttpSession = 0; - // Note: Uncomment the following if locking support is required - /* - if ( mNeonLockSession != NULL ) - { - ne_lock_unregister( mNeonLockSession ); - mNeonLockSession = NULL; - } - */ } + delete static_cast< RequestDataMap * >( m_pRequestData ); +} - delete static_cast<RequestDataMap*>(m_pRequestData); +// ------------------------------------------------------------------- +void NeonSession::Init( const DAVRequestEnvironment & rEnv ) + throw ( DAVException ) +{ + osl::Guard< osl::Mutex > theGuard( m_aMutex ); + m_aEnv = rEnv; + Init(); } // ------------------------------------------------------------------- @@ -693,7 +693,7 @@ void NeonSession::Init() if ( m_pHttpSession == 0 ) { - // Ensure that Neon sockets are initialize + // Ensure that Neon sockets are initialized // --> tkr #151111# crashed if copy and pasted pictures from the internet // ne_sock_init() was executed by two threads at the same time. @@ -705,9 +705,23 @@ void NeonSession::Init() throw DAVException( DAVException::DAV_SESSION_CREATE, NeonUri::makeConnectionEndPointString( m_aHostName, m_nPort ) ); - // #122205# - libxml2 needs to be initialized once if used by + + // #122205# - libxml2 needs to be initialized once if used by // multithreaded programs like OOo. xmlInitParser(); +#if 0 + // for more debug flags see ne_utils.h; NE_DEBUGGING must be defined + // while compiling neon in order to actually activate neon debug + // output. + ne_debug_init( stderr, NE_DBG_FLUSH + | NE_DBG_HTTP + // | NE_DBG_HTTPBODY + // | NE_DBG_HTTPAUTH + // | NE_DBG_XML + // | NE_DBG_XMLPARSE + // | NE_DBG_LOCKS + ); +#endif m_bGlobalsInited = true; } @@ -747,31 +761,30 @@ void NeonSession::Init() // to the session m_pHttpSession = ne_session_create( - rtl::OUStringToOString( m_aScheme, - RTL_TEXTENCODING_UTF8 ).getStr(), - /* theUri.GetUserInfo(), - @@@ for FTP via HTTP proxy, but not supported by Neon */ - rtl::OUStringToOString( m_aHostName, - RTL_TEXTENCODING_UTF8 ).getStr(), - m_nPort ); - + rtl::OUStringToOString( m_aScheme, + RTL_TEXTENCODING_UTF8 ).getStr(), + /* theUri.GetUserInfo(), + @@@ for FTP via HTTP proxy, but not supported by Neon */ + rtl::OUStringToOString( m_aHostName, + RTL_TEXTENCODING_UTF8 ).getStr(), + m_nPort ); + if ( m_pHttpSession == 0 ) throw DAVException( DAVException::DAV_SESSION_CREATE, NeonUri::makeConnectionEndPointString( m_aHostName, m_nPort ) ); - if (m_aScheme.equalsIgnoreAsciiCase( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "https" ) ) ) ) - { - - // Get all trusted certificates from key store + // Register the session with the lock store + m_aNeonLockStore.registerSession( m_pHttpSession ); - - + if ( m_aScheme.equalsIgnoreAsciiCase( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "https" ) ) ) ) + { // Set a failure callback for certificate check - ne_ssl_set_verify( m_pHttpSession, NeonSession_CertificationNotify, this); - } - + ne_ssl_set_verify( + m_pHttpSession, NeonSession_CertificationNotify, this); + } + // Add hooks (i.e. for adding additional headers to the request) #if 0 @@ -815,27 +828,20 @@ void NeonSession::Init() if ( m_aProxyName.getLength() ) { ne_session_proxy( m_pHttpSession, - rtl::OUStringToOString( m_aProxyName, - RTL_TEXTENCODING_UTF8 ) - .getStr(), + rtl::OUStringToOString( + m_aProxyName, + RTL_TEXTENCODING_UTF8 ).getStr(), m_nProxyPort ); } - // Note: Uncomment the following if locking support is required - /* - mNeonLockSession = ne_lock_register( m_pHttpSession ); - - if ( mNeonLockSession == NULL ) - throw DAVException( DAVException::DAV_SESSION_CREATE, - theUri::makeConnectionEndPointString() ); - */ - // Register for redirects. ne_redirect_register( m_pHttpSession ); // authentication callbacks. - ne_add_server_auth( m_pHttpSession, NE_AUTH_ALL, NeonSession_NeonAuth, this ); - ne_add_proxy_auth ( m_pHttpSession, NE_AUTH_ALL, NeonSession_NeonAuth, this ); + ne_add_server_auth( + m_pHttpSession, NE_AUTH_ALL, NeonSession_NeonAuth, this ); + ne_add_proxy_auth( + m_pHttpSession, NE_AUTH_ALL, NeonSession_NeonAuth, this ); } } @@ -870,15 +876,13 @@ sal_Bool NeonSession::UsesProxy() // OPTIONS // ------------------------------------------------------------------- void NeonSession::OPTIONS( const rtl::OUString & inPath, - DAVCapabilities & outCapabilities, + DAVCapabilities & outCapabilities, const DAVRequestEnvironment & rEnv ) throw( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); HttpServerCapabilities servercaps; memset( &servercaps, 0, sizeof( servercaps ) ); @@ -887,8 +891,9 @@ void NeonSession::OPTIONS( const rtl::OUString & inPath, rtl::OUStringToOString( inPath, RTL_TEXTENCODING_UTF8 ), &servercaps ); - HandleError( theRetVal ); - + + HandleError( theRetVal, inPath, rEnv ); + outCapabilities.class1 = !!servercaps.dav_class1; outCapabilities.class2 = !!servercaps.dav_class2; outCapabilities.executable = !!servercaps.dav_executable; @@ -897,60 +902,58 @@ void NeonSession::OPTIONS( const rtl::OUString & inPath, // ------------------------------------------------------------------- // PROPFIND - allprop & named // ------------------------------------------------------------------- -void NeonSession::PROPFIND( const rtl::OUString & inPath, - const Depth inDepth, +void NeonSession::PROPFIND( const rtl::OUString & inPath, + const Depth inDepth, const std::vector< rtl::OUString > & inPropNames, - std::vector< DAVResource > & ioResources, + std::vector< DAVResource > & ioResources, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); int theRetVal = NE_OK; NeonPropFindRequest theRequest( m_pHttpSession, rtl::OUStringToOString( inPath, RTL_TEXTENCODING_UTF8 ), - inDepth, - inPropNames, - ioResources, - theRetVal ); - HandleError( theRetVal ); + inDepth, + inPropNames, + ioResources, + theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // PROPFIND - propnames // ------------------------------------------------------------------- -void NeonSession::PROPFIND( const rtl::OUString & inPath, - const Depth inDepth, - std::vector< DAVResourceInfo >& ioResInfo, +void NeonSession::PROPFIND( const rtl::OUString & inPath, + const Depth inDepth, + std::vector< DAVResourceInfo > & ioResInfo, const DAVRequestEnvironment & rEnv ) throw( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); int theRetVal = NE_OK; NeonPropFindRequest theRequest( m_pHttpSession, rtl::OUStringToOString( inPath, RTL_TEXTENCODING_UTF8 ), - inDepth, - ioResInfo, - theRetVal ); - HandleError( theRetVal ); + inDepth, + ioResInfo, + theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // PROPPATCH // ------------------------------------------------------------------- -void NeonSession::PROPPATCH( const rtl::OUString & inPath, - const std::vector< ProppatchValue > & inValues, +void NeonSession::PROPPATCH( const rtl::OUString & inPath, + const std::vector< ProppatchValue > & inValues, const DAVRequestEnvironment & rEnv ) throw( DAVException ) { @@ -960,23 +963,24 @@ void NeonSession::PROPPATCH( const rtl::OUString & inPath, mod_dav implementation: - creationdate r ( File System prop ) - displayname w + creationdate r ( File System prop ) + displayname w getcontentlanguage r ( #ifdef DAV_DISABLE_WRITEABLE_PROPS ) getcontentlength r ( File System prop ) getcontenttype r ( #ifdef DAV_DISABLE_WRITEABLE_PROPS ) getetag r ( File System prop ) getlastmodified r ( File System prop ) - lockdiscovery r - resourcetype r - source w + lockdiscovery r + resourcetype r + source w supportedlock r executable w ( #ifndef WIN32 ) All dead properties are of course writable. - */ + */ int theRetVal = NE_OK; + int n; // for the "for" loop // Generate the list of properties we want to set. @@ -995,13 +999,13 @@ void NeonSession::PROPPATCH( const rtl::OUString & inPath, if ( rValue.operation == PROPSET ) { pItems[ n ].type = ne_propset; - + rtl::OUString aStringValue; if ( DAVProperties::isUCBDeadProperty( *pName ) ) { // DAV dead property added by WebDAV UCP? - if ( !UCBDeadPropertyValue::toXML( - rValue.value, aStringValue ) ) + if ( !UCBDeadPropertyValue::toXML( rValue.value, + aStringValue ) ) { // Error! pItems[ n ].value = 0; @@ -1015,7 +1019,7 @@ void NeonSession::PROPPATCH( const rtl::OUString & inPath, // complex properties... if ( rValue.name == DAVProperties::SOURCE ) { - uno::Sequence< ::com::sun::star::ucb::Link > aLinks; + uno::Sequence< ucb::Link > aLinks; if ( rValue.value >>= aLinks ) { LinkSequence::toXML( aLinks, aStringValue ); @@ -1050,23 +1054,21 @@ void NeonSession::PROPPATCH( const rtl::OUString & inPath, pItems[ n ].value = 0; } } - + if ( theRetVal == NE_OK ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - - Init(); - m_aEnv = rEnv; - + Init( rEnv ); + pItems[ n ].name = 0; - + theRetVal = ne_proppatch( m_pHttpSession, rtl::OUStringToOString( inPath, RTL_TEXTENCODING_UTF8 ), pItems ); } - + for ( n = 0; n < nPropCount; ++n ) { free( (void *)pItems[ n ].name->name ); @@ -1075,8 +1077,8 @@ void NeonSession::PROPPATCH( const rtl::OUString & inPath, } delete [] pItems; - - HandleError( theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- @@ -1090,9 +1092,7 @@ void NeonSession::HEAD( const ::rtl::OUString & inPath, { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); int theRetVal = NE_OK; NeonHeadRequest theRequest( m_pHttpSession, @@ -1100,22 +1100,21 @@ void NeonSession::HEAD( const ::rtl::OUString & inPath, inHeaderNames, ioResource, theRetVal ); - HandleError( theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // GET // ------------------------------------------------------------------- -uno::Reference< io::XInputStream > +uno::Reference< io::XInputStream > NeonSession::GET( const rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) + const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); rtl::Reference< NeonInputStream > xInputStream( new NeonInputStream ); NeonRequestContext aCtx( xInputStream ); @@ -1125,23 +1124,23 @@ NeonSession::GET( const rtl::OUString & inPath, NeonSession_ResponseBlockReader, false, &aCtx ); - HandleError( theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); + return uno::Reference< io::XInputStream >( xInputStream.get() ); } // ------------------------------------------------------------------- // GET // ------------------------------------------------------------------- -void NeonSession::GET( const rtl::OUString & inPath, +void NeonSession::GET( const rtl::OUString & inPath, uno::Reference< io::XOutputStream > & ioOutputStream, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); NeonRequestContext aCtx( ioOutputStream ); int theRetVal = GET( m_pHttpSession, @@ -1150,24 +1149,23 @@ void NeonSession::GET( const rtl::OUString & inPath, NeonSession_ResponseBlockWriter, false, &aCtx ); - HandleError( theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // GET // ------------------------------------------------------------------- -uno::Reference< io::XInputStream > +uno::Reference< io::XInputStream > NeonSession::GET( const rtl::OUString & inPath, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, - const DAVRequestEnvironment & rEnv ) + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); ioResource.uri = inPath; ioResource.properties.clear(); @@ -1180,7 +1178,9 @@ NeonSession::GET( const rtl::OUString & inPath, NeonSession_ResponseBlockReader, true, &aCtx ); - HandleError( theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); + return uno::Reference< io::XInputStream >( xInputStream.get() ); } @@ -1188,17 +1188,15 @@ NeonSession::GET( const rtl::OUString & inPath, // GET // ------------------------------------------------------------------- void NeonSession::GET( const rtl::OUString & inPath, - uno::Reference< io::XOutputStream > & ioOutputStream, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, - const DAVRequestEnvironment & rEnv ) + uno::Reference< io::XOutputStream > & ioOutputStream, + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); ioResource.uri = inPath; ioResource.properties.clear(); @@ -1210,27 +1208,26 @@ void NeonSession::GET( const rtl::OUString & inPath, NeonSession_ResponseBlockWriter, true, &aCtx ); - HandleError( theRetVal ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // PUT // ------------------------------------------------------------------- -void NeonSession::PUT( const rtl::OUString & inPath, +void NeonSession::PUT( const rtl::OUString & inPath, const uno::Reference< io::XInputStream > & inInputStream, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; - uno::Sequence< sal_Int8 > aDataToSend; if ( !getDataFromInputStream( inInputStream, aDataToSend, false ) ) throw DAVException( DAVException::DAV_INVALID_ARG ); + Init( rEnv ); + int theRetVal = PUT( m_pHttpSession, rtl::OUStringToOString( inPath, RTL_TEXTENCODING_UTF8 ), @@ -1238,18 +1235,18 @@ void NeonSession::PUT( const rtl::OUString & inPath, aDataToSend.getConstArray() ), aDataToSend.getLength() ); - HandleError( theRetVal ); + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // POST // ------------------------------------------------------------------- -uno::Reference< io::XInputStream > +uno::Reference< io::XInputStream > NeonSession::POST( const rtl::OUString & inPath, - const rtl::OUString & rContentType, - const rtl::OUString & rReferer, - const uno::Reference< io::XInputStream > & inInputStream, - const DAVRequestEnvironment & rEnv ) + const rtl::OUString & rContentType, + const rtl::OUString & rReferer, + const uno::Reference< io::XInputStream > & inInputStream, + const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); @@ -1258,15 +1255,13 @@ NeonSession::POST( const rtl::OUString & inPath, if ( !getDataFromInputStream( inInputStream, aDataToSend, true ) ) throw DAVException( DAVException::DAV_INVALID_ARG ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); rtl::Reference< NeonInputStream > xInputStream( new NeonInputStream ); NeonRequestContext aCtx( xInputStream ); int theRetVal = POST( m_pHttpSession, rtl::OUStringToOString( - inPath, RTL_TEXTENCODING_UTF8 ), + inPath, RTL_TEXTENCODING_UTF8 ), reinterpret_cast< const char * >( aDataToSend.getConstArray() ), NeonSession_ResponseBlockReader, @@ -1274,7 +1269,8 @@ NeonSession::POST( const rtl::OUString & inPath, rContentType, rReferer ); - HandleError( theRetVal ); + HandleError( theRetVal, inPath, rEnv ); + return uno::Reference< io::XInputStream >( xInputStream.get() ); } @@ -1295,9 +1291,7 @@ void NeonSession::POST( const rtl::OUString & inPath, if ( !getDataFromInputStream( inInputStream, aDataToSend, true ) ) throw DAVException( DAVException::DAV_INVALID_ARG ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); NeonRequestContext aCtx( oOutputStream ); int theRetVal = POST( m_pHttpSession, @@ -1310,20 +1304,7 @@ void NeonSession::POST( const rtl::OUString & inPath, rContentType, rReferer ); - HandleError( theRetVal ); -} - -// ------------------------------------------------------------------- -// ABORT -// ------------------------------------------------------------------- -void NeonSession::ABORT() - throw ( DAVException ) -{ - // 11.11.09 (tkr): The following code lines causing crashes if closing a ongoing connection. It turned out that this existing solution doesn't work in multi-threading environments. - // So I disabled them in 3.2. . Issue #73893# should fix it in OOo 3.3. - - //if (NULL !=m_pHttpSession) - // ne_close_connection(m_pHttpSession); + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- @@ -1335,30 +1316,27 @@ void NeonSession::MKCOL( const rtl::OUString & inPath, { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); int theRetVal = ne_mkcol( m_pHttpSession, rtl::OUStringToOString( - inPath, RTL_TEXTENCODING_UTF8 ) ); - HandleError( theRetVal ); + inPath, RTL_TEXTENCODING_UTF8 ) ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- // COPY // ------------------------------------------------------------------- -void NeonSession::COPY( const rtl::OUString & inSourceURL, - const rtl::OUString & inDestinationURL, +void NeonSession::COPY( const rtl::OUString & inSourceURL, + const rtl::OUString & inDestinationURL, const DAVRequestEnvironment & rEnv, - sal_Bool inOverWrite ) + sal_Bool inOverWrite ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); NeonUri theSourceUri( inSourceURL ); NeonUri theDestinationUri( inDestinationURL ); @@ -1367,12 +1345,13 @@ void NeonSession::COPY( const rtl::OUString & inSourceURL, inOverWrite ? 1 : 0, NE_DEPTH_INFINITE, rtl::OUStringToOString( - theSourceUri.GetPath(), - RTL_TEXTENCODING_UTF8 ), + theSourceUri.GetPath(), + RTL_TEXTENCODING_UTF8 ), rtl::OUStringToOString( - theDestinationUri.GetPath(), - RTL_TEXTENCODING_UTF8 ) ); - HandleError( theRetVal ); + theDestinationUri.GetPath(), + RTL_TEXTENCODING_UTF8 ) ); + + HandleError( theRetVal, inSourceURL, rEnv ); } // ------------------------------------------------------------------- @@ -1386,21 +1365,20 @@ void NeonSession::MOVE( const rtl::OUString & inSourceURL, { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); NeonUri theSourceUri( inSourceURL ); NeonUri theDestinationUri( inDestinationURL ); int theRetVal = ne_move( m_pHttpSession, inOverWrite ? 1 : 0, rtl::OUStringToOString( - theSourceUri.GetPath(), - RTL_TEXTENCODING_UTF8 ), + theSourceUri.GetPath(), + RTL_TEXTENCODING_UTF8 ), rtl::OUStringToOString( - theDestinationUri.GetPath(), - RTL_TEXTENCODING_UTF8 ) ); - HandleError( theRetVal ); + theDestinationUri.GetPath(), + RTL_TEXTENCODING_UTF8 ) ); + + HandleError( theRetVal, inSourceURL, rEnv ); } // ------------------------------------------------------------------- @@ -1412,53 +1390,282 @@ void NeonSession::DESTROY( const rtl::OUString & inPath, { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); - - m_aEnv = rEnv; + Init( rEnv ); int theRetVal = ne_delete( m_pHttpSession, rtl::OUStringToOString( - inPath, RTL_TEXTENCODING_UTF8 ) ); - HandleError( theRetVal ); + inPath, RTL_TEXTENCODING_UTF8 ) ); + + HandleError( theRetVal, inPath, rEnv ); } // ------------------------------------------------------------------- -// LOCK +namespace +{ + sal_Int32 lastChanceToSendRefreshRequest( TimeValue const & rStart, + int timeout ) + { + TimeValue aEnd; + osl_getSystemTime( &aEnd ); + + // Try to estimate a safe absolute time for sending the + // lock refresh request. + sal_Int32 lastChanceToSendRefreshRequest = -1; + if ( timeout != NE_TIMEOUT_INFINITE ) + { + sal_Int32 calltime = aEnd.Seconds - rStart.Seconds; + if ( calltime <= timeout ) + { + lastChanceToSendRefreshRequest + = aEnd.Seconds + timeout - calltime; + } + else + { + OSL_TRACE( "No chance to refresh lock before timeout!" ); + } + } + return lastChanceToSendRefreshRequest; + } + +} // namespace + +// ------------------------------------------------------------------- +// LOCK (set new lock) // ------------------------------------------------------------------- -// Note: Uncomment the following if locking support is required -/* -void NeonSession::LOCK( const Lock & inLock, +void NeonSession::LOCK( const ::rtl::OUString & inPath, + ucb::Lock & rLock, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); + Init( rEnv ); - m_aEnv = rEnv; + /* Create a depth zero, exclusive write lock, with default timeout + * (allowing a server to pick a default). token, owner and uri are + * unset. */ + NeonLock * theLock = ne_lock_create(); + + // Set the lock uri + ne_uri aUri; + ne_uri_parse( rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr(), + &aUri ); + theLock->uri = aUri; + + // Set the lock depth + switch( rLock.Depth ) + { + case ucb::LockDepth_ZERO: + theLock->depth = NE_DEPTH_ZERO; + break; + case ucb::LockDepth_ONE: + theLock->depth = NE_DEPTH_ONE; + break; + case ucb::LockDepth_INFINITY: + theLock->depth = NE_DEPTH_INFINITE; + break; + default: + throw DAVException( DAVException::DAV_INVALID_ARG ); + } + + // Set the lock scope + switch ( rLock.Scope ) + { + case ucb::LockScope_EXCLUSIVE: + theLock->scope = ne_lockscope_exclusive; + break; + case ucb::LockScope_SHARED: + theLock->scope = ne_lockscope_shared; + break; + default: + throw DAVException( DAVException::DAV_INVALID_ARG ); + } + + // Set the lock timeout + theLock->timeout = (long)rLock.Timeout; + + // Set the lock owner + rtl::OUString aValue; + rLock.Owner >>= aValue; + theLock->owner = + ne_strdup( rtl::OUStringToOString( aValue, + RTL_TEXTENCODING_UTF8 ).getStr() ); + TimeValue startCall; + osl_getSystemTime( &startCall ); + + int theRetVal = ne_lock( m_pHttpSession, theLock ); + + if ( theRetVal == NE_OK ) + { + m_aNeonLockStore.addLock( theLock, + this, + lastChanceToSendRefreshRequest( + startCall, theLock->timeout ) ); + + uno::Sequence< rtl::OUString > aTokens( 1 ); + aTokens[ 0 ] = rtl::OUString::createFromAscii( theLock->token ); + rLock.LockTokens = aTokens; + + OSL_TRACE( "NeonSession::LOCK: created lock for %s. token: %s", + rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr(), + theLock->token ); + } + else + { + ne_lock_destroy( theLock ); + + OSL_TRACE( "NeonSession::LOCK: obtaining lock for %s failed!", + rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr() ); + } + + HandleError( theRetVal, inPath, rEnv ); +} - Lockit( inLock, true ); +// ------------------------------------------------------------------- +// LOCK (refresh existing lock) +// ------------------------------------------------------------------- +sal_Int64 NeonSession::LOCK( const ::rtl::OUString & inPath, + sal_Int64 nTimeout, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ) +{ + osl::Guard< osl::Mutex > theGuard( m_aMutex ); + + // Try to get the neon lock from lock store + NeonLock * theLock + = m_aNeonLockStore.findByUri( makeAbsoluteURL( inPath ) ); + if ( !theLock ) + throw DAVException( DAVException::DAV_NOT_LOCKED ); + + Init( rEnv ); + + // refresh existing lock. + theLock->timeout = static_cast< long >( nTimeout ); + + TimeValue startCall; + osl_getSystemTime( &startCall ); + + int theRetVal = ne_lock_refresh( m_pHttpSession, theLock ); + + if ( theRetVal == NE_OK ) + { + m_aNeonLockStore.updateLock( theLock, + lastChanceToSendRefreshRequest( + startCall, theLock->timeout ) ); + } + + HandleError( theRetVal, inPath, rEnv ); + + return theLock->timeout; +} + +// ------------------------------------------------------------------- +// LOCK (refresh existing lock) +// ------------------------------------------------------------------- +bool NeonSession::LOCK( NeonLock * pLock, + sal_Int32 & rlastChanceToSendRefreshRequest ) +{ + osl::Guard< osl::Mutex > theGuard( m_aMutex ); + +#if OSL_DEBUG_LEVEL > 0 + char * p = ne_uri_unparse( &(pLock->uri) ); + OSL_TRACE( "NeonSession::LOCK: Refreshing lock for %s.", p ); + ne_free( p ); +#endif + + // refresh existing lock. + + TimeValue startCall; + osl_getSystemTime( &startCall ); + + if ( ne_lock_refresh( m_pHttpSession, pLock ) == NE_OK ) + { + rlastChanceToSendRefreshRequest + = lastChanceToSendRefreshRequest( startCall, pLock->timeout ); + + OSL_TRACE( "Lock successfully refreshed." ); + return true; + } + else + { + OSL_TRACE( "Lock not refreshed!" ); + return false; + } } -*/ // ------------------------------------------------------------------- // UNLOCK // ------------------------------------------------------------------- -// Note: Uncomment the following if locking support is required -/* -void NeonSession::UNLOCK( const Lock & inLock, +void NeonSession::UNLOCK( const ::rtl::OUString & inPath, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - Init(); + // get the neon lock from lock store + NeonLock * theLock + = m_aNeonLockStore.findByUri( makeAbsoluteURL( inPath ) ); + if ( !theLock ) + throw DAVException( DAVException::DAV_NOT_LOCKED ); - m_aEnv = rEnv; + Init( rEnv ); + + int theRetVal = ne_unlock( m_pHttpSession, theLock ); - Lockit( inLock, false ); + if ( theRetVal == NE_OK ) + { + m_aNeonLockStore.removeLock( theLock ); + ne_lock_destroy( theLock ); + } + else + { + OSL_TRACE( "NeonSession::UNLOCK: unlocking of %s failed.", + rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr() ); + } + + HandleError( theRetVal, inPath, rEnv ); +} + +// ------------------------------------------------------------------- +// UNLOCK +// ------------------------------------------------------------------- +bool NeonSession::UNLOCK( NeonLock * pLock ) +{ + osl::Guard< osl::Mutex > theGuard( m_aMutex ); + +#if OSL_DEBUG_LEVEL > 0 + char * p = ne_uri_unparse( &(pLock->uri) ); + OSL_TRACE( "NeonSession::UNLOCK: Unlocking %s.", p ); + ne_free( p ); +#endif + + if ( ne_unlock( m_pHttpSession, pLock ) == NE_OK ) + { + OSL_TRACE( "UNLOCK succeeded." ); + return true; + } + else + { + OSL_TRACE( "UNLOCK failed!" ); + return false; + } +} + +// ------------------------------------------------------------------- +void NeonSession::abort() + throw ( DAVException ) +{ + // 11.11.09 (tkr): The following code lines causing crashes if + // closing a ongoing connection. It turned out that this existing + // solution doesn't work in multi-threading environments. + // So I disabled them in 3.2. . Issue #73893# should fix it in OOo 3.3. + //if ( m_pHttpSession ) + // ne_close_connection( m_pHttpSession ); } -*/ // ------------------------------------------------------------------- const ucbhelper::InternetProxyServer & NeonSession::getProxySettings() const @@ -1479,10 +1686,98 @@ const ucbhelper::InternetProxyServer & NeonSession::getProxySettings() const } // ------------------------------------------------------------------- +namespace { + +bool containsLocktoken( const uno::Sequence< ucb::Lock > & rLocks, + const char * token ) +{ + for ( sal_Int32 n = 0; n < rLocks.getLength(); ++n ) + { + const uno::Sequence< rtl::OUString > & rTokens + = rLocks[ n ].LockTokens; + for ( sal_Int32 m = 0; m < rTokens.getLength(); ++m ) + { + if ( rTokens[ m ].equalsAscii( token ) ) + return true; + } + } + return false; +} + +} // namespace + +// ------------------------------------------------------------------- +bool NeonSession::removeExpiredLocktoken( const rtl::OUString & inURL, + const DAVRequestEnvironment & rEnv ) +{ + NeonLock * theLock = m_aNeonLockStore.findByUri( inURL ); + if ( !theLock ) + return false; + + // do a lockdiscovery to check whether this lock is still valid. + try + { + // @@@ Alternative: use ne_lock_discover() => less overhead + + std::vector< DAVResource > aResources; + std::vector< rtl::OUString > aPropNames; + aPropNames.push_back( DAVProperties::LOCKDISCOVERY ); + + PROPFIND( rEnv.m_aRequestURI, DAVZERO, aPropNames, aResources, rEnv ); + + if ( aResources.size() == 0 ) + return false; + + std::vector< DAVPropertyValue >::const_iterator it + = aResources[ 0 ].properties.begin(); + std::vector< DAVPropertyValue >::const_iterator end + = aResources[ 0 ].properties.end(); + + while ( it != end ) + { + if ( (*it).Name.equals( DAVProperties::LOCKDISCOVERY ) ) + { + uno::Sequence< ucb::Lock > aLocks; + if ( !( (*it).Value >>= aLocks ) ) + return false; + + if ( !containsLocktoken( aLocks, theLock->token ) ) + { + // expired! + break; + } + + // still valid. + return false; + } + ++it; + } + + // No lockdiscovery prop in propfind result / locktoken not found + // in propfind result -> not locked + OSL_TRACE( "NeonSession::removeExpiredLocktoken: Removing " + " expired lock token for %s. token: %s", + rtl::OUStringToOString( inURL, + RTL_TEXTENCODING_UTF8 ).getStr(), + theLock->token ); + + m_aNeonLockStore.removeLock( theLock ); + ne_lock_destroy( theLock ); + return true; + } + catch ( DAVException const & ) + { + } + return false; +} + +// ------------------------------------------------------------------- // HandleError // Common Error Handler // ------------------------------------------------------------------- -void NeonSession::HandleError( int nError ) +void NeonSession::HandleError( int nError, + const rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { m_aEnv = DAVRequestEnvironment(); @@ -1491,60 +1786,84 @@ void NeonSession::HandleError( int nError ) switch ( nError ) { case NE_OK: - // Cleanup. return; case NE_ERROR: // Generic error { rtl::OUString aText = rtl::OUString::createFromAscii( - ne_get_error( m_pHttpSession ) ); - throw DAVException( DAVException::DAV_HTTP_ERROR, - aText, - makeStatusCode( aText ) ); - } + ne_get_error( m_pHttpSession ) ); + + sal_uInt16 code = makeStatusCode( aText ); + + if ( code == SC_LOCKED ) + { + if ( m_aNeonLockStore.findByUri( + makeAbsoluteURL( inPath ) ) == 0 ) + { + // locked by 3rd party + throw DAVException( DAVException::DAV_LOCKED ); + } + else + { + // locked by ourself + throw DAVException( DAVException::DAV_LOCKED_SELF ); + } + } + // Special handling for 400 and 412 status codes, which may indicate + // that a lock previously obtained by us has been released meanwhile + // by the server. Unfortunately, RFC is not clear at this point, + // thus server implementations behave different... + else if ( code == SC_BAD_REQUEST || code == SC_PRECONDITION_FAILED ) + { + if ( removeExpiredLocktoken( makeAbsoluteURL( inPath ), rEnv ) ) + throw DAVException( DAVException::DAV_LOCK_EXPIRED ); + } + + throw DAVException( DAVException::DAV_HTTP_ERROR, aText, code ); + } case NE_LOOKUP: // Name lookup failed. throw DAVException( DAVException::DAV_HTTP_LOOKUP, NeonUri::makeConnectionEndPointString( - m_aHostName, m_nPort ) ); + m_aHostName, m_nPort ) ); case NE_AUTH: // User authentication failed on server throw DAVException( DAVException::DAV_HTTP_AUTH, NeonUri::makeConnectionEndPointString( - m_aHostName, m_nPort ) ); + m_aHostName, m_nPort ) ); case NE_PROXYAUTH: // User authentication failed on proxy throw DAVException( DAVException::DAV_HTTP_AUTHPROXY, NeonUri::makeConnectionEndPointString( - m_aProxyName, m_nProxyPort ) ); - + m_aProxyName, m_nProxyPort ) ); + case NE_CONNECT: // Could not connect to server throw DAVException( DAVException::DAV_HTTP_CONNECT, NeonUri::makeConnectionEndPointString( - m_aHostName, m_nPort ) ); + m_aHostName, m_nPort ) ); case NE_TIMEOUT: // Connection timed out throw DAVException( DAVException::DAV_HTTP_TIMEOUT, NeonUri::makeConnectionEndPointString( - m_aHostName, m_nPort ) ); + m_aHostName, m_nPort ) ); case NE_FAILED: // The precondition failed throw DAVException( DAVException::DAV_HTTP_FAILED, NeonUri::makeConnectionEndPointString( - m_aHostName, m_nPort ) ); + m_aHostName, m_nPort ) ); case NE_RETRY: // Retry request (ne_end_request ONLY) throw DAVException( DAVException::DAV_HTTP_RETRY, NeonUri::makeConnectionEndPointString( - m_aHostName, m_nPort ) ); + m_aHostName, m_nPort ) ); case NE_REDIRECT: { NeonUri aUri( ne_redirect_location( m_pHttpSession ) ); throw DAVException( - DAVException::DAV_HTTP_REDIRECT, aUri.GetURI() ); + DAVException::DAV_HTTP_REDIRECT, aUri.GetURI() ); } - default: + default: { OSL_TRACE( "NeonSession::HandleError : Unknown Neon error code!" ); throw DAVException( DAVException::DAV_HTTP_ERROR, @@ -1554,78 +1873,6 @@ void NeonSession::HandleError( int nError ) } } -// Note: Uncomment the following if locking support is required -/* -void NeonSession::Lockit( const Lock & inLock, bool inLockit ) - throw ( DAVException ) -{ - osl::Guard< osl::Mutex > theGuard( m_aMutex ); - - // Create the neon lock - NeonLock * theLock = new NeonLock; - int theRetVal; - - // Set the lock uri - NeonUri theUri( inLock.uri ); - theLock->uri = const_cast< char * > - ( rtl::OUStringToOString( - theUri.GetPath(), RTL_TEXTENCODING_UTF8 ).getStr() ); - - if ( inLockit ) - { - // Set the lock depth - switch( inLock.depth ) - { - case DAVZERO: - case DAVINFINITY: - theLock->depth = int ( inLock.depth ); - break; - default: - throw DAVException( DAVException::DAV_INVALID_ARG ); - break; - } - - // Set the lock scope - switch ( inLock.scope ) - { - case EXCLUSIVE: - theLock->scope = ne_lockscope_exclusive; - break; - case SHARED: - theLock->scope = ne_lockscope_shared; - break; - default: - throw DAVException( DAVException::DAV_INVALID_ARG ); - break; - } - - // Set the lock owner - const char * theOwner = rtl::OUStringToOString( inLock.owner, - RTL_TEXTENCODING_UTF8 ); - theLock->owner = const_cast< char * > ( theOwner ); - - // Set the lock timeout - // Note: Neon ignores the timeout - //theLock->timeout = inLock.timeout; - - theRetVal = ne_lock( m_pHttpSession, theLock ); - } - else - { - - // Set the lock token - rtl::OUString theToken = inLock.locktoken.getConstArray()[ 0 ]; - theLock->token = const_cast< char * > - ( rtl::OUStringToOString( - theToken, RTL_TEXTENCODING_UTF8 ).getStr() ); - - theRetVal = ne_unlock( m_pHttpSession, theLock ); - } - - HandleError( theRetVal ); -} -*/ - // ------------------------------------------------------------------- namespace { @@ -1655,7 +1902,7 @@ void runResponseHeaderHandler( void * userdata, while ( it != end ) { - // header names are case insensitive + // header names are case insensitive if ( (*it).equalsIgnoreAsciiCase( aHeaderName ) ) { aHeaderName = (*it); @@ -1663,7 +1910,7 @@ void runResponseHeaderHandler( void * userdata, } ++it; } - + if ( it != end ) bIncludeIt = true; } @@ -1702,22 +1949,23 @@ int NeonSession::GET( ne_session * sess, #if NEON_VERSION < 0x0250 if ( getheaders ) - ne_add_response_header_catcher( req, runResponseHeaderHandler, userdata ); + ne_add_response_header_catcher( + req, runResponseHeaderHandler, userdata ); #endif - ne_add_response_body_reader( req, ne_accept_2xx, reader, userdata ); + ne_decompress * dc + = ne_decompress_reader( req, ne_accept_2xx, reader, userdata ); ret = ne_request_dispatch( req ); #if NEON_VERSION >= 0x0250 if ( getheaders ) { - while ((cursor = ne_response_header_iterate(req, cursor, &name, &value)) - != NULL) + while ( ( cursor = ne_response_header_iterate( + req, cursor, &name, &value ) ) != NULL ) { char buffer[8192]; - - ne_snprintf(buffer, sizeof buffer, "%s: %s", name, value); + ne_snprintf(buffer, sizeof buffer, "%s: %s", name, value); runResponseHeaderHandler(userdata, buffer); } } @@ -1725,6 +1973,9 @@ int NeonSession::GET( ne_session * sess, if ( ret == NE_OK && ne_get_status( req )->klass != 2 ) ret = NE_ERROR; + if ( dc != 0 ) + ne_decompress_destroy(dc); + ne_request_destroy( req ); return ret; } @@ -1812,10 +2063,11 @@ int NeonSession::POST( ne_session * sess, // ------------------------------------------------------------------- // static -bool NeonSession::getDataFromInputStream( - const uno::Reference< io::XInputStream > & xStream, - uno::Sequence< sal_Int8 > & rData, - bool bAppendTrailingZeroByte ) +bool +NeonSession::getDataFromInputStream( + const uno::Reference< io::XInputStream > & xStream, + uno::Sequence< sal_Int8 > & rData, + bool bAppendTrailingZeroByte ) { if ( xStream.is() ) { @@ -1824,9 +2076,9 @@ bool NeonSession::getDataFromInputStream( { try { - sal_Int32 nSize + sal_Int32 nSize = sal::static_int_cast<sal_Int32>(xSeekable->getLength()); - sal_Int32 nRead + sal_Int32 nRead = xStream->readBytes( rData, nSize ); if ( nRead == nSize ) @@ -1898,32 +2150,56 @@ bool NeonSession::getDataFromInputStream( } return false; } -// ------------------------------------------------------------------- -//static - -NeonSession::Map NeonSession::certMap; // --------------------------------------------------------------------- sal_Bool -NeonSession::isDomainMatch( rtl::OUString certHostName) +NeonSession::isDomainMatch( rtl::OUString certHostName ) { rtl::OUString hostName = getHostName(); - if (hostName.equalsIgnoreAsciiCase( certHostName )) + if (hostName.equalsIgnoreAsciiCase( certHostName ) ) return sal_True; - - - if ( 0 == certHostName.indexOf( rtl::OUString::createFromAscii( "*" ) ) && hostName.getLength() >= certHostName.getLength() ) + if ( 0 == certHostName.indexOf( rtl::OUString::createFromAscii( "*" ) ) && + hostName.getLength() >= certHostName.getLength() ) { rtl::OUString cmpStr = certHostName.copy( 1 ); - if ( hostName.matchIgnoreAsciiCase( cmpStr, hostName.getLength( ) - cmpStr.getLength()) ) + if ( hostName.matchIgnoreAsciiCase( + cmpStr, hostName.getLength() - cmpStr.getLength() ) ) return sal_True; - } - return sal_False; } - +// --------------------------------------------------------------------- +rtl::OUString NeonSession::makeAbsoluteURL( rtl::OUString const & rURL ) const +{ + try + { + // Is URL relative or already absolute? + if ( rURL[ 0 ] != sal_Unicode( '/' ) ) + { + // absolute. + return rtl::OUString( rURL ); + } + else + { + ne_uri aUri; + memset( &aUri, 0, sizeof( aUri ) ); + + ne_fill_server_uri( m_pHttpSession, &aUri ); + aUri.path + = ne_strdup( rtl::OUStringToOString( + rURL, RTL_TEXTENCODING_UTF8 ).getStr() ); + NeonUri aNeonUri( &aUri ); + ne_uri_free( &aUri ); + return aNeonUri.GetURI(); + } + } + catch ( DAVException const & ) + { + } + // error. + return rtl::OUString(); +} diff --git a/ucb/source/ucp/webdav/NeonSession.hxx b/ucb/source/ucp/webdav/NeonSession.hxx index 85daecd8e4..103724311d 100644 --- a/ucb/source/ucp/webdav/NeonSession.hxx +++ b/ucb/source/ucp/webdav/NeonSession.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonSession.hxx,v $ - * $Revision: 1.31.12.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -35,10 +32,9 @@ #include <osl/mutex.hxx> #include "DAVSession.hxx" #include "NeonTypes.hxx" +#include "NeonLockStore.hxx" #include <com/sun/star/lang/XMultiServiceFactory.hpp> -using namespace com::sun::star; - namespace ucbhelper { class ProxyDecider; } namespace webdav_ucp @@ -51,236 +47,249 @@ namespace webdav_ucp class NeonSession : public DAVSession { - private: - osl::Mutex m_aMutex; - static osl::Mutex m_aGlobalMutex; - rtl::OUString m_aScheme; - rtl::OUString m_aHostName; - rtl::OUString m_aProxyName; - sal_Int32 m_nPort; - sal_Int32 m_nProxyPort; - HttpSession * m_pHttpSession; - void * m_pRequestData; - const ucbhelper::InternetProxyDecider & m_rProxyDecider; - - // @@@ This should really be per-request data. But Neon currently - // (0.23.5) has no interface for passing per-request user data. - // Theoretically, a NeonSession instance could handle multiple requests - // at a time --currently it doesn't. Thus this is not an issue at the - // moment. - DAVRequestEnvironment m_aEnv; - - // Note: Uncomment the following if locking support is required - // NeonLockSession * mNeonLockSession; - - static bool m_bGlobalsInited; - - protected: - virtual ~NeonSession(); - - public: - NeonSession( const rtl::Reference< DAVSessionFactory > & rSessionFactory, - const rtl::OUString& inUri, - const ucbhelper::InternetProxyDecider & rProxyDecider ) - throw ( DAVException ); - - // DAVSession methods - virtual sal_Bool CanUse( const ::rtl::OUString & inUri ); - - virtual sal_Bool UsesProxy(); - - const DAVRequestEnvironment & getRequestEnvironment() const - { return m_aEnv; } - - virtual void - OPTIONS( const ::rtl::OUString & inPath, - DAVCapabilities & outCapabilities, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - // allprop & named - virtual void - PROPFIND( const ::rtl::OUString & inPath, - const Depth inDepth, - const std::vector< ::rtl::OUString > & inPropNames, - std::vector< DAVResource > & ioResources, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - // propnames - virtual void - PROPFIND( const ::rtl::OUString & inPath, - const Depth inDepth, - std::vector< DAVResourceInfo >& ioResInfo, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void - PROPPATCH( const ::rtl::OUString & inPath, - const std::vector< ProppatchValue > & inValues, - const DAVRequestEnvironment & rEnv ) - throw( DAVException ); - - virtual void - HEAD( const ::rtl::OUString & inPath, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, - const DAVRequestEnvironment & rEnv ) - throw( DAVException ); - - virtual com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > - GET( const ::rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void - GET( const ::rtl::OUString & inPath, - com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & ioOutputStream, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > - GET( const ::rtl::OUString & inPath, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void - GET( const ::rtl::OUString & inPath, - com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & ioOutputStream, - const std::vector< ::rtl::OUString > & inHeaderNames, - DAVResource & ioResource, +private: + osl::Mutex m_aMutex; + rtl::OUString m_aScheme; + rtl::OUString m_aHostName; + rtl::OUString m_aProxyName; + sal_Int32 m_nPort; + sal_Int32 m_nProxyPort; + HttpSession * m_pHttpSession; + void * m_pRequestData; + const ucbhelper::InternetProxyDecider & m_rProxyDecider; + + // @@@ This should really be per-request data. But Neon currently + // (0.23.5) has no interface for passing per-request user data. + // Theoretically, a NeonSession instance could handle multiple requests + // at a time --currently it doesn't. Thus this is not an issue at the + // moment. + DAVRequestEnvironment m_aEnv; + + static bool m_bGlobalsInited; + static osl::Mutex m_aGlobalMutex; + static NeonLockStore m_aNeonLockStore; + +protected: + virtual ~NeonSession(); + +public: + NeonSession( const rtl::Reference< DAVSessionFactory > & rSessionFactory, + const rtl::OUString& inUri, + const ucbhelper::InternetProxyDecider & rProxyDecider ) + throw ( DAVException ); + + // DAVSession methods + virtual sal_Bool CanUse( const ::rtl::OUString & inUri ); + + virtual sal_Bool UsesProxy(); + + const DAVRequestEnvironment & getRequestEnvironment() const + { return m_aEnv; } + + virtual void + OPTIONS( const ::rtl::OUString & inPath, + DAVCapabilities & outCapabilities, const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void - PUT( const ::rtl::OUString & inPath, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & inInputStream, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > - POST( const rtl::OUString & inPath, - const rtl::OUString & rContentType, - const rtl::OUString & rReferer, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & inInputStream, + throw ( DAVException ); + + // allprop & named + virtual void + PROPFIND( const ::rtl::OUString & inPath, + const Depth inDepth, + const std::vector< ::rtl::OUString > & inPropNames, + std::vector< DAVResource > & ioResources, const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); + throw ( DAVException ); - virtual void - POST( const rtl::OUString & inPath, - const rtl::OUString & rContentType, - const rtl::OUString & rReferer, - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & inInputStream, - com::sun::star::uno::Reference< - com::sun::star::io::XOutputStream > & oOutputStream, + // propnames + virtual void + PROPFIND( const ::rtl::OUString & inPath, + const Depth inDepth, + std::vector< DAVResourceInfo >& ioResInfo, const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); + throw ( DAVException ); - virtual void - MKCOL( const ::rtl::OUString & inPath, + virtual void + PROPPATCH( const ::rtl::OUString & inPath, + const std::vector< ProppatchValue > & inValues, const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void - COPY( const ::rtl::OUString & inSourceURL, - const ::rtl::OUString & inDestinationURL, - const DAVRequestEnvironment & rEnv, - sal_Bool inOverWrite ) - throw ( DAVException ); - - virtual void - MOVE( const ::rtl::OUString & inSourceURL, - const ::rtl::OUString & inDestinationURL, - const DAVRequestEnvironment & rEnv, - sal_Bool inOverWrite ) - throw ( DAVException ); - - virtual void DESTROY( const ::rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void ABORT() - throw ( DAVException ); - - // Note: Uncomment the following if locking support is required - /* - virtual void LOCK (const Lock & inLock, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - - virtual void UNLOCK (const Lock & inLock, - const DAVRequestEnvironment & rEnv ) - throw ( DAVException ); - */ - - // helpers - const rtl::OUString & getHostName() const { return m_aHostName; } - - const ::uno::Reference< ::lang::XMultiServiceFactory > getMSF() { return m_xFactory->getServiceFactory(); } - - const void * getRequestData() const { return m_pRequestData; } - - sal_Bool isDomainMatch( rtl::OUString certHostName ); - - private: - // Initialise "Neon sockets" - void Init( void ) - throw ( DAVException ); - - void HandleError( int nError ) - throw ( DAVException ); - - const ucbhelper::InternetProxyServer & getProxySettings() const; - - // Note: Uncomment the following if locking support is required - // void Lockit( const Lock & inLock, bool inLockit ) - // throw ( DAVException ); - - // low level GET implementation, used by public GET implementations - static int GET( ne_session * sess, - const char * uri, - ne_block_reader reader, - bool getheaders, - void * userdata ); - - // Buffer-based PUT implementation. Neon only has file descriptor- - // based API. - static int PUT( ne_session * sess, - const char * uri, - const char * buffer, - size_t size ); - - // Buffer-based POST implementation. Neon only has file descriptor- - // based API. - int POST( ne_session * sess, - const char * uri, - const char * buffer, - ne_block_reader reader, - void * userdata, - const rtl::OUString & rContentType, - const rtl::OUString & rReferer ); - - // Helper: XInputStream -> Sequence< sal_Int8 > - static bool getDataFromInputStream( - const com::sun::star::uno::Reference< - com::sun::star::io::XInputStream > & xStream, - com::sun::star::uno::Sequence< sal_Int8 > & rData, - bool bAppendTrailingZeroByte ); - - typedef std::map< ::rtl::OUString, ::rtl::OUString > Map; - static Map certMap; + throw ( DAVException ); + + virtual void + HEAD( const ::rtl::OUString & inPath, + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > + GET( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void + GET( const ::rtl::OUString & inPath, + com::sun::star::uno::Reference< + com::sun::star::io::XOutputStream > & ioOutputStream, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > + GET( const ::rtl::OUString & inPath, + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void + GET( const ::rtl::OUString & inPath, + com::sun::star::uno::Reference< + com::sun::star::io::XOutputStream > & ioOutputStream, + const std::vector< ::rtl::OUString > & inHeaderNames, + DAVResource & ioResource, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void + PUT( const ::rtl::OUString & inPath, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & inInputStream, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > + POST( const rtl::OUString & inPath, + const rtl::OUString & rContentType, + const rtl::OUString & rReferer, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & inInputStream, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void + POST( const rtl::OUString & inPath, + const rtl::OUString & rContentType, + const rtl::OUString & rReferer, + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & inInputStream, + com::sun::star::uno::Reference< + com::sun::star::io::XOutputStream > & oOutputStream, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void + MKCOL( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void + COPY( const ::rtl::OUString & inSourceURL, + const ::rtl::OUString & inDestinationURL, + const DAVRequestEnvironment & rEnv, + sal_Bool inOverWrite ) + throw ( DAVException ); + + virtual void + MOVE( const ::rtl::OUString & inSourceURL, + const ::rtl::OUString & inDestinationURL, + const DAVRequestEnvironment & rEnv, + sal_Bool inOverWrite ) + throw ( DAVException ); + + virtual void DESTROY( const ::rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + // set new lock. + virtual void LOCK( const ::rtl::OUString & inURL, + com::sun::star::ucb::Lock & inLock, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + // refresh existing lock. + virtual sal_Int64 LOCK( const ::rtl::OUString & inURL, + sal_Int64 nTimeout, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + virtual void UNLOCK( const ::rtl::OUString & inURL, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + // helpers + virtual void abort() + throw ( DAVException ); + + const rtl::OUString & getHostName() const { return m_aHostName; } + + const ::uno::Reference< ::lang::XMultiServiceFactory > getMSF() + { return m_xFactory->getServiceFactory(); } + + const void * getRequestData() const { return m_pRequestData; } + + sal_Bool isDomainMatch( rtl::OUString certHostName ); + +private: + friend class NeonLockStore; + + void Init( void ) + throw ( DAVException ); + + void Init( const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + // ret: true => retry request. + void HandleError( int nError, + const rtl::OUString & inPath, + const DAVRequestEnvironment & rEnv ) + throw ( DAVException ); + + const ucbhelper::InternetProxyServer & getProxySettings() const; + + bool removeExpiredLocktoken( const rtl::OUString & inURL, + const DAVRequestEnvironment & rEnv ); + + // refresh lock, called by NeonLockStore::refreshLocks + bool LOCK( NeonLock * pLock, + sal_Int32 & rlastChanceToSendRefreshRequest ); + + // unlock, called by NeonLockStore::~NeonLockStore + bool UNLOCK( NeonLock * pLock ); + + // low level GET implementation, used by public GET implementations + static int GET( ne_session * sess, + const char * uri, + ne_block_reader reader, + bool getheaders, + void * userdata ); + + // Buffer-based PUT implementation. Neon only has file descriptor- + // based API. + static int PUT( ne_session * sess, + const char * uri, + const char * buffer, + size_t size ); + + // Buffer-based POST implementation. Neon only has file descriptor- + // based API. + int POST( ne_session * sess, + const char * uri, + const char * buffer, + ne_block_reader reader, + void * userdata, + const rtl::OUString & rContentType, + const rtl::OUString & rReferer ); + + // Helper: XInputStream -> Sequence< sal_Int8 > + static bool getDataFromInputStream( + const com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > & xStream, + com::sun::star::uno::Sequence< sal_Int8 > & rData, + bool bAppendTrailingZeroByte ); + + rtl::OUString makeAbsoluteURL( rtl::OUString const & rURL ) const; }; -} // namespace_ucp +} // namespace webdav_ucp #endif // _NEONSESSION_HXX_ diff --git a/ucb/source/ucp/webdav/NeonTypes.hxx b/ucb/source/ucp/webdav/NeonTypes.hxx index 08c7d07460..cb150f06b2 100644 --- a/ucb/source/ucp/webdav/NeonTypes.hxx +++ b/ucb/source/ucp/webdav/NeonTypes.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonTypes.hxx,v $ - * $Revision: 1.13 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -35,6 +32,7 @@ #include <ne_utils.h> #include <ne_basic.h> #include <ne_props.h> +#include <ne_locks.h> typedef ne_session HttpSession; typedef ne_status HttpStatus; @@ -43,4 +41,6 @@ typedef ne_server_capabilities HttpServerCapabilities; typedef ne_propname NeonPropName; typedef ne_prop_result_set NeonPropFindResultSet; +typedef struct ne_lock NeonLock; + #endif // _NEONTYPES_HXX_ diff --git a/ucb/source/ucp/webdav/NeonUri.cxx b/ucb/source/ucp/webdav/NeonUri.cxx index ed8315b1cd..9b97c264a6 100644 --- a/ucb/source/ucp/webdav/NeonUri.cxx +++ b/ucb/source/ucp/webdav/NeonUri.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonUri.cxx,v $ - * $Revision: 1.25.16.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -42,11 +39,6 @@ using namespace webdav_ucp; - char *scheme; - char *host, *userinfo; - unsigned int port; - char *path, *query, *fragment; - # if defined __SUNPRO_CC // FIXME: not sure whether initializing a ne_uri statically is supposed to work // the string fields of ne_uri are char*, not const char* @@ -65,38 +57,38 @@ using namespace webdav_ucp; namespace { -const ne_uri g_sUriDefaultsHTTP = { "http", +const ne_uri g_sUriDefaultsHTTP = { "http", #if NEON_VERSION >= 0x0260 - NULL, + NULL, #endif - NULL, - DEFAULT_HTTP_PORT, + NULL, + DEFAULT_HTTP_PORT, #if NEON_VERSION >= 0x0260 - NULL, + NULL, #endif - NULL, + NULL, NULL }; -const ne_uri g_sUriDefaultsHTTPS = { "https", +const ne_uri g_sUriDefaultsHTTPS = { "https", #if NEON_VERSION >= 0x0260 - NULL, + NULL, #endif - NULL, - DEFAULT_HTTPS_PORT, + NULL, + DEFAULT_HTTPS_PORT, #if NEON_VERSION >= 0x0260 - NULL, + NULL, #endif - NULL, + NULL, NULL }; -const ne_uri g_sUriDefaultsFTP = { "ftp", +const ne_uri g_sUriDefaultsFTP = { "ftp", #if NEON_VERSION >= 0x0260 - NULL, + NULL, #endif - NULL, - DEFAULT_FTP_PORT, + NULL, + DEFAULT_FTP_PORT, #if NEON_VERSION >= 0x0260 - NULL, + NULL, #endif - NULL, + NULL, NULL }; } // namespace @@ -136,7 +128,7 @@ NeonUri::NeonUri( const ne_uri * inUri ) init( rtl::OString( uri ), inUri ); free( uri ); - + calculateURI(); } @@ -149,7 +141,7 @@ NeonUri::NeonUri( const rtl::OUString & inUri ) // #i77023# rtl::OUString aEscapedUri( ucb_impl::urihelper::encodeURI( inUri ) ); - rtl::OString theInputUri( + rtl::OString theInputUri( aEscapedUri.getStr(), aEscapedUri.getLength(), RTL_TEXTENCODING_UTF8 ); ne_uri theUri; @@ -196,17 +188,17 @@ void NeonUri::init( const rtl::OString & rUri, const ne_uri * pUri ) RTL_TEXTENCODING_UTF8 ); #if NEON_VERSION >= 0x0260 - if ( pUri->query ) + if ( pUri->query ) { mPath += rtl::OUString::createFromAscii( "?" ); - mPath += rtl::OStringToOUString( + mPath += rtl::OStringToOUString( pUri->query, RTL_TEXTENCODING_UTF8 ); } if ( pUri->fragment ) { mPath += rtl::OUString::createFromAscii( "#" ); - mPath += rtl::OStringToOUString( + mPath += rtl::OStringToOUString( pUri->fragment, RTL_TEXTENCODING_UTF8 ); } #endif @@ -230,7 +222,7 @@ void NeonUri::calculateURI () aBuf.appendAscii( "@" ); } // Is host a numeric IPv6 address? - if ( ( mHostName.indexOf( ':' ) != -1 ) && + if ( ( mHostName.indexOf( ':' ) != -1 ) && ( mHostName[ 0 ] != sal_Unicode( '[' ) ) ) { aBuf.appendAscii( "[" ); @@ -283,7 +275,7 @@ void NeonUri::calculateURI () } if (nPos != -1) { - rtl::OUString aTemp( + rtl::OUString aTemp( mPath.copy (nPos + 1, mPath.getLength () - nPos - 1 - nTrail) ); // query, fragment present? @@ -343,7 +335,7 @@ rtl::OUString NeonUri::makeConnectionEndPointString( rtl::OUStringBuffer aBuf; // Is host a numeric IPv6 address? - if ( ( rHostName.indexOf( ':' ) != -1 ) && + if ( ( rHostName.indexOf( ':' ) != -1 ) && ( rHostName[ 0 ] != sal_Unicode( '[' ) ) ) { aBuf.appendAscii( "[" ); diff --git a/ucb/source/ucp/webdav/NeonUri.hxx b/ucb/source/ucp/webdav/NeonUri.hxx index 1b54085e53..2623887ae0 100644 --- a/ucb/source/ucp/webdav/NeonUri.hxx +++ b/ucb/source/ucp/webdav/NeonUri.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: NeonUri.hxx,v $ - * $Revision: 1.14.22.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/PropertyMap.hxx b/ucb/source/ucp/webdav/PropertyMap.hxx index 14e915bc1c..fefe316979 100644 --- a/ucb/source/ucp/webdav/PropertyMap.hxx +++ b/ucb/source/ucp/webdav/PropertyMap.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: PropertyMap.hxx,v $ - * $Revision: 1.3 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx b/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx index 012bd85c92..f9a36d3113 100644 --- a/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx +++ b/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: UCBDeadPropertyValue.cxx,v $ - * $Revision: 1.19 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -89,12 +86,11 @@ const rtl::OUString UCBDeadPropertyValue::aXMLEnd extern "C" int UCBDeadPropertyValue_startelement_callback( void *, int parent, - const char *nspace, + const char * /*nspace*/, const char *name, const char ** ) { - if ( ( name != 0 ) && - ( ( nspace == 0 ) || ( strcmp( nspace, "" ) == 0 ) ) ) + if ( name != 0 ) { switch ( parent ) { @@ -187,7 +183,7 @@ static rtl::OUString encodeValue( const rtl::OUString & rValue ) // PROPPATCH: // - Encoded property value: x<z // - UCBDeadPropertyValue::toXML result: - // <ucbprop><type>string</type><value>x<z</value></ucbprop> + // <ucbprop><type>string</type><value>x<z</value></ucbprop> // PROPFIND: // - parser replaces < by > ==> error (not well formed) @@ -361,7 +357,7 @@ bool UCBDeadPropertyValue::supportsType( const uno::Type & rType ) ////////////////////////////////////////////////////////////////////////// // static bool UCBDeadPropertyValue::createFromXML( const rtl::OString & rInData, - uno::Any & rOutData ) + uno::Any & rOutData ) { bool success = false; @@ -450,7 +446,7 @@ bool UCBDeadPropertyValue::createFromXML( const rtl::OString & rInData, ////////////////////////////////////////////////////////////////////////// // static bool UCBDeadPropertyValue::toXML( const uno::Any & rInData, - rtl::OUString & rOutData ) + rtl::OUString & rOutData ) { // <ucbprop><type>the_type</type><value>the_value</value></ucbprop> @@ -466,7 +462,7 @@ bool UCBDeadPropertyValue::toXML( const uno::Any & rInData, rInData >>= aStringValue; aStringType = aTypeString; } - else if ( rType == getCppuType( static_cast< const sal_Int32 * >( 0 ) ) ) + else if ( rType == getCppuType( static_cast< const sal_Int32 * >( 0 ) ) ) { // long sal_Int32 nValue = 0; @@ -541,7 +537,7 @@ bool UCBDeadPropertyValue::toXML( const uno::Any & rInData, // Encode value! It must not contain XML reserved chars! aStringValue = encodeValue( aStringValue ); - rOutData = aXMLPre; + rOutData = aXMLPre; rOutData += aStringType; rOutData += aXMLMid; rOutData += aStringValue; diff --git a/ucb/source/ucp/webdav/UCBDeadPropertyValue.hxx b/ucb/source/ucp/webdav/UCBDeadPropertyValue.hxx index 77aa746587..b6a2bba2d4 100644 --- a/ucb/source/ucp/webdav/UCBDeadPropertyValue.hxx +++ b/ucb/source/ucp/webdav/UCBDeadPropertyValue.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: UCBDeadPropertyValue.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/makefile.mk b/ucb/source/ucp/webdav/makefile.mk index c8891723cd..551efb6f06 100644 --- a/ucb/source/ucp/webdav/makefile.mk +++ b/ucb/source/ucp/webdav/makefile.mk @@ -2,14 +2,10 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# Copyright 2008 by Sun Microsystems, Inc. +# Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # -# $RCSfile: makefile.mk,v $ -# -# $Revision: 1.43 $ -# # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify @@ -87,25 +83,26 @@ CFLAGS+= $(OPENSSL_CFLAGS) # --- General ----------------------------------------------------- SLOFILES=\ - $(SLO)$/webdavservices.obj \ - $(SLO)$/webdavprovider.obj \ - $(SLO)$/webdavcontent.obj \ - $(SLO)$/webdavcontentcaps.obj \ - $(SLO)$/webdavresultset.obj \ - $(SLO)$/webdavdatasupplier.obj \ - $(SLO)$/ContentProperties.obj \ - $(SLO)$/DAVProperties.obj \ - $(SLO)$/DAVSessionFactory.obj \ - $(SLO)$/DAVResourceAccess.obj \ - $(SLO)$/NeonUri.obj \ - $(SLO)$/NeonInputStream.obj \ - $(SLO)$/NeonPropFindRequest.obj \ - $(SLO)$/NeonHeadRequest.obj \ - $(SLO)$/NeonSession.obj \ - $(SLO)$/DateTimeHelper.obj \ - $(SLO)$/LinkSequence.obj \ - $(SLO)$/LockSequence.obj \ - $(SLO)$/LockEntrySequence.obj \ + $(SLO)$/webdavservices.obj \ + $(SLO)$/webdavprovider.obj \ + $(SLO)$/webdavcontent.obj \ + $(SLO)$/webdavcontentcaps.obj \ + $(SLO)$/webdavresultset.obj \ + $(SLO)$/webdavdatasupplier.obj \ + $(SLO)$/ContentProperties.obj \ + $(SLO)$/DAVProperties.obj \ + $(SLO)$/DAVSessionFactory.obj \ + $(SLO)$/DAVResourceAccess.obj \ + $(SLO)$/NeonUri.obj \ + $(SLO)$/NeonInputStream.obj \ + $(SLO)$/NeonPropFindRequest.obj \ + $(SLO)$/NeonHeadRequest.obj \ + $(SLO)$/NeonSession.obj \ + $(SLO)$/NeonLockStore.obj \ + $(SLO)$/DateTimeHelper.obj \ + $(SLO)$/LinkSequence.obj \ + $(SLO)$/LockSequence.obj \ + $(SLO)$/LockEntrySequence.obj \ $(SLO)$/UCBDeadPropertyValue.obj LIB1TARGET=$(SLB)$/_$(TARGET).lib @@ -119,17 +116,15 @@ SHL1IMPLIB=i$(TARGET) SHL1VERSIONMAP=exports.map SHL1STDLIBS=\ - $(CPPUHELPERLIB) \ - $(CPPULIB) \ - $(SALLIB) \ - $(SALHELPERLIB) \ - $(UCBHELPERLIB) \ - $(COMPHELPERLIB) \ - $(NEON3RDLIB) \ + $(CPPUHELPERLIB) \ + $(CPPULIB) \ + $(SALLIB) \ + $(SALHELPERLIB) \ + $(UCBHELPERLIB) \ + $(COMPHELPERLIB) \ + $(NEON3RDLIB) \ $(LIBXML2LIB) - - .IF "$(GUI)"=="WNT" SHL1STDLIBS+= $(WSOCK32LIB) .IF "$(WINDOWS_VISTA_PSDK)" != "" @@ -150,8 +145,6 @@ SHL1STDLIBS+= $(OPENSSLLIBST) .ENDIF .ENDIF # WNT - - SHL1DEF=$(MISC)$/$(SHL1TARGET).def SHL1LIBS=$(LIB1TARGET) @@ -165,4 +158,3 @@ DEF1NAME=$(SHL1TARGET) # --- Targets ---------------------------------------------------------- .INCLUDE: target.mk - diff --git a/ucb/source/ucp/webdav/webdavcontent.cxx b/ucb/source/ucp/webdav/webdavcontent.cxx index 9dd59c4441..c4aab34aa2 100644 --- a/ucb/source/ucp/webdav/webdavcontent.cxx +++ b/ucb/source/ucp/webdav/webdavcontent.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavcontent.cxx,v $ - * $Revision: 1.65.12.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -36,13 +33,16 @@ ************************************************************************** *************************************************************************/ -#include <osl/diagnose.h> +#include <osl/diagnose.h> #include "osl/doublecheckedlocking.h" #include <rtl/uri.hxx> #include <rtl/ustrbuf.hxx> -#include "com/sun/star/task/XPasswordContainer.hpp" -#include "com/sun/star/task/NoMasterException.hpp" +#include <ucbhelper/contentidentifier.hxx> +#include <ucbhelper/propertyvalueset.hxx> +#include <ucbhelper/simpleinteractionrequest.hxx> +#include <ucbhelper/cancelcommandexecution.hxx> + #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/PropertySetInfoChange.hpp> #include <com/sun/star/beans/PropertySetInfoChangeEvent.hpp> @@ -50,39 +50,37 @@ #include <com/sun/star/io/XActiveDataSink.hpp> #include <com/sun/star/io/XOutputStream.hpp> #include <com/sun/star/lang/IllegalAccessException.hpp> -#include "com/sun/star/ucb/AuthenticationRequest.hpp" +#include <com/sun/star/task/PasswordContainerInteractionHandler.hpp> +#include <com/sun/star/ucb/CommandEnvironment.hpp> #include <com/sun/star/ucb/CommandFailedException.hpp> #include <com/sun/star/ucb/ContentInfoAttribute.hpp> #include <com/sun/star/ucb/InsertCommandArgument.hpp> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVEBADTRANSFRERURLEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveBadTransferURLException.hpp> -#endif #include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp> +#include "com/sun/star/ucb/InteractiveLockingLockedException.hpp" +#include "com/sun/star/ucb/InteractiveLockingLockExpiredException.hpp" +#include "com/sun/star/ucb/InteractiveLockingNotLockedException.hpp" #include <com/sun/star/ucb/InteractiveNetworkConnectException.hpp> -#ifndef _COM_SUN_STAR_UCB_INTERACTIVENETWORKGENBERALEXCEPTION_HPP_ #include <com/sun/star/ucb/InteractiveNetworkGeneralException.hpp> -#endif #include <com/sun/star/ucb/InteractiveNetworkReadException.hpp> #include <com/sun/star/ucb/InteractiveNetworkResolveNameException.hpp> #include <com/sun/star/ucb/InteractiveNetworkWriteException.hpp> +#include <com/sun/star/ucb/MissingInputStreamException.hpp> +#include <com/sun/star/ucb/MissingPropertiesException.hpp> #include <com/sun/star/ucb/NameClash.hpp> #include <com/sun/star/ucb/NameClashException.hpp> #include <com/sun/star/ucb/OpenCommandArgument2.hpp> #include <com/sun/star/ucb/OpenMode.hpp> #include <com/sun/star/ucb/PostCommandArgument2.hpp> #include <com/sun/star/ucb/TransferInfo.hpp> -#include <com/sun/star/ucb/XCommandInfo.hpp> -#include <com/sun/star/ucb/XPersistentPropertySet.hpp> -#include <com/sun/star/ucb/MissingInputStreamException.hpp> -#include <com/sun/star/ucb/MissingPropertiesException.hpp> #include <com/sun/star/ucb/UnsupportedCommandException.hpp> #include <com/sun/star/ucb/UnsupportedDataSinkException.hpp> #include <com/sun/star/ucb/UnsupportedNameClashException.hpp> #include <com/sun/star/ucb/UnsupportedOpenModeException.hpp> -#include <ucbhelper/contentidentifier.hxx> -#include <ucbhelper/propertyvalueset.hxx> -#include <ucbhelper/simpleinteractionrequest.hxx> -#include <ucbhelper/cancelcommandexecution.hxx> +#include <com/sun/star/ucb/XCommandInfo.hpp> +#include <com/sun/star/ucb/XPersistentPropertySet.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> + #include "webdavcontent.hxx" #include "webdavprovider.hxx" #include "webdavresultset.hxx" @@ -96,250 +94,6 @@ using namespace webdav_ucp; //========================================================================= //========================================================================= // -// CommandEnvironment_Impl Implementation. -// -//========================================================================= -//========================================================================= - -class CommandEnvironment_Impl : public cppu::OWeakObject, - public ucb::XCommandEnvironment, - public task::XInteractionHandler -{ -public: - - CommandEnvironment_Impl( - const uno::Reference< lang::XMultiServiceFactory >& xSMgr ) - : m_xSMgr( xSMgr ) - { - } - - // XInterface - XINTERFACE_DECL() - - // XCommandEnvironment - virtual uno::Reference< task::XInteractionHandler > SAL_CALL - getInteractionHandler( ) - throw (uno::RuntimeException) - { - return this; - } - - virtual uno::Reference< ucb::XProgressHandler > SAL_CALL - getProgressHandler( ) - throw (uno::RuntimeException) - { - return 0; - } - - // XInteractionHandler - virtual void SAL_CALL - handle( const uno::Reference< task::XInteractionRequest >& Request ) - throw (uno::RuntimeException); - -private: - - void - handleAuthenticationRequest( - ucb::AuthenticationRequest const&, - uno::Sequence< uno::Reference< task::XInteractionContinuation > > const&) - SAL_THROW((uno::RuntimeException)) - { - } - - uno::Reference< lang::XMultiServiceFactory > m_xSMgr; -}; - -//========================================================================= -void SAL_CALL CommandEnvironment_Impl::acquire() - throw() -{ - OWeakObject::acquire(); -} - -//========================================================================= -void SAL_CALL CommandEnvironment_Impl::release() - throw() -{ - OWeakObject::release(); -} - -//========================================================================= -uno::Any SAL_CALL CommandEnvironment_Impl::queryInterface( - const uno::Type & rType ) - throw( uno::RuntimeException ) -{ - uno::Any aRet = cppu::queryInterface( - rType, - static_cast< ucb::XCommandEnvironment * >( this ), - static_cast< task::XInteractionHandler * >( this ) ); - return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ); -} - -//========================================================================= -void SAL_CALL CommandEnvironment_Impl::handle( - const uno::Reference< task::XInteractionRequest >& rIRequest ) - throw (uno::RuntimeException) -{ - if (!rIRequest.is()) - return; - - uno::Any aAnyRequest(rIRequest->getRequest()); - - ucb::AuthenticationRequest rRequest; - if (!(aAnyRequest >>= rRequest)) - return; - - uno::Sequence< uno::Reference< task::XInteractionContinuation > > - rContinuations = rIRequest->getContinuations(); - - // get continuations - uno::Reference< task::XInteractionRetry > xRetry; - uno::Reference< task::XInteractionAbort > xAbort; - uno::Reference< ucb::XInteractionSupplyAuthentication > - xSupplyAuthentication; - - for (sal_Int32 i = 0; i < rContinuations.getLength(); ++i) { - xRetry = uno::Reference< task::XInteractionRetry >( - rContinuations[i], uno::UNO_QUERY ); - if( xRetry.is() ) - continue; - - xAbort = uno::Reference< task::XInteractionAbort >( - rContinuations[i], uno::UNO_QUERY ); - if (xAbort.is()) - continue; - - xSupplyAuthentication - = uno::Reference< ucb::XInteractionSupplyAuthentication >( - rContinuations[i], uno::UNO_QUERY ); - if( xSupplyAuthentication.is() ) - continue; - } - - bool bRemember; - bool bRememberPersistent; - if (xSupplyAuthentication.is()) - { - ucb::RememberAuthentication eDefault; - uno::Sequence< ucb::RememberAuthentication > aModes( - xSupplyAuthentication->getRememberPasswordModes(eDefault)); - bRemember = eDefault != ucb::RememberAuthentication_NO; - bRememberPersistent = false; - for (sal_Int32 i = 0; i < aModes.getLength(); ++i) - if (aModes[i] == ucb::RememberAuthentication_PERSISTENT) - { - bRememberPersistent = true; - break; - } - } - else - { - bRemember = false; - bRememberPersistent = false; - } - - uno::Reference< task::XPasswordContainer > xContainer; - try - { - xContainer - = uno::Reference< task::XPasswordContainer >( - m_xSMgr->createInstance( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.task.PasswordContainer"))), - uno::UNO_QUERY); - } - catch (uno::Exception const &) - { - } - - // xContainer works with userName passwdSequences pairs: - if (xContainer.is() && rRequest.HasUserName && rRequest.HasPassword ) - { - try - { - if (rRequest.UserName.getLength() == 0) - { - task::UrlRecord - aRec(xContainer->find(rRequest.ServerName, this)); - if (aRec.UserList.getLength() != 0) - { - if (xSupplyAuthentication->canSetUserName()) - xSupplyAuthentication-> - setUserName(aRec.UserList[0].UserName.getStr()); - if (xSupplyAuthentication->canSetPassword()) - { - OSL_ENSURE(aRec.UserList[0].Passwords.getLength() != 0, - "empty password list"); - xSupplyAuthentication-> - setPassword(aRec.UserList[0].Passwords[0].getStr()); - } - if (aRec.UserList[0].Passwords.getLength() > 1) - { - if (rRequest.HasRealm) - { - if (xSupplyAuthentication->canSetRealm()) - xSupplyAuthentication-> - setRealm(aRec.UserList[0].Passwords[1]. - getStr()); - } - else if (xSupplyAuthentication->canSetAccount()) - xSupplyAuthentication-> - setAccount(aRec.UserList[0].Passwords[1]. - getStr()); - } - xSupplyAuthentication->select(); - return; - } - } - else - { - task::UrlRecord - aRec(xContainer->findForName(rRequest.ServerName, - rRequest.UserName, - this)); - if (aRec.UserList.getLength() != 0) - { - OSL_ENSURE(aRec.UserList[0].Passwords.getLength() != 0, - "empty password list"); - if (!rRequest.HasPassword - || rRequest.Password != aRec.UserList[0].Passwords[0]) - { - if (xSupplyAuthentication->canSetUserName()) - xSupplyAuthentication-> - setUserName(aRec.UserList[0].UserName.getStr()); - if (xSupplyAuthentication->canSetPassword()) - xSupplyAuthentication-> - setPassword(aRec.UserList[0].Passwords[0]. - getStr()); - if (aRec.UserList[0].Passwords.getLength() > 1) - { - if (rRequest.HasRealm) - { - if (xSupplyAuthentication->canSetRealm()) - xSupplyAuthentication-> - setRealm(aRec.UserList[0].Passwords[1]. - getStr()); - } - else if (xSupplyAuthentication->canSetAccount()) - xSupplyAuthentication-> - setAccount(aRec.UserList[0].Passwords[1]. - getStr()); - } - xSupplyAuthentication->select(); - return; - } - } - } - } - catch (task::NoMasterException const &) - {} // user did not enter master password - } - return; -} - -//========================================================================= -//========================================================================= -// // Content Implementation. // //========================================================================= @@ -363,8 +117,8 @@ Content::Content( try { m_xResAccess.reset( new DAVResourceAccess( - rxSMgr, - rSessionFactory, + rxSMgr, + rSessionFactory, Identifier->getContentIdentifier() ) ); NeonUri aURI( Identifier->getContentIdentifier() ); @@ -439,16 +193,35 @@ uno::Any SAL_CALL Content::queryInterface( const uno::Type & rType ) { // Note: isFolder may require network activities! So call it only // if it is really necessary!!! - uno::Any aRet = cppu::queryInterface( + uno::Any aRet = cppu::queryInterface( rType, static_cast< ucb::XContentCreator * >( this ) ); if ( aRet.hasValue() ) { try { - return isFolder( new CommandEnvironment_Impl(m_xSMgr) ) - ? aRet - : uno::Any(); + uno::Reference< beans::XPropertySet > const xProps( + m_xSMgr, uno::UNO_QUERY_THROW ); + uno::Reference< uno::XComponentContext > xCtx; + xCtx.set( xProps->getPropertyValue( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ), + uno::UNO_QUERY_THROW ); + + uno::Reference< task::XInteractionHandler > xIH( + task::PasswordContainerInteractionHandler::create( xCtx ) ); + + // Supply a command env to isFolder() that contains an interaction + // handler that uses the password container service to obtain + // credentials without displaying a password gui. + + uno::Reference< ucb::XCommandEnvironment > xCmdEnv( + ucb::CommandEnvironment::create( + xCtx, + xIH, + uno::Reference< ucb::XProgressHandler >() ) ); + + return isFolder( xCmdEnv ) ? aRet : uno::Any(); } catch ( uno::RuntimeException const & ) { @@ -630,17 +403,22 @@ uno::Any SAL_CALL Content::execute( ucb::CommandAbortedException, uno::RuntimeException ) { + OSL_TRACE( ">>>>> Content::execute: start: command: %s, env: %s", + rtl::OUStringToOString( aCommand.Name, + RTL_TEXTENCODING_UTF8 ).getStr(), + Environment.is() ? "present" : "missing" ); + uno::Any aRet; - + if ( aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "getPropertyValues" ) ) ) { - ////////////////////////////////////////////////////////////////// - // getPropertyValues - ////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////// + // getPropertyValues + ////////////////////////////////////////////////////////////////// uno::Sequence< beans::Property > Properties; - if ( !( aCommand.Argument >>= Properties ) ) + if ( !( aCommand.Argument >>= Properties ) ) { ucbhelper::cancelCommandExecution( uno::makeAny( lang::IllegalArgumentException( @@ -652,17 +430,17 @@ uno::Any SAL_CALL Content::execute( // Unreachable } - aRet <<= getPropertyValues( Properties, Environment ); + aRet <<= getPropertyValues( Properties, Environment ); } else if ( aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "setPropertyValues" ) ) ) { - ////////////////////////////////////////////////////////////////// - // setPropertyValues - ////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////// + // setPropertyValues + ////////////////////////////////////////////////////////////////// uno::Sequence< beans::PropertyValue > aProperties; - if ( !( aCommand.Argument >>= aProperties ) ) + if ( !( aCommand.Argument >>= aProperties ) ) { ucbhelper::cancelCommandExecution( uno::makeAny( lang::IllegalArgumentException( @@ -674,7 +452,7 @@ uno::Any SAL_CALL Content::execute( // Unreachable } - if ( !aProperties.getLength() ) + if ( !aProperties.getLength() ) { ucbhelper::cancelCommandExecution( uno::makeAny( lang::IllegalArgumentException( @@ -713,8 +491,8 @@ uno::Any SAL_CALL Content::execute( RTL_CONSTASCII_STRINGPARAM( "open" ) ) ) { ////////////////////////////////////////////////////////////////// - // open - ////////////////////////////////////////////////////////////////// + // open + ////////////////////////////////////////////////////////////////// ucb::OpenCommandArgument2 aOpenCommand; if ( !( aCommand.Argument >>= aOpenCommand ) ) @@ -735,11 +513,11 @@ uno::Any SAL_CALL Content::execute( RTL_CONSTASCII_STRINGPARAM( "insert" ) ) ) { ////////////////////////////////////////////////////////////////// - // insert - ////////////////////////////////////////////////////////////////// + // insert + ////////////////////////////////////////////////////////////////// ucb::InsertCommandArgument arg; - if ( !( aCommand.Argument >>= arg ) ) + if ( !( aCommand.Argument >>= arg ) ) { ucbhelper::cancelCommandExecution( uno::makeAny( lang::IllegalArgumentException( @@ -751,23 +529,23 @@ uno::Any SAL_CALL Content::execute( // Unreachable } - insert( arg.Data, arg.ReplaceExisting, Environment ); + insert( arg.Data, arg.ReplaceExisting, Environment ); } else if ( aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "delete" ) ) ) { - ////////////////////////////////////////////////////////////////// - // delete - ////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////// + // delete + ////////////////////////////////////////////////////////////////// - sal_Bool bDeletePhysical = sal_False; - aCommand.Argument >>= bDeletePhysical; + sal_Bool bDeletePhysical = sal_False; + aCommand.Argument >>= bDeletePhysical; -// KSO: Ignore parameter and destroy the content, if you don't support +// KSO: Ignore parameter and destroy the content, if you don't support // putting objects into trashcan. ( Since we do not have a trash can // service yet (src603), you actually have no other choice. ) // if ( bDeletePhysical ) -// { +// { try { std::auto_ptr< DAVResourceAccess > xResAccess; @@ -815,7 +593,7 @@ uno::Any SAL_CALL Content::execute( Environment ); // Unreachable } - + transfer( transferArgs, Environment ); } else if ( aCommand.Name.equalsAsciiL( @@ -823,8 +601,8 @@ uno::Any SAL_CALL Content::execute( { ////////////////////////////////////////////////////////////////// // post - ////////////////////////////////////////////////////////////////// - + ////////////////////////////////////////////////////////////////// + ucb::PostCommandArgument2 aArg; if ( !( aCommand.Argument >>= aArg ) ) { @@ -840,20 +618,67 @@ uno::Any SAL_CALL Content::execute( post( aArg, Environment ); } + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "lock" ) ) && + supportsExclusiveWriteLock( Environment ) ) + { + ////////////////////////////////////////////////////////////////// + // lock + ////////////////////////////////////////////////////////////////// + + lock( Environment ); + } + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "unlock" ) ) && + supportsExclusiveWriteLock( Environment ) ) + { + ////////////////////////////////////////////////////////////////// + // unlock + ////////////////////////////////////////////////////////////////// + + unlock( Environment ); + } + else if ( aCommand.Name.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "createNewContent" ) ) && + isFolder( Environment ) ) + { + ////////////////////////////////////////////////////////////////// + // createNewContent + ////////////////////////////////////////////////////////////////// + + ucb::ContentInfo aArg; + if ( !( aCommand.Argument >>= aArg ) ) + { + ucbhelper::cancelCommandExecution( + uno::makeAny( lang::IllegalArgumentException( + rtl::OUString::createFromAscii( + "Wrong argument type!" ), + static_cast< cppu::OWeakObject * >( this ), + -1 ) ), + Environment ); + // Unreachable + } + + aRet = uno::makeAny( createNewContent( aArg ) ); + } else { - ////////////////////////////////////////////////////////////////// - // Unsupported command - ////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////// + // Unsupported command + ////////////////////////////////////////////////////////////////// ucbhelper::cancelCommandExecution( uno::makeAny( ucb::UnsupportedCommandException( - rtl::OUString(), - static_cast< cppu::OWeakObject * >( this ) ) ), + aCommand.Name, + static_cast< cppu::OWeakObject * >( this ) ) ), Environment ); // Unreachable } + OSL_TRACE( "<<<<< Content::execute: end: command: %s", + rtl::OUStringToOString( aCommand.Name, + RTL_TEXTENCODING_UTF8 ).getStr() ); + return aRet; } @@ -863,19 +688,22 @@ void SAL_CALL Content::abort( sal_Int32 /*CommandId*/ ) throw( uno::RuntimeException ) { try + { + std::auto_ptr< DAVResourceAccess > xResAccess; { - std::auto_ptr< DAVResourceAccess > xResAccess; - { - osl::MutexGuard aGuard( m_aMutex ); - xResAccess.reset( - new DAVResourceAccess( *m_xResAccess.get() ) ); - } - xResAccess->ABORT(); + osl::MutexGuard aGuard( m_aMutex ); + xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); } - catch ( DAVException const & /*e*/ ) + xResAccess->abort(); { - // ABORT command failed! + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); } + } + catch ( DAVException const & ) + { + // abort failed! + } } //========================================================================= @@ -893,8 +721,8 @@ void SAL_CALL Content::addProperty( const rtl::OUString& Name, lang::IllegalArgumentException, uno::RuntimeException ) { -// if ( m_bTransient ) -// @@@ ??? +// if ( m_bTransient ) +// @@@ ??? if ( !Name.getLength() ) throw lang::IllegalArgumentException(); @@ -902,8 +730,8 @@ void SAL_CALL Content::addProperty( const rtl::OUString& Name, // Check property type. if ( !UCBDeadPropertyValue::supportsType( DefaultValue.getValueType() ) ) { - OSL_ENSURE( sal_False, "Content::addProperty - " - "Unsupported property type!" ); + OSL_ENSURE( sal_False, + "Content::addProperty - Unsupported property type!" ); throw beans::IllegalTypeException(); } @@ -950,10 +778,10 @@ void SAL_CALL Content::addProperty( const rtl::OUString& Name, // Notify propertyset info change listeners. beans::PropertySetInfoChangeEvent evt( - static_cast< cppu::OWeakObject * >( this ), - Name, - -1, // No handle available - beans::PropertySetInfoChange::PROPERTY_INSERTED ); + static_cast< cppu::OWeakObject * >( this ), + Name, + -1, // No handle available + beans::PropertySetInfoChange::PROPERTY_INSERTED ); notifyPropertySetInfoChange( evt ); } catch ( DAVException const & e ) @@ -961,9 +789,9 @@ void SAL_CALL Content::addProperty( const rtl::OUString& Name, if ( e.getStatus() == SC_FORBIDDEN ) { // Support for setting arbitrary dead properties is optional! - + // Store property locally. - ContentImplHelper::addProperty( + ContentImplHelper::addProperty( Name, Attributes, DefaultValue ); } else @@ -978,7 +806,7 @@ void SAL_CALL Content::addProperty( const rtl::OUString& Name, case UNKNOWN: case DAV: throw lang::IllegalArgumentException(); - + case FTP: case NON_DAV: // Store property locally. @@ -1029,7 +857,7 @@ void SAL_CALL Content::removeProperty( const rtl::OUString& Name ) { beans::Property aProp = getPropertySetInfo( xEnv, sal_False /* don't cache data */ ) - ->getPropertyByName( Name ); + ->getPropertyByName( Name ); if ( !( aProp.Attributes & beans::PropertyAttribute::REMOVEABLE ) ) { @@ -1039,7 +867,7 @@ void SAL_CALL Content::removeProperty( const rtl::OUString& Name ) } catch ( beans::UnknownPropertyException const & ) { -// OSL_ENSURE( sal_False, "removeProperty - Unknown property!" ); + //OSL_ENSURE( sal_False, "removeProperty - Unknown property!" ); throw; } #endif @@ -1053,7 +881,7 @@ void SAL_CALL Content::removeProperty( const rtl::OUString& Name ) std::vector< ProppatchValue > aProppatchValues; ProppatchValue aValue( PROPREMOVE, Name, uno::Any() ); aProppatchValues.push_back( aValue ); - + // Remove property value from server. std::auto_ptr< DAVResourceAccess > xResAccess; { @@ -1079,7 +907,7 @@ void SAL_CALL Content::removeProperty( const rtl::OUString& Name ) if ( e.getStatus() == SC_FORBIDDEN ) { // Support for setting arbitrary dead properties is optional! - + // Try to remove property from local store. ContentImplHelper::removeProperty( Name ); } @@ -1139,9 +967,9 @@ Content::queryCreatableContentsInfo() throw( uno::RuntimeException ) { osl::Guard< osl::Mutex > aGuard( m_aMutex ); - + uno::Sequence< ucb::ContentInfo > aSeq( 2 ); - + // document. aSeq.getArray()[ 0 ].Type = rtl::OUString::createFromAscii( WEBDAV_CONTENT_TYPE ); @@ -1270,7 +1098,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( const rtl::Reference< ::ucbhelper::ContentProviderImplHelper >& rProvider, const rtl::OUString& rContentId ) { - // Note: Empty sequence means "get values of all supported properties". + // Note: Empty sequence means "get values of all supported properties". rtl::Reference< ::ucbhelper::PropertyValueSet > xRow = new ::ucbhelper::PropertyValueSet( rSMgr ); @@ -1279,10 +1107,10 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( if ( nCount ) { uno::Reference< beans::XPropertySet > xAdditionalPropSet; - sal_Bool bTriedToGetAdditonalPropSet = sal_False; + sal_Bool bTriedToGetAdditonalPropSet = sal_False; const beans::Property* pProps = rProperties.getConstArray(); - for ( sal_Int32 n = 0; n < nCount; ++n ) + for ( sal_Int32 n = 0; n < nCount; ++n ) { const beans::Property& rProp = pProps[ n ]; @@ -1338,9 +1166,9 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( // Append all local Additional Properties. uno::Reference< beans::XPropertySet > xSet( - rProvider->getAdditionalPropertySet( rContentId, sal_False ), - uno::UNO_QUERY ); - xRow->appendPropertySet( xSet ); + rProvider->getAdditionalPropertySet( rContentId, sal_False ), + uno::UNO_QUERY ); + xRow->appendPropertySet( xSet ); } return uno::Reference< sdbc::XRow >( xRow.get() ); @@ -1357,8 +1185,8 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( std::auto_ptr< DAVResourceAccess > xResAccess; rtl::OUString aEscapedTitle; bool bHasAll = false; - uno::Reference< lang::XMultiServiceFactory > xSMgr; - uno::Reference< ucb::XContentIdentifier > xIdentifier; + uno::Reference< lang::XMultiServiceFactory > xSMgr; + uno::Reference< ucb::XContentIdentifier > xIdentifier; rtl::Reference< ::ucbhelper::ContentProviderImplHelper > xProvider; { @@ -1400,68 +1228,73 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( if ( DAV == rType ) { - // cache lookup... getResourceType may fill the props cache via PROPFIND! + // cache lookup... getResourceType may fill the props cache via + // PROPFIND! if ( m_xCachedProps.get() ) { - xCachedProps.reset( new ContentProperties( *m_xCachedProps.get() ) ); - + xCachedProps.reset( + new ContentProperties( *m_xCachedProps.get() ) ); + std::vector< rtl::OUString > aMissingProps; - if ( xCachedProps->containsAllNames( rProperties, aMissingProps ) ) + if ( xCachedProps->containsAllNames( + rProperties, aMissingProps ) ) { - // All properties are already in cache! No server access needed. + // All properties are already in cache! No server access + // needed. bHasAll = true; } - + // use the cached ContentProperties instance xProps.reset( new ContentProperties( *xCachedProps.get() ) ); } - + if ( !bHasAll ) { // Only DAV resources support PROPFIND std::vector< rtl::OUString > aPropNames; - - uno::Sequence< beans::Property > aProperties( rProperties.getLength() ); + + uno::Sequence< beans::Property > aProperties( + rProperties.getLength() ); if ( m_aFailedPropNames.size() > 0 ) - { + { sal_Int32 nProps = 0; sal_Int32 nCount = rProperties.getLength(); for ( sal_Int32 n = 0; n < nCount; ++n ) { const rtl::OUString & rName = rProperties[ n ].Name; - + std::vector< rtl::OUString >::const_iterator it = m_aFailedPropNames.begin(); std::vector< rtl::OUString >::const_iterator end = m_aFailedPropNames.end(); - + while ( it != end ) { if ( *it == rName ) break; - + ++it; } - + if ( it == end ) { aProperties[ nProps ] = rProperties[ n ]; nProps++; } } - + aProperties.realloc( nProps ); } else { aProperties = rProperties; } - + if ( aProperties.getLength() > 0 ) - ContentProperties::UCBNamesToDAVNames( + ContentProperties::UCBNamesToDAVNames( aProperties, aPropNames ); - + if ( aPropNames.size() > 0 ) { std::vector< DAVResource > resources; @@ -1469,22 +1302,23 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( { xResAccess->PROPFIND( DAVZERO, aPropNames, resources, xEnv ); - + if ( 1 == resources.size() ) { if ( xProps.get()) - xProps->addProperties( - aPropNames, ContentProperties( resources[ 0 ] )); + xProps->addProperties( + aPropNames, + ContentProperties( resources[ 0 ] )); else - xProps.reset( + xProps.reset( new ContentProperties( resources[ 0 ] ) ); } } catch ( DAVException const & e ) { bNetworkAccessAllowed - = shouldAccessNetworkAfterException( e ); - + = shouldAccessNetworkAfterException( e ); + if ( !bNetworkAccessAllowed ) { cancelCommandExecution( e, xEnv ); @@ -1501,7 +1335,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( std::vector< rtl::OUString > aMissingProps; if ( !( xProps.get() && xProps->containsAllNames( - rProperties, aMissingProps ) ) + rProperties, aMissingProps ) ) && !m_bDidGetOrHead ) { // Possibly the missing props can be obtained using a HEAD @@ -1520,19 +1354,19 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( DAVResource resource; xResAccess->HEAD( aHeaderNames, resource, xEnv ); m_bDidGetOrHead = true; - + if ( xProps.get() ) xProps->addProperties( - aMissingProps, - ContentProperties( resource ) ); + aMissingProps, + ContentProperties( resource ) ); else xProps.reset ( new ContentProperties( resource ) ); if ( m_eResourceType == NON_DAV ) xProps->addProperties( aMissingProps, ContentProperties( - aEscapedTitle, - false ) ); + aEscapedTitle, + false ) ); } catch ( DAVException const & e ) { @@ -1548,15 +1382,15 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( } } } + // might trigger HTTP redirect. - // Therefore, title must be upadated here. + // Therefore, title must be updated here. NeonUri aUri( xResAccess->getURL() ); aEscapedTitle = aUri.GetPathBaseName(); if ( UNKNOWN == rType ) { - xProps.reset( - new ContentProperties( aEscapedTitle ) ); + xProps.reset( new ContentProperties( aEscapedTitle ) ); } // For DAV resources we only know the Title, for non-DAV @@ -1565,32 +1399,30 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( { //xProps.reset( // new ContentProperties( aEscapedTitle ) ); - xProps->addProperty( rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "Title" )), - uno::makeAny( aEscapedTitle), true); + xProps->addProperty( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ), + uno::makeAny( aEscapedTitle ), + true ); } else { if ( !xProps.get() ) - xProps.reset( - new ContentProperties( aEscapedTitle, false ) ); + xProps.reset( new ContentProperties( aEscapedTitle, false ) ); else - xProps->addProperty( rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "Title" )), - uno::makeAny( aEscapedTitle), true); + xProps->addProperty( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ), + uno::makeAny( aEscapedTitle ), + true ); - xProps->addProperty( rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "IsFolder" )), - uno::makeAny( false), true); - xProps->addProperty( rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "IsDocument" )), - uno::makeAny( true), true); - - } + xProps->addProperty( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ), + uno::makeAny( false ), + true ); + xProps->addProperty( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsDocument" ) ), + uno::makeAny( true ), + true ); + } } else { @@ -1601,18 +1433,37 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( m_bCollection ) ); } - // Add BaseURI property, if requested. - if ( !xProps->contains( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BaseURI" ) ) ) ) + sal_Int32 nCount = rProperties.getLength(); + for ( sal_Int32 n = 0; n < nCount; ++n ) { - xProps->addProperty( rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "BaseURI" ) ), - uno::makeAny( - getBaseURI( xResAccess ) ), - true ); + const rtl::OUString rName = rProperties[ n ].Name; + if ( rName.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "BaseURI" ) ) ) + { + // Add BaseURI property, if requested. + xProps->addProperty( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BaseURI" ) ), + uno::makeAny( getBaseURI( xResAccess ) ), + true ); + } + else if ( rName.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + // Add CreatableContentsInfo property, if requested. + sal_Bool bFolder = sal_False; + xProps->getValue( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ) ) + >>= bFolder; + xProps->addProperty( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "CreatableContentsInfo" ) ), + uno::makeAny( bFolder + ? queryCreatableContentsInfo() + : uno::Sequence< ucb::ContentInfo >() ), + true ); + } } - + uno::Reference< sdbc::XRow > xResultRow = getPropertyValues( xSMgr, rProperties, @@ -1622,12 +1473,12 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( { osl::Guard< osl::Mutex > aGuard( m_aMutex ); - + if ( !m_xCachedProps.get() ) m_xCachedProps.reset( new ContentProperties( *xProps.get() ) ); else m_xCachedProps->addProperties( *xProps.get() ); - + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); m_aEscapedTitle = aEscapedTitle; } @@ -1663,10 +1514,10 @@ uno::Sequence< uno::Any > Content::setPropertyValues( beans::PropertyChangeEvent aEvent; aEvent.Source = static_cast< cppu::OWeakObject * >( this ); - aEvent.Further = sal_False; + aEvent.Further = sal_False; // aEvent.PropertyName = aEvent.PropertyHandle = -1; - // aEvent.OldValue = + // aEvent.OldValue = // aEvent.NewValue = std::vector< ProppatchValue > aProppatchValues; @@ -1724,7 +1575,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( static_cast< cppu::OWeakObject * >( this ) ); } else if ( rName.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM( "IsFolder" ) ) ) + RTL_CONSTASCII_STRINGPARAM( "IsFolder" ) ) ) { // Read-only property! aRet[ n ] <<= lang::IllegalAccessException( @@ -1740,17 +1591,17 @@ uno::Sequence< uno::Any > Content::setPropertyValues( // No empty titles! if ( aNewValue.getLength() > 0 ) { - try + try { NeonUri aURI( xIdentifier->getContentIdentifier() ); aOldTitle = aURI.GetPathBaseNameUnescaped(); - + if ( aNewValue != aOldTitle ) { // modified title -> modified URL -> exchange ! if ( !bTransient ) bExchange = sal_True; - + // new value will be set later... aNewTitle = aNewValue; @@ -1843,6 +1694,15 @@ uno::Sequence< uno::Any > Content::setPropertyValues( "Property is read-only!" ), static_cast< cppu::OWeakObject * >( this ) ); } + if ( rName.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) ) + { + // Read-only property! + aRet[ n ] <<= lang::IllegalAccessException( + rtl::OUString::createFromAscii( + "Property is read-only!" ), + static_cast< cppu::OWeakObject * >( this ) ); + } else { if ( getResourceType( xEnv, xResAccess ) == DAV ) @@ -1920,7 +1780,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( { // Set property values at server. xResAccess->PROPPATCH( aProppatchValues, xEnv ); - + std::vector< ProppatchValue >::const_iterator it = aProppatchValues.begin(); std::vector< ProppatchValue >::const_iterator end @@ -1931,7 +1791,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.PropertyName = (*it).name; aEvent.OldValue = uno::Any(); // @@@ to expensive to obtain! aEvent.NewValue = (*it).value; - + aChanges.getArray()[ nChanged ] = aEvent; nChanged++; @@ -1953,7 +1813,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( = aProppatchPropsPositions.begin(); std::vector< sal_Int32 >::const_iterator end = aProppatchPropsPositions.end(); - + while ( it != end ) { // Set error. @@ -1989,28 +1849,28 @@ uno::Sequence< uno::Any > Content::setPropertyValues( // @@@ Should check for resources that could not be moved // (due to source access or target overwrite) and send // this information through the interaction handler. - + // @@@ Existing content should be checked to see if it needs // to be deleted at the source - + // @@@ Existing content should be checked to see if it has // been overwritten at the target - + if ( exchangeIdentity( xNewId ) ) { xResAccess->setURL( aNewURL ); - + // DAV resources store all additional props on server! -// // Adapt Additional Core Properties. -// renameAdditionalPropertySet( xOldId->getContentIdentifier(), -// xNewId->getContentIdentifier(), -// sal_True ); +// // Adapt Additional Core Properties. +// renameAdditionalPropertySet( xOldId->getContentIdentifier(), +// xNewId->getContentIdentifier(), +// sal_True ); } else { // Do not set new title! aNewTitle = rtl::OUString(); - + // Set error . aRet[ nTitlePos ] <<= uno::Exception( rtl::OUString::createFromAscii( "Exchange failed!" ), @@ -2026,7 +1886,7 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aRet[ nTitlePos ] <<= MapDAVException( e, sal_True ); } } - + if ( aNewTitle.getLength() ) { osl::Guard< osl::Mutex > aGuard( m_aMutex ); @@ -2035,16 +1895,16 @@ uno::Sequence< uno::Any > Content::setPropertyValues( aEvent.OldValue = uno::makeAny( aOldTitle ); aEvent.NewValue = uno::makeAny( aNewTitle ); - m_aEscapedTitle = NeonUri::escapeSegment( aNewTitle ); - + m_aEscapedTitle = NeonUri::escapeSegment( aNewTitle ); + aChanges.getArray()[ nChanged ] = aEvent; nChanged++; } if ( nChanged > 0 ) { - aChanges.realloc( nChanged ); - notifyPropertiesChange( aChanges ); + aChanges.realloc( nChanged ); + notifyPropertiesChange( aChanges ); } { @@ -2144,17 +2004,18 @@ uno::Any Content::open( xResAccess->GET( xOut, aHeaders, aResource, xEnv ); m_bDidGetOrHead = true; - + { osl::MutexGuard aGuard( m_aMutex ); // cache headers. if ( !m_xCachedProps.get()) - m_xCachedProps.reset( new ContentProperties( aResource ) ); + m_xCachedProps.reset( + new ContentProperties( aResource ) ); else m_xCachedProps->addProperties( aResource ); - m_xResAccess.reset( + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); } } @@ -2178,7 +2039,7 @@ uno::Any Content::open( { osl::MutexGuard aGuard( m_aMutex ); - xResAccess.reset( + xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); } @@ -2189,17 +2050,19 @@ uno::Any Content::open( uno::Reference< io::XInputStream > xIn = xResAccess->GET( aHeaders, aResource, xEnv ); m_bDidGetOrHead = true; - + { osl::MutexGuard aGuard( m_aMutex ); - + // cache headers. if ( !m_xCachedProps.get()) - m_xCachedProps.reset( new ContentProperties( aResource ) ); + m_xCachedProps.reset( + new ContentProperties( aResource ) ); else - m_xCachedProps->addProperties( aResource.properties ); - - m_xResAccess.reset( + m_xCachedProps->addProperties( + aResource.properties ); + + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); } @@ -2245,7 +2108,7 @@ void Content::post( std::auto_ptr< DAVResourceAccess > xResAccess; { osl::MutexGuard aGuard( m_aMutex ); - xResAccess.reset( + xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); } @@ -2254,10 +2117,10 @@ void Content::post( rArg.Referer, rArg.Source, xEnv ); - + { osl::MutexGuard aGuard( m_aMutex ); - m_xResAccess.reset( + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); } @@ -2279,7 +2142,7 @@ void Content::post( std::auto_ptr< DAVResourceAccess > xResAccess; { osl::MutexGuard aGuard( m_aMutex ); - xResAccess.reset( + xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); } @@ -2291,7 +2154,7 @@ void Content::post( { osl::MutexGuard aGuard( m_aMutex ); - m_xResAccess.reset( + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); } } @@ -2327,7 +2190,7 @@ void Content::queryChildren( ContentRefList& rChildren ) rtl::OUString aURL = m_xIdentifier->getContentIdentifier(); sal_Int32 nURLPos = aURL.lastIndexOf( '/' ); - + if ( nURLPos != ( aURL.getLength() - 1 ) ) { // No trailing slash found. Append. @@ -2335,7 +2198,7 @@ void Content::queryChildren( ContentRefList& rChildren ) } sal_Int32 nLen = aURL.getLength(); - + ::ucbhelper::ContentRefList::const_iterator it = aAllContents.begin(); ::ucbhelper::ContentRefList::const_iterator end = aAllContents.end(); @@ -2344,14 +2207,14 @@ void Content::queryChildren( ContentRefList& rChildren ) ::ucbhelper::ContentImplHelperRef xChild = (*it); rtl::OUString aChildURL = xChild->getIdentifier()->getContentIdentifier(); - + // Is aURL a prefix of aChildURL? if ( ( aChildURL.getLength() > nLen ) && ( aChildURL.compareTo( aURL, nLen ) == 0 ) ) { sal_Int32 nPos = nLen; nPos = aChildURL.indexOf( '/', nPos ); - + if ( ( nPos == -1 ) || ( nPos == ( aChildURL.getLength() - 1 ) ) ) { @@ -2407,17 +2270,17 @@ void Content::insert( { /* [RFC 2616] - HTTP - The PUT method requests that the enclosed entity be stored under the - supplied Request-URI. If the Request-URI refers to an already - existing resource, the enclosed entity SHOULD be considered as a - modified version of the one residing on the origin server. + The PUT method requests that the enclosed entity be stored under the + supplied Request-URI. If the Request-URI refers to an already + existing resource, the enclosed entity SHOULD be considered as a + modified version of the one residing on the origin server. */ /* [RFC 2518] - WebDAV - MKCOL creates a new collection resource at the location specified by - the Request-URI. If the resource identified by the Request-URI is - non-null then the MKCOL MUST fail. + MKCOL creates a new collection resource at the location specified by + the Request-URI. If the resource identified by the Request-URI is + non-null then the MKCOL MUST fail. */ // ==> Complain on PUT, continue on MKCOL. @@ -2493,13 +2356,13 @@ void Content::insert( rtl::OUString aURL = getParentURL(); if ( aURL.lastIndexOf( '/' ) != ( aURL.getLength() - 1 ) ) aURL += rtl::OUString::createFromAscii( "/" ); - + aURL += aEscapedTitle; - + try { xResAccess->setURL( aURL ); - + if ( bCollection ) xResAccess->MKCOL( Environment ); else @@ -2527,16 +2390,16 @@ void Content::insert( cancelCommandExecution( e, Environment, sal_True ); // Unreachable } - + // Insert (recursion!). insert( xInputStream, bReplaceExisting, Environment ); { osl::Guard< osl::Mutex > aGuard( m_aMutex ); - m_xResAccess.reset( + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); } - + // Success! return; } @@ -2564,19 +2427,19 @@ void Content::insert( } } } - + cancelCommandExecution( except, Environment, sal_True ); // Unreachable } - + { osl::Guard< osl::Mutex > aGuard( m_aMutex ); - m_xIdentifier + m_xIdentifier = new ::ucbhelper::ContentIdentifier( m_xSMgr, aURL ); } - + inserted(); - + { osl::Guard< osl::Mutex > aGuard( m_aMutex ); m_bTransient = sal_False; @@ -2594,7 +2457,7 @@ void Content::insert( Environment ); // Unreachable } - + try { xResAccess->PUT( xInputStream, Environment ); @@ -2686,7 +2549,7 @@ void Content::transfer( RTL_CONSTASCII_STRINGPARAM( DAV_URL_SCHEME ) ) ) targetURI.SetScheme( rtl::OUString::createFromAscii( HTTP_URL_SCHEME ) ); - + // @@@ This implementation of 'transfer' only works // if the source and target are located at same host. // (Neon does not support cross-server copy/move) @@ -2868,14 +2731,14 @@ void Content::destroy( sal_Bool bDeletePhysical ) uno::Reference< ucb::XContent > xThis = this; deleted(); - + osl::Guard< osl::Mutex > aGuard( m_aMutex ); - + // Process instanciated children... ::webdav_ucp::Content::ContentRefList aChildren; queryChildren( aChildren ); - + ContentRefList::const_iterator it = aChildren.begin(); ContentRefList::const_iterator end = aChildren.end(); @@ -2887,12 +2750,105 @@ void Content::destroy( sal_Bool bDeletePhysical ) } //========================================================================= +bool Content::supportsExclusiveWriteLock( + const uno::Reference< ucb::XCommandEnvironment >& Environment ) +{ + if ( getResourceType( Environment ) == DAV ) + { + if ( m_xCachedProps.get() ) + { + uno::Sequence< ucb::LockEntry > aSupportedLocks; + if ( m_xCachedProps->getValue( DAVProperties::SUPPORTEDLOCK ) + >>= aSupportedLocks ) + { + for ( sal_Int32 n = 0; n < aSupportedLocks.getLength(); ++n ) + { + if ( aSupportedLocks[ n ].Scope + == ucb::LockScope_EXCLUSIVE && + aSupportedLocks[ n ].Type + == ucb::LockType_WRITE ) + return true; + } + } + } + } + return false; +} + +//========================================================================= +void Content::lock( + const uno::Reference< ucb::XCommandEnvironment >& Environment ) + throw( uno::Exception ) +{ + try + { + std::auto_ptr< DAVResourceAccess > xResAccess; + { + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); + } + + uno::Any aOwnerAny; + aOwnerAny + <<= rtl::OUString::createFromAscii( "http://ucb.openoffice.org" ); + + ucb::Lock aLock( + ucb::LockScope_EXCLUSIVE, + ucb::LockType_WRITE, + ucb::LockDepth_ZERO, + aOwnerAny, + 180, // lock timeout in secs + //-1, // infinite lock + uno::Sequence< ::rtl::OUString >() ); + + xResAccess->LOCK( aLock, Environment ); + + { + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); + } + } + catch ( DAVException const & e ) + { + cancelCommandExecution( e, Environment, sal_False ); + // Unreachable + } +} + +//========================================================================= +void Content::unlock( + const uno::Reference< ucb::XCommandEnvironment >& Environment ) + throw( uno::Exception ) +{ + try + { + std::auto_ptr< DAVResourceAccess > xResAccess; + { + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); + } + + xResAccess->UNLOCK( Environment ); + + { + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + m_xResAccess.reset( new DAVResourceAccess( *xResAccess.get() ) ); + } + } + catch ( DAVException const & e ) + { + cancelCommandExecution( e, Environment, sal_False ); + // Unreachable + } +} + +//========================================================================= sal_Bool Content::exchangeIdentity( const uno::Reference< ucb::XContentIdentifier >& xNewId ) { if ( !xNewId.is() ) return sal_False; - + osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); uno::Reference< ucb::XContent > xThis = this; @@ -2907,7 +2863,7 @@ sal_Bool Content::exchangeIdentity( // Exchange own identitity. // Fail, if a content with given id already exists. -// if ( !hasData( xNewId ) ) +// if ( !hasData( xNewId ) ) { rtl::OUString aOldURL = m_xIdentifier->getContentIdentifier(); @@ -2915,10 +2871,10 @@ sal_Bool Content::exchangeIdentity( if ( exchange( xNewId ) ) { // Process instanciated children... - + ContentRefList aChildren; queryChildren( aChildren ); - + ContentRefList::const_iterator it = aChildren.begin(); ContentRefList::const_iterator end = aChildren.end(); @@ -2936,13 +2892,13 @@ sal_Bool Content::exchangeIdentity( 0, aOldURL.getLength(), xNewId->getContentIdentifier() ); - uno::Reference< ucb::XContentIdentifier > - xNewChildId - = new ::ucbhelper::ContentIdentifier( m_xSMgr, aNewChildURL ); - + uno::Reference< ucb::XContentIdentifier > xNewChildId + = new ::ucbhelper::ContentIdentifier( + m_xSMgr, aNewChildURL ); + if ( !xChild->exchangeIdentity( xNewChildId ) ) return sal_False; - + ++it; } return sal_True; @@ -2962,7 +2918,7 @@ sal_Bool Content::isFolder( { { osl::MutexGuard aGuard( m_aMutex ); - + if ( m_bTransient ) return m_bCollection; } @@ -3010,11 +2966,10 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) aArgs ); return aException; } - default: break; } - + switch ( e.getError() ) { case DAVException::DAV_HTTP_ERROR: @@ -3022,14 +2977,14 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) if ( bWrite ) aException <<= ucb::InteractiveNetworkWriteException( - rtl::OUString(), + e.getData(), static_cast< cppu::OWeakObject * >( this ), task::InteractionClassification_ERROR, e.getData() ); else aException <<= ucb::InteractiveNetworkReadException( - rtl::OUString(), + e.getData(), static_cast< cppu::OWeakObject * >( this ), task::InteractionClassification_ERROR, e.getData() ); @@ -3044,14 +2999,14 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) task::InteractionClassification_ERROR, e.getData() ); break; - + // @@@ No matching InteractiveNetwork*Exception -// case DAVException::DAV_HTTP_AUTH: -// break; +// case DAVException::DAV_HTTP_AUTH: +// break; // @@@ No matching InteractiveNetwork*Exception -// case DAVException::DAV_HTTP_AUTHPROXY: -// break; +// case DAVException::DAV_HTTP_AUTHPROXY: +// break; case DAVException::DAV_HTTP_CONNECT: aException <<= @@ -3063,16 +3018,16 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) break; // @@@ No matching InteractiveNetwork*Exception -// case DAVException::DAV_HTTP_TIMEOUT: -// break; +// case DAVException::DAV_HTTP_TIMEOUT: +// break; // @@@ No matching InteractiveNetwork*Exception -// case DAVException::DAV_HTTP_REDIRECT: -// break; +// case DAVException::DAV_HTTP_REDIRECT: +// break; // @@@ No matching InteractiveNetwork*Exception -// case DAVException::DAV_SESSION_CREATE: -// break; +// case DAVException::DAV_SESSION_CREATE: +// break; case DAVException::DAV_INVALID_ARG: aException <<= @@ -3081,7 +3036,63 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) static_cast< cppu::OWeakObject * >( this ), -1 ); break; - + + case DAVException::DAV_LOCKED: +#if 1 + aException <<= + ucb::InteractiveLockingLockedException( + rtl::OUString::createFromAscii( "Locked!" ), + static_cast< cppu::OWeakObject * >( this ), + task::InteractionClassification_ERROR, + m_xIdentifier->getContentIdentifier(), + sal_True ); +#else + { + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[ 0 ] <<= beans::PropertyValue( + rtl::OUString::createFromAscii("Uri"), -1, + uno::makeAny(m_xIdentifier->getContentIdentifier()), + beans::PropertyState_DIRECT_VALUE); + + aException <<= + ucb::InteractiveAugmentedIOException( + rtl::OUString::createFromAscii( "Locked!" ), + static_cast< cppu::OWeakObject * >( this ), + task::InteractionClassification_ERROR, + ucb::IOErrorCode_LOCKING_VIOLATION, + aArgs ); + } +#endif + break; + + case DAVException::DAV_LOCKED_SELF: + aException <<= + ucb::InteractiveLockingLockedException( + rtl::OUString::createFromAscii( "Locked (self)!" ), + static_cast< cppu::OWeakObject * >( this ), + task::InteractionClassification_ERROR, + m_xIdentifier->getContentIdentifier(), + sal_True ); + break; + + case DAVException::DAV_NOT_LOCKED: + aException <<= + ucb::InteractiveLockingNotLockedException( + rtl::OUString::createFromAscii( "Not locked!" ), + static_cast< cppu::OWeakObject * >( this ), + task::InteractionClassification_ERROR, + m_xIdentifier->getContentIdentifier() ); + break; + + case DAVException::DAV_LOCK_EXPIRED: + aException <<= + ucb::InteractiveLockingLockExpiredException( + rtl::OUString::createFromAscii( "Lock expired!" ), + static_cast< cppu::OWeakObject * >( this ), + task::InteractionClassification_ERROR, + m_xIdentifier->getContentIdentifier() ); + break; + default: aException <<= ucb::InteractiveNetworkGeneralException( @@ -3090,7 +3101,7 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) task::InteractionClassification_ERROR ); break; } - + return aException; } @@ -3120,7 +3131,8 @@ void Content::cancelCommandExecution( } //========================================================================= -const rtl::OUString Content::getBaseURI( const std::auto_ptr< DAVResourceAccess > & rResAccess ) +const rtl::OUString +Content::getBaseURI( const std::auto_ptr< DAVResourceAccess > & rResAccess ) { osl::Guard< osl::Mutex > aGuard( m_aMutex ); @@ -3176,35 +3188,44 @@ const Content::ResourceType & Content::getResourceType( { try { - // Try to fetch some frequently used property value, e.g. those + // Try to fetch some frequently used property value, e.g. those // used when loading documents... along with identifying whether // this is a DAV resource. std::vector< DAVResource > resources; std::vector< rtl::OUString > aPropNames; - uno::Sequence< beans::Property > aProperties( 4 ); - aProperties[ 0 ].Name = rtl::OUString::createFromAscii( "IsFolder" ); - aProperties[ 1 ].Name = rtl::OUString::createFromAscii( "IsDocument" ); - aProperties[ 2 ].Name = rtl::OUString::createFromAscii( "IsReadOnly" ); - aProperties[ 3 ].Name = rtl::OUString::createFromAscii( "MediaType" ); + uno::Sequence< beans::Property > aProperties( 5 ); + aProperties[ 0 ].Name + = rtl::OUString::createFromAscii( "IsFolder" ); + aProperties[ 1 ].Name + = rtl::OUString::createFromAscii( "IsDocument" ); + aProperties[ 2 ].Name + = rtl::OUString::createFromAscii( "IsReadOnly" ); + aProperties[ 3 ].Name + = rtl::OUString::createFromAscii( "MediaType" ); + aProperties[ 4 ].Name + = DAVProperties::SUPPORTEDLOCK; ContentProperties::UCBNamesToDAVNames( aProperties, aPropNames ); rResAccess->PROPFIND( DAVZERO, aPropNames, resources, xEnv ); - + if ( resources.size() == 1 ) - { - m_xCachedProps.reset( new ContentProperties( resources[ 0 ] ) ); - m_xCachedProps->containsAllNames( aProperties, m_aFailedPropNames ); + { + m_xCachedProps.reset( + new ContentProperties( resources[ 0 ] ) ); + m_xCachedProps->containsAllNames( + aProperties, m_aFailedPropNames ); } + eResourceType = DAV; } - catch ( DAVException const& e) + catch ( DAVException const & e ) { rResAccess->resetUri(); - if (e.getStatus() == SC_METHOD_NOT_ALLOWED) + if ( e.getStatus() == SC_METHOD_NOT_ALLOWED ) { // Status SC_METHOD_NOT_ALLOWED is a safe indicator that the // resource is NON_DAV @@ -3213,7 +3234,6 @@ const Content::ResourceType & Content::getResourceType( } } m_eResourceType = eResourceType; - } return m_eResourceType; } diff --git a/ucb/source/ucp/webdav/webdavcontent.hxx b/ucb/source/ucp/webdav/webdavcontent.hxx index 030fcc2b7e..85b9b710f3 100644 --- a/ucb/source/ucp/webdav/webdavcontent.hxx +++ b/ucb/source/ucp/webdav/webdavcontent.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavcontent.hxx,v $ - * $Revision: 1.23.32.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -88,7 +85,7 @@ class Content : public ::ucbhelper::ContentImplHelper, rtl::OUString m_aEscapedTitle; ResourceType m_eResourceType; ContentProvider* m_pProvider; // No need for a ref, base class holds object - bool m_bTransient; + bool m_bTransient; bool m_bCollection; bool m_bDidGetOrHead; std::vector< rtl::OUString > m_aFailedPropNames; @@ -96,81 +93,91 @@ class Content : public ::ucbhelper::ContentImplHelper, private: virtual com::sun::star::uno::Sequence< com::sun::star::beans::Property > getProperties( const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ); + com::sun::star::ucb::XCommandEnvironment > & xEnv ); virtual com::sun::star::uno::Sequence< com::sun::star::ucb::CommandInfo > getCommands( const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ); - virtual ::rtl::OUString getParentURL(); + com::sun::star::ucb::XCommandEnvironment > & xEnv ); + virtual ::rtl::OUString getParentURL(); - sal_Bool isFolder( const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) + sal_Bool isFolder( const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw ( ::com::sun::star::uno::Exception ); - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > - getPropertyValues( const ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > + getPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& rProperties, - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) + const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw ( ::com::sun::star::uno::Exception ); ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > - setPropertyValues( - const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::PropertyValue >& rValues, - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) + setPropertyValues( const ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue >& rValues, + const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw ( ::com::sun::star::uno::Exception ); typedef rtl::Reference< Content > ContentRef; - typedef std::list< ContentRef > ContentRefList; - void queryChildren( ContentRefList& rChildren); + typedef std::list< ContentRef > ContentRefList; + void queryChildren( ContentRefList& rChildren); - sal_Bool exchangeIdentity( - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XContentIdentifier >& xNewId ); + sal_Bool + exchangeIdentity( const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XContentIdentifier >& xNewId ); - const rtl::OUString getBaseURI( const std::auto_ptr< DAVResourceAccess > & rResAccess ); + const rtl::OUString + getBaseURI( const std::auto_ptr< DAVResourceAccess > & rResAccess ); - const ResourceType & getResourceType( - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) + const ResourceType & + getResourceType( const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XCommandEnvironment >& xEnv ) throw ( ::com::sun::star::uno::Exception ); - const ResourceType & getResourceType( - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XCommandEnvironment >& xEnv, - const std::auto_ptr< DAVResourceAccess > & rResAccess ) + const ResourceType & + getResourceType( const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XCommandEnvironment >& xEnv, + const std::auto_ptr< DAVResourceAccess > & rResAccess ) throw ( ::com::sun::star::uno::Exception ); // Command "open" com::sun::star::uno::Any open( const com::sun::star::ucb::OpenCommandArgument2 & rArg, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) + com::sun::star::ucb::XCommandEnvironment > & xEnv ) throw( ::com::sun::star::uno::Exception ); // Command "post" void post( const com::sun::star::ucb::PostCommandArgument2 & rArg, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment > & xEnv ) + com::sun::star::ucb::XCommandEnvironment > & xEnv ) throw( ::com::sun::star::uno::Exception ); - // Command "insert" - void insert( const ::com::sun::star::uno::Reference< - ::com::sun::star::io::XInputStream > & xInputStream, - sal_Bool bReplaceExisting, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment ) + // Command "insert" + void insert( const ::com::sun::star::uno::Reference< + ::com::sun::star::io::XInputStream > & xInputStream, + sal_Bool bReplaceExisting, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( ::com::sun::star::uno::Exception ); // Command "transfer" void transfer( const ::com::sun::star::ucb::TransferInfo & rArgs, const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment ) + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( ::com::sun::star::uno::Exception ); // Command "delete" - void destroy( sal_Bool bDeletePhysical ) + void destroy( sal_Bool bDeletePhysical ) + throw( ::com::sun::star::uno::Exception ); + + // Command "lock" + void lock( const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& Environment ) + throw( ::com::sun::star::uno::Exception ); + + // Command "unlock" + void unlock( const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( ::com::sun::star::uno::Exception ); ::com::sun::star::uno::Any MapDAVException( const DAVException & e, @@ -184,57 +191,62 @@ private: static bool shouldAccessNetworkAfterException( const DAVException & e ); + bool supportsExclusiveWriteLock( + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& Environment ); + public: - Content( const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, - ContentProvider* pProvider, - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XContentIdentifier >& Identifier, + Content( const ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, + ContentProvider* pProvider, + const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XContentIdentifier >& Identifier, rtl::Reference< DAVSessionFactory > const & rSessionFactory ) throw ( ::com::sun::star::ucb::ContentCreationException ); - Content( const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, - ContentProvider* pProvider, - const ::com::sun::star::uno::Reference< - ::com::sun::star::ucb::XContentIdentifier >& Identifier, + Content( const ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, + ContentProvider* pProvider, + const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XContentIdentifier >& Identifier, rtl::Reference< DAVSessionFactory > const & rSessionFactory, - sal_Bool isCollection ) + sal_Bool isCollection ) throw ( ::com::sun::star::ucb::ContentCreationException ); - virtual ~Content(); + virtual ~Content(); - // XInterface - XINTERFACE_DECL() + // XInterface + XINTERFACE_DECL() // XTypeProvider XTYPEPROVIDER_DECL() // XServiceInfo virtual ::rtl::OUString SAL_CALL - getImplementationName() + getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL - getSupportedServiceNames() + + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL + getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); - // XContent - virtual rtl::OUString SAL_CALL - getContentType() + // XContent + virtual rtl::OUString SAL_CALL + getContentType() throw( com::sun::star::uno::RuntimeException ); - // XCommandProcessor - virtual com::sun::star::uno::Any SAL_CALL - execute( const com::sun::star::ucb::Command& aCommand, - sal_Int32 CommandId, - const com::sun::star::uno::Reference< - com::sun::star::ucb::XCommandEnvironment >& Environment ) + // XCommandProcessor + virtual com::sun::star::uno::Any SAL_CALL + execute( const com::sun::star::ucb::Command& aCommand, + sal_Int32 CommandId, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& Environment ) throw( com::sun::star::uno::Exception, - com::sun::star::ucb::CommandAbortedException, - com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL - abort( sal_Int32 CommandId ) + com::sun::star::ucb::CommandAbortedException, + com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL + abort( sal_Int32 CommandId ) throw( com::sun::star::uno::RuntimeException ); - // XPropertyContainer + // XPropertyContainer virtual void SAL_CALL addProperty( const rtl::OUString& Name, sal_Int16 Attributes, @@ -250,36 +262,36 @@ public: com::sun::star::beans::NotRemoveableException, com::sun::star::uno::RuntimeException ); - ////////////////////////////////////////////////////////////////////// - // Additional interfaces - ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + // Additional interfaces + ////////////////////////////////////////////////////////////////////// - // XContentCreator + // XContentCreator virtual com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo > SAL_CALL - queryCreatableContentsInfo() + queryCreatableContentsInfo() throw( com::sun::star::uno::RuntimeException ); - virtual com::sun::star::uno::Reference< - com::sun::star::ucb::XContent > SAL_CALL - createNewContent( const com::sun::star::ucb::ContentInfo& Info ) + virtual com::sun::star::uno::Reference< + com::sun::star::ucb::XContent > SAL_CALL + createNewContent( const com::sun::star::ucb::ContentInfo& Info ) throw( com::sun::star::uno::RuntimeException ); - ////////////////////////////////////////////////////////////////////// - // Non-interface methods. - ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + // Non-interface methods. + ////////////////////////////////////////////////////////////////////// DAVResourceAccess & getResourceAccess() { return *m_xResAccess; } - // Called from resultset data supplier. - static ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > - getPropertyValues( const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory >& rSMgr, + // Called from resultset data supplier. + static ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > + getPropertyValues( const ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >& rSMgr, const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::Property >& rProperties, - const ContentProperties& rData, + ::com::sun::star::beans::Property >& rProperties, + const ContentProperties& rData, const rtl::Reference< ::ucbhelper::ContentProviderImplHelper >& rProvider, - const ::rtl::OUString& rContentId ); + const ::rtl::OUString& rContentId ); }; } diff --git a/ucb/source/ucp/webdav/webdavcontentcaps.cxx b/ucb/source/ucp/webdav/webdavcontentcaps.cxx index 16800fb29c..0af93828ac 100644 --- a/ucb/source/ucp/webdav/webdavcontentcaps.cxx +++ b/ucb/source/ucp/webdav/webdavcontentcaps.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavcontentcaps.cxx,v $ - * $Revision: 1.21.20.1 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -31,7 +28,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_ucb.hxx" /************************************************************************** - TODO + TODO ************************************************************************** *************************************************************************/ @@ -41,24 +38,19 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/ucb/CommandInfo.hpp> +#include <com/sun/star/ucb/ContentInfo.hpp> #include <com/sun/star/ucb/OpenCommandArgument2.hpp> #include <com/sun/star/ucb/InsertCommandArgument.hpp> #include <com/sun/star/ucb/PostCommandArgument2.hpp> #include <com/sun/star/ucb/TransferInfo.hpp> #include <com/sun/star/uno/Sequence.hxx> -#ifndef _COM_SUN_STAR_UTIL_DATETIME_HXX_ #include <com/sun/star/util/DateTime.hpp> -#endif #include <com/sun/star/ucb/Link.hpp> #include <com/sun/star/ucb/Lock.hpp> #include <com/sun/star/ucb/LockEntry.hpp> #include "webdavcontent.hxx" -#ifndef _WEBDAV_UCP_PROVIDFER_HXX #include "webdavprovider.hxx" -#endif -#ifndef _WEBDAV_SESSION_HXX #include "DAVSession.hxx" -#endif #include "ContentProperties.hxx" using namespace com::sun::star; @@ -162,6 +154,16 @@ bool ContentProvider::getProperty( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ) ); + m_pProps->insert( + beans::Property( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ), + -1, + getCppuType( static_cast< + const uno::Sequence< ucb::ContentInfo > * >( 0 ) ), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::READONLY ) ); + // Standard DAV properties. m_pProps->insert( @@ -221,17 +223,16 @@ bool ContentProvider::getProperty( m_pProps->insert( beans::Property( - DAVProperties::LOCKDISCOVERY, + DAVProperties::LOCKDISCOVERY, -1, getCppuType( static_cast< - const uno::Sequence< - com::sun::star::ucb::Lock > * >( 0 ) ), + const uno::Sequence< ucb::Lock > * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ) ); m_pProps->insert( beans::Property( - DAVProperties::RESOURCETYPE, + DAVProperties::RESOURCETYPE, -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND @@ -239,27 +240,25 @@ bool ContentProvider::getProperty( m_pProps->insert( beans::Property( - DAVProperties::SOURCE, + DAVProperties::SOURCE, -1, getCppuType( static_cast< - const uno::Sequence< - com::sun::star::ucb::Link > * >( 0 ) ), + const uno::Sequence< ucb::Link > * >( 0 ) ), beans::PropertyAttribute::BOUND ) ); m_pProps->insert( beans::Property( - DAVProperties::SUPPORTEDLOCK, + DAVProperties::SUPPORTEDLOCK, -1, getCppuType( static_cast< const uno::Sequence< - com::sun::star::ucb::LockEntry > * >( - 0 ) ), + ucb::LockEntry > * >( 0 ) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY ) ); m_pProps->insert( beans::Property( - DAVProperties::EXECUTABLE, + DAVProperties::EXECUTABLE, -1, getCppuType( static_cast< const rtl::OUString * >( 0 ) ), beans::PropertyAttribute::BOUND ) ); @@ -301,7 +300,7 @@ bool ContentProvider::getProperty( // virtual uno::Sequence< beans::Property > Content::getProperties( - const uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv ) + const uno::Reference< ucb::XCommandEnvironment > & xEnv ) { sal_Bool bTransient; std::auto_ptr< DAVResourceAccess > xResAccess; @@ -314,7 +313,8 @@ uno::Sequence< beans::Property > Content::getProperties( bTransient = m_bTransient; xResAccess.reset( new DAVResourceAccess( *m_xResAccess.get() ) ); if ( m_xCachedProps.get() ) - xCachedProps.reset( new ContentProperties( *m_xCachedProps.get() ) ); + xCachedProps.reset( + new ContentProperties( *m_xCachedProps.get() ) ); xProvider.set( m_pProvider ); } @@ -356,6 +356,7 @@ uno::Sequence< beans::Property > Content::getProperties( sal_Bool bHasDateModified = sal_False; sal_Bool bHasMediaType = sal_False; sal_Bool bHasSize = sal_False; + sal_Bool bHasCreatableInfos = sal_False; { std::set< rtl::OUString >::const_iterator it = aPropSet.begin(); @@ -436,7 +437,13 @@ uno::Sequence< beans::Property > Content::getProperties( { bHasSize = sal_True; } - + else if ( !bHasCreatableInfos && + (*it).equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( + "CreatableContentsInfo" ) ) ) + { + bHasCreatableInfos = sal_True; + } it++; } } @@ -486,6 +493,11 @@ uno::Sequence< beans::Property > Content::getProperties( aPropSet.insert( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Size" ) ) ); + if ( !bHasCreatableInfos ) + aPropSet.insert( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "CreatableContentsInfo" ) ) ); + // Add cached properties, if present and still missing. if ( xCachedProps.get() ) { @@ -525,236 +537,136 @@ uno::Sequence< beans::Property > Content::getProperties( //========================================================================= // virtual -uno::Sequence< com::sun::star::ucb::CommandInfo > Content::getCommands( - const uno::Reference< com::sun::star::ucb::XCommandEnvironment > & xEnv ) +uno::Sequence< ucb::CommandInfo > Content::getCommands( + const uno::Reference< ucb::XCommandEnvironment > & xEnv ) { osl::Guard< osl::Mutex > aGuard( m_aMutex ); - sal_Bool bFolder = sal_False; - - try - { - bFolder = isFolder( xEnv ); - } - catch ( uno::Exception const & ) - { - static com::sun::star::ucb::CommandInfo aDefaultCommandInfoTable[] = - { - /////////////////////////////////////////////////////////////// - // Just mandatory commands avail. - /////////////////////////////////////////////////////////////// - - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ), - -1, - getCppuVoidType() - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ), - -1, - getCppuVoidType() - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ), - -1, - getCppuType( static_cast< - uno::Sequence< beans::Property > * >( 0 ) ) - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ), - -1, - getCppuType( static_cast< - uno::Sequence< beans::PropertyValue > * >( 0 ) ) - ) - }; - return uno::Sequence< com::sun::star::ucb::CommandInfo >( - aDefaultCommandInfoTable, 4 ); - } - - if ( bFolder ) - { - //================================================================= - // - // Folder: Supported commands - // - //================================================================= + uno::Sequence< ucb::CommandInfo > aCmdInfo( 8 ); - static com::sun::star::ucb::CommandInfo aFolderCommandInfoTable[] = - { - /////////////////////////////////////////////////////////////// - // Required commands - /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + // Mandatory commands + /////////////////////////////////////////////////////////////// - com::sun::star::ucb::CommandInfo( + aCmdInfo[ 0 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ), -1, - getCppuVoidType() - ), - com::sun::star::ucb::CommandInfo( + getCppuVoidType() ); + aCmdInfo[ 1 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ), -1, - getCppuVoidType() - ), - com::sun::star::ucb::CommandInfo( + getCppuVoidType() ); + aCmdInfo[ 2 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ), -1, getCppuType( static_cast< - uno::Sequence< beans::Property > * >( 0 ) ) - ), - com::sun::star::ucb::CommandInfo( + uno::Sequence< beans::Property > * >( 0 ) ) ); + aCmdInfo[ 3 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ), -1, getCppuType( static_cast< - uno::Sequence< beans::PropertyValue > * >( 0 ) ) - ), + uno::Sequence< beans::PropertyValue > * >( 0 ) ) ); - /////////////////////////////////////////////////////////////// - // Optional standard commands - /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + // Optional standard commands + /////////////////////////////////////////////////////////////// - com::sun::star::ucb::CommandInfo( + aCmdInfo[ 4 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "delete" ) ), -1, - getCppuBooleanType() - ), - com::sun::star::ucb::CommandInfo( + getCppuBooleanType() ); + aCmdInfo[ 5 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "insert" ) ), -1, getCppuType( static_cast< - com::sun::star::ucb::InsertCommandArgument * >( 0 ) ) - ), - com::sun::star::ucb::CommandInfo( + ucb::InsertCommandArgument * >( 0 ) ) ); + aCmdInfo[ 6 ] = + ucb::CommandInfo( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ), -1, getCppuType( static_cast< - com::sun::star::ucb::OpenCommandArgument2 * >( 0 ) ) - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), - -1, - getCppuType( static_cast< - com::sun::star::ucb::TransferInfo * >( 0 ) ) - ) + ucb::OpenCommandArgument2 * >( 0 ) ) ); - /////////////////////////////////////////////////////////////// - // New commands - /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + // New commands + /////////////////////////////////////////////////////////////// - /* - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "COPY" ) ), - -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MOVE" ) ), + aCmdInfo[ 7 ] = + ucb::CommandInfo( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "post" ) ), -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - ) - */ - }; + getCppuType( static_cast< + ucb::PostCommandArgument2 * >( 0 ) ) ); - return uno::Sequence< com::sun::star::ucb::CommandInfo >( - aFolderCommandInfoTable, 8 ); + sal_Bool bFolder = sal_False; + + try + { + bFolder = isFolder( xEnv ); } - else + catch ( uno::Exception const & ) { - //================================================================= - // - // Document: Supported commands - // - //================================================================= + return aCmdInfo; + } - static com::sun::star::ucb::CommandInfo aDocumentCommandInfoTable[] = - { - /////////////////////////////////////////////////////////////// - // Required commands - /////////////////////////////////////////////////////////////// + sal_Bool bSupportsLocking = supportsExclusiveWriteLock( xEnv ); - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ), - -1, - getCppuVoidType() - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ), - -1, - getCppuVoidType() - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ), - -1, - getCppuType( static_cast< - uno::Sequence< beans::Property > * >( 0 ) ) - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ), - -1, - getCppuType( static_cast< - uno::Sequence< beans::PropertyValue > * >( 0 ) ) - ), + sal_Int32 nPos = aCmdInfo.getLength(); + sal_Int32 nMoreCmds = ( bFolder ? 2 : 0 ) + ( bSupportsLocking ? 2 : 0 ); + if ( nMoreCmds ) + aCmdInfo.realloc( nPos + nMoreCmds ); + else + return aCmdInfo; - /////////////////////////////////////////////////////////////// - // Optional standard commands - /////////////////////////////////////////////////////////////// + if ( bFolder ) + { + /////////////////////////////////////////////////////////////// + // Optional standard commands + /////////////////////////////////////////////////////////////// - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "delete" ) ), - -1, - getCppuBooleanType() - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "insert" ) ), - -1, - getCppuType( static_cast< - com::sun::star::ucb::InsertCommandArgument * >( 0 ) ) - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ), + aCmdInfo[ nPos ] = + ucb::CommandInfo( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ), -1, - getCppuType( static_cast< - com::sun::star::ucb::OpenCommandArgument2 * >( 0 ) ) - ), - - /////////////////////////////////////////////////////////////// - // New commands - /////////////////////////////////////////////////////////////// - - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "post" ) ), + getCppuType( static_cast< ucb::TransferInfo * >( 0 ) ) ); + nPos++; + aCmdInfo[ nPos ] = + ucb::CommandInfo( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "createNewContent" ) ), -1, - getCppuType( static_cast< - com::sun::star::ucb::PostCommandArgument2 * >( 0 ) ) - ) + getCppuType( static_cast< ucb::ContentInfo * >( 0 ) ) ); + nPos++; + } + else + { + // no document-only commands at the moment. + } - /* - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "COPY" ) ), + if ( bSupportsLocking ) + { + aCmdInfo[ nPos ] = + ucb::CommandInfo( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "lock" ) ), -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - ), - com::sun::star::ucb::CommandInfo( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MOVE" ) ), + getCppuVoidType() ); + nPos++; + aCmdInfo[ nPos ] = + ucb::CommandInfo( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "unlock" ) ), -1, - getCppuType( static_cast< const rtl::OUString * >( 0 ) ), - ) - */ - }; - - return uno::Sequence< com::sun::star::ucb::CommandInfo >( - aDocumentCommandInfoTable, 8 ); + getCppuVoidType() ); + nPos++; } + return aCmdInfo; } - diff --git a/ucb/source/ucp/webdav/webdavdatasupplier.cxx b/ucb/source/ucp/webdav/webdavdatasupplier.cxx index d36867da6e..0dc4c46fc5 100644 --- a/ucb/source/ucp/webdav/webdavdatasupplier.cxx +++ b/ucb/source/ucp/webdav/webdavdatasupplier.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavdatasupplier.cxx,v $ - * $Revision: 1.18 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/webdavdatasupplier.hxx b/ucb/source/ucp/webdav/webdavdatasupplier.hxx index 4d555982f9..878257e85b 100644 --- a/ucb/source/ucp/webdav/webdavdatasupplier.hxx +++ b/ucb/source/ucp/webdav/webdavdatasupplier.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavdatasupplier.hxx,v $ - * $Revision: 1.10 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/webdavprovider.cxx b/ucb/source/ucp/webdav/webdavprovider.cxx index d6caf7aafe..4cbe267fcb 100644 --- a/ucb/source/ucp/webdav/webdavprovider.cxx +++ b/ucb/source/ucp/webdav/webdavprovider.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavprovider.cxx,v $ - * $Revision: 1.21 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/webdavprovider.hxx b/ucb/source/ucp/webdav/webdavprovider.hxx index 2b9af841f5..c435c2ea64 100644 --- a/ucb/source/ucp/webdav/webdavprovider.hxx +++ b/ucb/source/ucp/webdav/webdavprovider.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavprovider.hxx,v $ - * $Revision: 1.11 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/webdavresultset.cxx b/ucb/source/ucp/webdav/webdavresultset.cxx index 330d49abe2..8234628e71 100644 --- a/ucb/source/ucp/webdav/webdavresultset.cxx +++ b/ucb/source/ucp/webdav/webdavresultset.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavresultset.cxx,v $ - * $Revision: 1.7 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/webdavresultset.hxx b/ucb/source/ucp/webdav/webdavresultset.hxx index f05227e9f9..7b084e6b5c 100644 --- a/ucb/source/ucp/webdav/webdavresultset.hxx +++ b/ucb/source/ucp/webdav/webdavresultset.hxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavresultset.hxx,v $ - * $Revision: 1.6 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify diff --git a/ucb/source/ucp/webdav/webdavservices.cxx b/ucb/source/ucp/webdav/webdavservices.cxx index 2bf66572b7..288772231a 100644 --- a/ucb/source/ucp/webdav/webdavservices.cxx +++ b/ucb/source/ucp/webdav/webdavservices.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: webdavservices.cxx,v $ - * $Revision: 1.8 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify |