1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef __FRAMEWORK_SERVICES_MODULEMANAGER_HXX_ 25 #define __FRAMEWORK_SERVICES_MODULEMANAGER_HXX_ 26 27 //_______________________________________________ 28 // own includes 29 30 #include <threadhelp/threadhelpbase.hxx> 31 #include <macros/xinterface.hxx> 32 #include <macros/xtypeprovider.hxx> 33 #include <macros/xserviceinfo.hxx> 34 #include <general.h> 35 #include <general.h> 36 #include <stdtypes.h> 37 38 //_______________________________________________ 39 // interface includes 40 #include <com/sun/star/uno/XInterface.hpp> 41 #include <com/sun/star/lang/XTypeProvider.hpp> 42 #include <com/sun/star/lang/XServiceInfo.hpp> 43 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 44 #include <com/sun/star/frame/XModuleManager.hpp> 45 #include <com/sun/star/container/XNameReplace.hpp> 46 #include <com/sun/star/container/XContainerQuery.hpp> 47 48 //_______________________________________________ 49 // other includes 50 #include <cppuhelper/weak.hxx> 51 52 //_______________________________________________ 53 // definition 54 55 namespace framework 56 { 57 58 //_______________________________________________ 59 /** 60 implements the service com.sun.star.frame.ModuleManager 61 */ 62 class ModuleManager : public css::lang::XTypeProvider 63 , public css::lang::XServiceInfo 64 , public css::frame::XModuleManager 65 , public css::container::XNameReplace // => XNameAccess, XElementAccess 66 , public css::container::XContainerQuery 67 // attention! Must be the first base class to guarantee right initialize lock ... 68 , private ThreadHelpBase 69 , public ::cppu::OWeakObject 70 { 71 //___________________________________________ 72 // member 73 74 private: 75 76 //--------------------------------------- 77 /** the global uno service manager. 78 Must be used to create own needed services. 79 */ 80 css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR; 81 82 //--------------------------------------- 83 /** points to the underlying configuration. 84 This ModuleManager does not cache - it calls directly the 85 configuration API! 86 */ 87 css::uno::Reference< css::container::XNameAccess > m_xCFG; 88 89 //___________________________________________ 90 // interface 91 92 public: 93 94 ModuleManager(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR); 95 virtual ~ModuleManager( ); 96 97 // XInterface, XTypeProvider, XServiceInfo 98 FWK_DECLARE_XINTERFACE 99 FWK_DECLARE_XTYPEPROVIDER 100 DECLARE_XSERVICEINFO 101 102 // XModuleManager 103 virtual ::rtl::OUString SAL_CALL identify(const css::uno::Reference< css::uno::XInterface >& xModule) 104 throw(css::lang::IllegalArgumentException, 105 css::frame::UnknownModuleException, 106 css::uno::RuntimeException ); 107 108 // XNameReplace 109 virtual void SAL_CALL replaceByName(const ::rtl::OUString& sName , 110 const css::uno::Any& aValue) 111 throw (css::lang::IllegalArgumentException , 112 css::container::NoSuchElementException, 113 css::lang::WrappedTargetException , 114 css::uno::RuntimeException ); 115 116 // XNameAccess 117 virtual css::uno::Any SAL_CALL getByName(const ::rtl::OUString& sName) 118 throw(css::container::NoSuchElementException, 119 css::lang::WrappedTargetException , 120 css::uno::RuntimeException ); 121 122 virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames() 123 throw(css::uno::RuntimeException); 124 125 virtual sal_Bool SAL_CALL hasByName(const ::rtl::OUString& sName) 126 throw(css::uno::RuntimeException); 127 128 // XElementAccess 129 virtual css::uno::Type SAL_CALL getElementType() 130 throw(css::uno::RuntimeException); 131 132 virtual sal_Bool SAL_CALL hasElements() 133 throw(css::uno::RuntimeException); 134 135 // XContainerQuery 136 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSubSetEnumerationByQuery(const ::rtl::OUString& sQuery) 137 throw(css::uno::RuntimeException); 138 139 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSubSetEnumerationByProperties(const css::uno::Sequence< css::beans::NamedValue >& lProperties) 140 throw(css::uno::RuntimeException); 141 //___________________________________________ 142 // helper 143 144 private: 145 146 //--------------------------------------- 147 /** @short open the underlying configuration. 148 149 @descr This method must be called every time 150 a (reaonly!) configuration is needed. Because 151 method works together with the member 152 m_xCFG, open it on demand and cache it 153 afterwards. 154 155 Note: A writable configuration access 156 must be created explicitly. Otherwise 157 we can't make sure that broken write requests 158 won't affect our read access ! 159 160 @return [com.sun.star.container.XNameAccess] 161 the configuration object 162 163 @throw [com.sun.star.uno.RuntimeException] 164 if config could not be opened successfully! 165 166 @threadsafe 167 */ 168 css::uno::Reference< css::container::XNameAccess > implts_getConfig() 169 throw(css::uno::RuntimeException); 170 171 //--------------------------------------- 172 /** @short makes the real identification of the module. 173 174 @descr It checks for the optional but preferred interface 175 XModule first. If this module does not exists at the 176 given component it tries to use XServiceInfo instead. 177 178 Note: This method tries to locate a suitable module name. 179 Nothing else. Selecting the right component and throwing suitable 180 exceptions must be done outside. 181 182 @see identify() 183 184 @param xComponent 185 the module for identification. 186 187 @return The identifier of the given module. 188 Can be empty if given component is not a real module ! 189 190 @threadsafe 191 */ 192 ::rtl::OUString implts_identify(const css::uno::Reference< css::uno::XInterface >& xComponent); 193 }; 194 195 } // namespace framework 196 197 #endif // __FRAMEWORK_SERVICES_MODULEMANAGER_HXX_ 198