xref: /aoo4110/main/configmgr/source/update.cxx (revision b1cdbd2c)
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 #include "precompiled_configmgr.hxx"
25*b1cdbd2cSJim Jagielski #include "sal/config.h"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <set>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "boost/noncopyable.hpp"
30*b1cdbd2cSJim Jagielski #include "com/sun/star/configuration/XUpdate.hpp"
31*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Reference.hxx"
32*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/RuntimeException.hpp"
33*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Sequence.hxx"
34*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/XComponentContext.hpp"
35*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/XInterface.hpp"
36*b1cdbd2cSJim Jagielski #include "cppuhelper/implbase1.hxx"
37*b1cdbd2cSJim Jagielski #include "cppuhelper/weak.hxx"
38*b1cdbd2cSJim Jagielski #include "osl/mutex.hxx"
39*b1cdbd2cSJim Jagielski #include "rtl/ref.hxx"
40*b1cdbd2cSJim Jagielski #include "rtl/ustring.h"
41*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx"
42*b1cdbd2cSJim Jagielski #include "sal/types.h"
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #include "broadcaster.hxx"
45*b1cdbd2cSJim Jagielski #include "components.hxx"
46*b1cdbd2cSJim Jagielski #include "lock.hxx"
47*b1cdbd2cSJim Jagielski #include "modifications.hxx"
48*b1cdbd2cSJim Jagielski #include "rootaccess.hxx"
49*b1cdbd2cSJim Jagielski #include "update.hxx"
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski namespace configmgr { namespace update {
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski namespace {
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski namespace css = com::sun::star;
56*b1cdbd2cSJim Jagielski 
seqToSet(css::uno::Sequence<rtl::OUString> const & sequence)57*b1cdbd2cSJim Jagielski std::set< rtl::OUString > seqToSet(
58*b1cdbd2cSJim Jagielski     css::uno::Sequence< rtl::OUString > const & sequence)
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski     return std::set< rtl::OUString >(
61*b1cdbd2cSJim Jagielski         sequence.getConstArray(),
62*b1cdbd2cSJim Jagielski         sequence.getConstArray() + sequence.getLength());
63*b1cdbd2cSJim Jagielski }
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski class Service:
66*b1cdbd2cSJim Jagielski     public cppu::WeakImplHelper1< css::configuration::XUpdate >,
67*b1cdbd2cSJim Jagielski     private boost::noncopyable
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski public:
Service(css::uno::Reference<css::uno::XComponentContext> const context)70*b1cdbd2cSJim Jagielski     Service(css::uno::Reference< css::uno::XComponentContext > const context):
71*b1cdbd2cSJim Jagielski         context_(context)
72*b1cdbd2cSJim Jagielski     {
73*b1cdbd2cSJim Jagielski         OSL_ASSERT(context.is());
74*b1cdbd2cSJim Jagielski     }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski private:
~Service()77*b1cdbd2cSJim Jagielski     virtual ~Service() {}
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski     virtual void SAL_CALL insertExtensionXcsFile(
80*b1cdbd2cSJim Jagielski         sal_Bool shared, rtl::OUString const & fileUri)
81*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski     virtual void SAL_CALL insertExtensionXcuFile(
84*b1cdbd2cSJim Jagielski         sal_Bool shared, rtl::OUString const & fileUri)
85*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeExtensionXcuFile(rtl::OUString const & fileUri)
88*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski     virtual void SAL_CALL insertModificationXcuFile(
91*b1cdbd2cSJim Jagielski         rtl::OUString const & fileUri,
92*b1cdbd2cSJim Jagielski         css::uno::Sequence< rtl::OUString > const & includedPaths,
93*b1cdbd2cSJim Jagielski         css::uno::Sequence< rtl::OUString > const & excludedPaths)
94*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski     css::uno::Reference< css::uno::XComponentContext > context_;
97*b1cdbd2cSJim Jagielski };
98*b1cdbd2cSJim Jagielski 
insertExtensionXcsFile(sal_Bool shared,rtl::OUString const & fileUri)99*b1cdbd2cSJim Jagielski void Service::insertExtensionXcsFile(
100*b1cdbd2cSJim Jagielski     sal_Bool shared, rtl::OUString const & fileUri)
101*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski     osl::MutexGuard g(lock);
104*b1cdbd2cSJim Jagielski     Components::getSingleton(context_).insertExtensionXcsFile(shared, fileUri);
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski 
insertExtensionXcuFile(sal_Bool shared,rtl::OUString const & fileUri)107*b1cdbd2cSJim Jagielski void Service::insertExtensionXcuFile(
108*b1cdbd2cSJim Jagielski     sal_Bool shared, rtl::OUString const & fileUri)
109*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski     Broadcaster bc;
112*b1cdbd2cSJim Jagielski     {
113*b1cdbd2cSJim Jagielski         osl::MutexGuard g(lock);
114*b1cdbd2cSJim Jagielski         Components & components = Components::getSingleton(context_);
115*b1cdbd2cSJim Jagielski         Modifications mods;
116*b1cdbd2cSJim Jagielski         components.insertExtensionXcuFile(shared, fileUri, &mods);
117*b1cdbd2cSJim Jagielski         components.initGlobalBroadcaster(
118*b1cdbd2cSJim Jagielski             mods, rtl::Reference< RootAccess >(), &bc);
119*b1cdbd2cSJim Jagielski     }
120*b1cdbd2cSJim Jagielski     bc.send();
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski 
removeExtensionXcuFile(rtl::OUString const & fileUri)123*b1cdbd2cSJim Jagielski void Service::removeExtensionXcuFile(rtl::OUString const & fileUri)
124*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski     Broadcaster bc;
127*b1cdbd2cSJim Jagielski     {
128*b1cdbd2cSJim Jagielski         osl::MutexGuard g(lock);
129*b1cdbd2cSJim Jagielski         Components & components = Components::getSingleton(context_);
130*b1cdbd2cSJim Jagielski         Modifications mods;
131*b1cdbd2cSJim Jagielski         components.removeExtensionXcuFile(fileUri, &mods);
132*b1cdbd2cSJim Jagielski         components.initGlobalBroadcaster(
133*b1cdbd2cSJim Jagielski             mods, rtl::Reference< RootAccess >(), &bc);
134*b1cdbd2cSJim Jagielski     }
135*b1cdbd2cSJim Jagielski     bc.send();
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski 
insertModificationXcuFile(rtl::OUString const & fileUri,css::uno::Sequence<rtl::OUString> const & includedPaths,css::uno::Sequence<rtl::OUString> const & excludedPaths)138*b1cdbd2cSJim Jagielski void Service::insertModificationXcuFile(
139*b1cdbd2cSJim Jagielski     rtl::OUString const & fileUri,
140*b1cdbd2cSJim Jagielski     css::uno::Sequence< rtl::OUString > const & includedPaths,
141*b1cdbd2cSJim Jagielski     css::uno::Sequence< rtl::OUString > const & excludedPaths)
142*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
143*b1cdbd2cSJim Jagielski {
144*b1cdbd2cSJim Jagielski     Broadcaster bc;
145*b1cdbd2cSJim Jagielski     {
146*b1cdbd2cSJim Jagielski         osl::MutexGuard g(lock);
147*b1cdbd2cSJim Jagielski         Components & components = Components::getSingleton(context_);
148*b1cdbd2cSJim Jagielski         Modifications mods;
149*b1cdbd2cSJim Jagielski         components.insertModificationXcuFile(
150*b1cdbd2cSJim Jagielski             fileUri, seqToSet(includedPaths), seqToSet(excludedPaths), &mods);
151*b1cdbd2cSJim Jagielski         components.initGlobalBroadcaster(
152*b1cdbd2cSJim Jagielski             mods, rtl::Reference< RootAccess >(), &bc);
153*b1cdbd2cSJim Jagielski     }
154*b1cdbd2cSJim Jagielski     bc.send();
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski }
158*b1cdbd2cSJim Jagielski 
create(css::uno::Reference<css::uno::XComponentContext> const & context)159*b1cdbd2cSJim Jagielski css::uno::Reference< css::uno::XInterface > create(
160*b1cdbd2cSJim Jagielski     css::uno::Reference< css::uno::XComponentContext > const & context)
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski     return static_cast< cppu::OWeakObject * >(new Service(context));
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski 
getImplementationName()165*b1cdbd2cSJim Jagielski rtl::OUString getImplementationName() {
166*b1cdbd2cSJim Jagielski     return rtl::OUString(
167*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.Update"));
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()170*b1cdbd2cSJim Jagielski css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
171*b1cdbd2cSJim Jagielski     rtl::OUString name(
172*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM(
173*b1cdbd2cSJim Jagielski             "com.sun.star.configuration.Update_Service"));
174*b1cdbd2cSJim Jagielski     return css::uno::Sequence< rtl::OUString >(&name, 1);
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski } }
178