1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef SD_FRAMEWORK_RESOURCE_FACTORY_MANAGER_HXX
25*b1cdbd2cSJim Jagielski #define SD_FRAMEWORK_RESOURCE_FACTORY_MANAGER_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XControllerManager.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XModuleController.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XResourceFactoryManager.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XURLTransformer.hpp>
31*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
32*b1cdbd2cSJim Jagielski #include <comphelper/stl_types.hxx>
33*b1cdbd2cSJim Jagielski #include <hash_map>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski namespace css = ::com::sun::star;
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski namespace sd { namespace framework {
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski /** Container of resource factories of the drawing framework.
40*b1cdbd2cSJim Jagielski */
41*b1cdbd2cSJim Jagielski class ResourceFactoryManager
42*b1cdbd2cSJim Jagielski {
43*b1cdbd2cSJim Jagielski public:
44*b1cdbd2cSJim Jagielski     ResourceFactoryManager (
45*b1cdbd2cSJim Jagielski         const css::uno::Reference<css::drawing::framework::XControllerManager>& rxManager);
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski     ~ResourceFactoryManager (void);
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski     /** Register a resource factory for one type of resource.
50*b1cdbd2cSJim Jagielski         @param rsURL
51*b1cdbd2cSJim Jagielski             The type of the resource that will be created by the factory.
52*b1cdbd2cSJim Jagielski         @param rxFactory
53*b1cdbd2cSJim Jagielski             The factory that will create resource objects of the specfied type.
54*b1cdbd2cSJim Jagielski     */
55*b1cdbd2cSJim Jagielski     void AddFactory (
56*b1cdbd2cSJim Jagielski         const ::rtl::OUString& rsURL,
57*b1cdbd2cSJim Jagielski         const css::uno::Reference<css::drawing::framework::XResourceFactory>& rxFactory)
58*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski     /** Unregister the specifed factory.
61*b1cdbd2cSJim Jagielski         @param rsURL
62*b1cdbd2cSJim Jagielski             Unregister only the factory for this URL.  When the same factory
63*b1cdbd2cSJim Jagielski             is registered for other URLs then these remain registered.
64*b1cdbd2cSJim Jagielski     */
65*b1cdbd2cSJim Jagielski     void RemoveFactoryForURL(
66*b1cdbd2cSJim Jagielski         const ::rtl::OUString& rsURL)
67*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski     /** Unregister the specified factory.
70*b1cdbd2cSJim Jagielski         @param rxFactory
71*b1cdbd2cSJim Jagielski             Unregister the this factory for all URLs that it has been
72*b1cdbd2cSJim Jagielski             registered for.
73*b1cdbd2cSJim Jagielski     */
74*b1cdbd2cSJim Jagielski     void RemoveFactoryForReference(
75*b1cdbd2cSJim Jagielski         const css::uno::Reference<css::drawing::framework::XResourceFactory>& rxFactory)
76*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski     /** Return a factory that can create resources specified by the given URL.
79*b1cdbd2cSJim Jagielski         @param rsCompleteURL
80*b1cdbd2cSJim Jagielski             This URL specifies the type of the resource.  It may contain arguments.
81*b1cdbd2cSJim Jagielski         @return
82*b1cdbd2cSJim Jagielski             When a factory for the specified URL has been registered by a
83*b1cdbd2cSJim Jagielski             previous call to AddFactory() then a reference to that factory
84*b1cdbd2cSJim Jagielski             is returned.  Otherwise an empty reference is returned.
85*b1cdbd2cSJim Jagielski     */
86*b1cdbd2cSJim Jagielski     css::uno::Reference<css::drawing::framework::XResourceFactory> GetFactory (
87*b1cdbd2cSJim Jagielski         const ::rtl::OUString& rsURL)
88*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski private:
91*b1cdbd2cSJim Jagielski     ::osl::Mutex maMutex;
92*b1cdbd2cSJim Jagielski     typedef ::std::hash_map<
93*b1cdbd2cSJim Jagielski         ::rtl::OUString,
94*b1cdbd2cSJim Jagielski         css::uno::Reference<css::drawing::framework::XResourceFactory>,
95*b1cdbd2cSJim Jagielski         ::comphelper::UStringHash,
96*b1cdbd2cSJim Jagielski         ::comphelper::UStringEqual> FactoryMap;
97*b1cdbd2cSJim Jagielski     FactoryMap maFactoryMap;
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski     typedef ::std::vector<
100*b1cdbd2cSJim Jagielski         ::std::pair<
101*b1cdbd2cSJim Jagielski             rtl::OUString,
102*b1cdbd2cSJim Jagielski             css::uno::Reference<css::drawing::framework::XResourceFactory> > >
103*b1cdbd2cSJim Jagielski         FactoryPatternList;
104*b1cdbd2cSJim Jagielski     FactoryPatternList maFactoryPatternList;
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski     css::uno::Reference<css::drawing::framework::XControllerManager> mxControllerManager;
107*b1cdbd2cSJim Jagielski     css::uno::Reference<css::util::XURLTransformer> mxURLTransformer;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski     /** Look up the factory for the given URL.
110*b1cdbd2cSJim Jagielski         @param rsURLBase
111*b1cdbd2cSJim Jagielski             The css::tools::URL.Main part of a URL. Arguments have to be
112*b1cdbd2cSJim Jagielski             stripped off by the caller.
113*b1cdbd2cSJim Jagielski         @return
114*b1cdbd2cSJim Jagielski             When the factory has not yet been added then return NULL.
115*b1cdbd2cSJim Jagielski     */
116*b1cdbd2cSJim Jagielski     css::uno::Reference<css::drawing::framework::XResourceFactory> FindFactory (
117*b1cdbd2cSJim Jagielski         const ::rtl::OUString& rsURLBase)
118*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
119*b1cdbd2cSJim Jagielski };
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski } } // end of namespace sd::framework
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski #endif
125