LCOV - code coverage report
Current view: top level - libreoffice/ucb/source/ucp/hierarchy - hierarchyprovider.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 73 0.0 %
Date: 2012-12-27 Functions: 0 20 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : /**************************************************************************
      22             :                                 TODO
      23             :  **************************************************************************
      24             : 
      25             :  - XInitialization::initialize does not work any longer!
      26             : 
      27             :  *************************************************************************/
      28             : #include <osl/diagnose.h>
      29             : #include <com/sun/star/beans/PropertyValue.hpp>
      30             : #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
      31             : #include <com/sun/star/util/XOfficeInstallationDirectories.hpp>
      32             : #include <comphelper/processfactory.hxx>
      33             : #include <ucbhelper/contentidentifier.hxx>
      34             : #include "hierarchyprovider.hxx"
      35             : #include "hierarchycontent.hxx"
      36             : #include "hierarchyuri.hxx"
      37             : 
      38             : #include "../inc/urihelper.hxx"
      39             : 
      40             : using namespace com::sun::star;
      41             : using namespace hierarchy_ucp;
      42             : 
      43             : //=========================================================================
      44             : //=========================================================================
      45             : //
      46             : // HierarchyContentProvider Implementation.
      47             : //
      48             : //=========================================================================
      49             : //=========================================================================
      50             : 
      51           0 : HierarchyContentProvider::HierarchyContentProvider(
      52             :             const uno::Reference< uno::XComponentContext >& rxContext )
      53           0 : : ::ucbhelper::ContentProviderImplHelper( rxContext )
      54             : {
      55           0 : }
      56             : 
      57             : //=========================================================================
      58             : // virtual
      59           0 : HierarchyContentProvider::~HierarchyContentProvider()
      60             : {
      61           0 : }
      62             : 
      63             : //=========================================================================
      64             : //
      65             : // XInterface methods.
      66             : //
      67             : //=========================================================================
      68             : 
      69           0 : XINTERFACE_IMPL_4( HierarchyContentProvider,
      70             :                    lang::XTypeProvider,
      71             :                    lang::XServiceInfo,
      72             :                    ucb::XContentProvider,
      73             :                    lang::XInitialization );
      74             : 
      75             : //=========================================================================
      76             : //
      77             : // XTypeProvider methods.
      78             : //
      79             : //=========================================================================
      80             : 
      81           0 : XTYPEPROVIDER_IMPL_4( HierarchyContentProvider,
      82             :                       lang::XTypeProvider,
      83             :                       lang::XServiceInfo,
      84             :                       ucb::XContentProvider,
      85             :                       lang::XInitialization );
      86             : 
      87             : //=========================================================================
      88             : //
      89             : // XServiceInfo methods.
      90             : //
      91             : //=========================================================================
      92             : 
      93           0 : XSERVICEINFO_IMPL_1_CTX( HierarchyContentProvider,
      94             :                      rtl::OUString( "com.sun.star.comp.ucb.HierarchyContentProvider" ),
      95           0 :                      rtl::OUString( HIERARCHY_CONTENT_PROVIDER_SERVICE_NAME ) );
      96             : 
      97             : //=========================================================================
      98             : //
      99             : // Service factory implementation.
     100             : //
     101             : //=========================================================================
     102             : 
     103           0 : ONE_INSTANCE_SERVICE_FACTORY_IMPL( HierarchyContentProvider );
     104             : 
     105             : //=========================================================================
     106             : //
     107             : // XContentProvider methods.
     108             : //
     109             : //=========================================================================
     110             : 
     111             : // virtual
     112             : uno::Reference< ucb::XContent > SAL_CALL
     113           0 : HierarchyContentProvider::queryContent(
     114             :         const uno::Reference< ucb::XContentIdentifier >& Identifier )
     115             :     throw( ucb::IllegalIdentifierException, uno::RuntimeException )
     116             : {
     117           0 :     HierarchyUri aUri( Identifier->getContentIdentifier() );
     118           0 :     if ( !aUri.isValid() )
     119           0 :         throw ucb::IllegalIdentifierException();
     120             : 
     121             :     // Encode URL and create new Id. This may "correct" user-typed-in URL's.
     122             :     uno::Reference< ucb::XContentIdentifier > xCanonicId
     123           0 :         = new ::ucbhelper::ContentIdentifier( ::ucb_impl::urihelper::encodeURI( aUri.getUri() ) );
     124           0 :     osl::MutexGuard aGuard( m_aMutex );
     125             : 
     126             :     // Check, if a content with given id already exists...
     127             :     uno::Reference< ucb::XContent > xContent
     128           0 :         = queryExistingContent( xCanonicId ).get();
     129           0 :     if ( xContent.is() )
     130             :         return xContent;
     131             : 
     132             :     // Create a new content.
     133           0 :     xContent = HierarchyContent::create( m_xContext, this, xCanonicId );
     134           0 :     registerNewContent( xContent );
     135             : 
     136           0 :     if ( xContent.is() && !xContent->getIdentifier().is() )
     137           0 :         throw ucb::IllegalIdentifierException();
     138             : 
     139           0 :     return xContent;
     140             : }
     141             : 
     142             : //=========================================================================
     143             : //
     144             : // XInitialization methods.
     145             : //
     146             : //=========================================================================
     147             : 
     148             : // virtual
     149           0 : void SAL_CALL HierarchyContentProvider::initialize(
     150             :                                 const uno::Sequence< uno::Any >& aArguments )
     151             :     throw( uno::Exception, uno::RuntimeException )
     152             : {
     153           0 :     if ( aArguments.getLength() > 0 )
     154             :         OSL_FAIL( "HierarchyContentProvider::initialize : not supported!" );
     155           0 : }
     156             : 
     157             : //=========================================================================
     158             : //
     159             : //  Non-interface methods.
     160             : //
     161             : //=========================================================================
     162             : 
     163             : uno::Reference< lang::XMultiServiceFactory >
     164           0 : HierarchyContentProvider::getConfigProvider(
     165             :                                 const rtl::OUString & rServiceSpecifier )
     166             : {
     167           0 :     osl::MutexGuard aGuard( m_aMutex );
     168             :     ConfigProviderMap::iterator it = m_aConfigProviderMap.find(
     169           0 :                                                     rServiceSpecifier );
     170           0 :     if ( it == m_aConfigProviderMap.end() )
     171             :     {
     172             :         try
     173             :         {
     174           0 :             ConfigProviderMapEntry aEntry;
     175             :             aEntry.xConfigProvider
     176             :                 = uno::Reference< lang::XMultiServiceFactory >(
     177           0 :                                 m_xContext->getServiceManager()->createInstanceWithContext(rServiceSpecifier, m_xContext),
     178           0 :                                 uno::UNO_QUERY );
     179             : 
     180           0 :             if ( aEntry.xConfigProvider.is() )
     181             :             {
     182           0 :                 m_aConfigProviderMap[ rServiceSpecifier ] = aEntry;
     183           0 :                 return aEntry.xConfigProvider;
     184           0 :             }
     185             :         }
     186           0 :         catch ( uno::Exception const & )
     187             :         {
     188             : //            OSL_FAIL( //                        "HierarchyContentProvider::getConfigProvider - "
     189             : //                        "caught exception!" );
     190             :         }
     191             : 
     192             :         OSL_FAIL( "HierarchyContentProvider::getConfigProvider - "
     193             :                     "No config provider!" );
     194             : 
     195           0 :         return uno::Reference< lang::XMultiServiceFactory >();
     196             :     }
     197             : 
     198           0 :     return (*it).second.xConfigProvider;
     199             : }
     200             : 
     201             : //=========================================================================
     202             : uno::Reference< container::XHierarchicalNameAccess >
     203           0 : HierarchyContentProvider::getRootConfigReadNameAccess(
     204             :                                 const rtl::OUString & rServiceSpecifier )
     205             : {
     206           0 :     osl::MutexGuard aGuard( m_aMutex );
     207             :     ConfigProviderMap::iterator it = m_aConfigProviderMap.find(
     208           0 :                                                     rServiceSpecifier );
     209           0 :     if ( it != m_aConfigProviderMap.end() )
     210             :     {
     211           0 :         if ( !( (*it).second.xRootReadAccess.is() ) )
     212             :         {
     213           0 :             if ( (*it).second.bTriedToGetRootReadAccess ) // #82494#
     214             :             {
     215             :                 OSL_FAIL( "HierarchyContentProvider::getRootConfigReadNameAccess - "
     216             :                     "Unable to read any config data! -> #82494#" );
     217           0 :                 return uno::Reference< container::XHierarchicalNameAccess >();
     218             :             }
     219             : 
     220             :             try
     221             :             {
     222             :                 uno::Reference< lang::XMultiServiceFactory > xConfigProv
     223           0 :                     = getConfigProvider( rServiceSpecifier );
     224             : 
     225           0 :                 if ( xConfigProv.is() )
     226             :                 {
     227           0 :                     uno::Sequence< uno::Any > aArguments( 1 );
     228           0 :                     beans::PropertyValue      aProperty;
     229           0 :                     aProperty.Name = rtl::OUString( "nodepath"  );
     230           0 :                     aProperty.Value <<= rtl::OUString(); // root path
     231           0 :                     aArguments[ 0 ] <<= aProperty;
     232             : 
     233           0 :                     (*it).second.bTriedToGetRootReadAccess = true;
     234             : 
     235           0 :                     (*it).second.xRootReadAccess
     236             :                         = uno::Reference< container::XHierarchicalNameAccess >(
     237           0 :                             xConfigProv->createInstanceWithArguments(
     238             :                                 rtl::OUString( "com.sun.star.ucb.HierarchyDataReadAccess"  ),
     239           0 :                                 aArguments ),
     240           0 :                             uno::UNO_QUERY );
     241           0 :                 }
     242             :             }
     243           0 :             catch ( uno::RuntimeException const & )
     244             :             {
     245           0 :                 throw;
     246             :             }
     247           0 :             catch ( uno::Exception const & )
     248             :             {
     249             :                 // createInstance, createInstanceWithArguments
     250             : 
     251             :                 OSL_FAIL( "HierarchyContentProvider::getRootConfigReadNameAccess - "
     252             :                     "caught Exception!" );
     253             :             }
     254             :         }
     255             :     }
     256             : 
     257           0 :     return (*it).second.xRootReadAccess;
     258             : }
     259             : 
     260             : //=========================================================================
     261             : uno::Reference< util::XOfficeInstallationDirectories >
     262           0 : HierarchyContentProvider::getOfficeInstallationDirectories()
     263             : {
     264           0 :     if ( !m_xOfficeInstDirs.is() )
     265             :     {
     266           0 :         osl::MutexGuard aGuard( m_aMutex );
     267           0 :         if ( !m_xOfficeInstDirs.is() )
     268             :         {
     269             :             OSL_ENSURE( m_xContext.is(), "No service manager!" );
     270             : 
     271           0 :             m_xContext->getValueByName(
     272           0 :                 rtl::OUString( "/singletons/com.sun.star.util.theOfficeInstallationDirectories"  ) )
     273           0 :                 >>= m_xOfficeInstDirs;
     274             : 
     275             : // Be silent. singleton only available in an Office environment.
     276             : //          OSL_ENSURE( m_xOfficeInstDirs.is(),
     277             : //                      "Unable to obtain office directories singleton!" );
     278           0 :         }
     279             :     }
     280           0 :     return m_xOfficeInstDirs;
     281             : }
     282             : 
     283             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10