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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_desktop.hxx"
26
27 #include "rtl/string.h"
28 #include "rtl/bootstrap.hxx"
29 #include "cppuhelper/exc_hlp.hxx"
30 #include "com/sun/star/uno/XComponentContext.hpp"
31 #include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
32 #include "com/sun/star/xml/xpath/XXPathAPI.hpp"
33 #include "dp_misc.h"
34
35 #include "dp_extbackenddb.hxx"
36
37
38 namespace css = ::com::sun::star;
39 using namespace ::com::sun::star::uno;
40 using ::rtl::OUString;
41
42 #define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/extension-registry/2010"
43 #define NS_PREFIX "ext"
44 #define ROOT_ELEMENT_NAME "extension-backend-db"
45 #define KEY_ELEMENT_NAME "extension"
46
47 namespace dp_registry {
48 namespace backend {
49 namespace bundle {
50
ExtensionBackendDb(Reference<XComponentContext> const & xContext,::rtl::OUString const & url)51 ExtensionBackendDb::ExtensionBackendDb(
52 Reference<XComponentContext> const & xContext,
53 ::rtl::OUString const & url):BackendDb(xContext, url)
54 {
55
56 }
57
getDbNSName()58 OUString ExtensionBackendDb::getDbNSName()
59 {
60 return OUSTR(EXTENSION_REG_NS);
61 }
62
getNSPrefix()63 OUString ExtensionBackendDb::getNSPrefix()
64 {
65 return OUSTR(NS_PREFIX);
66 }
67
getRootElementName()68 OUString ExtensionBackendDb::getRootElementName()
69 {
70 return OUSTR(ROOT_ELEMENT_NAME);
71 }
72
getKeyElementName()73 OUString ExtensionBackendDb::getKeyElementName()
74 {
75 return OUSTR(KEY_ELEMENT_NAME);
76 }
77
addEntry(::rtl::OUString const & url,Data const & data)78 void ExtensionBackendDb::addEntry(::rtl::OUString const & url, Data const & data)
79 {
80 try{
81 //reactive revoked entry if possible.
82 if (!activateEntry(url))
83 {
84 Reference<css::xml::dom::XNode> extensionNodeNode = writeKeyElement(url);
85 writeVectorOfPair(
86 data.items,
87 OUSTR("extension-items"),
88 OUSTR("item"),
89 OUSTR("url"),
90 OUSTR("media-type"),
91 extensionNodeNode);
92 save();
93 }
94 }
95 catch(css::uno::Exception &)
96 {
97 Any exc( ::cppu::getCaughtException() );
98 throw css::deployment::DeploymentException(
99 OUSTR("Extension Manager: failed to write data entry in backend db: ") +
100 m_urlDb, 0, exc);
101 }
102 }
103
getEntry(::rtl::OUString const & url)104 ExtensionBackendDb::Data ExtensionBackendDb::getEntry(::rtl::OUString const & url)
105 {
106 try
107 {
108 ExtensionBackendDb::Data retData;
109 Reference<css::xml::dom::XNode> aNode = getKeyElement(url);
110
111 if (aNode.is())
112 {
113 retData.items =
114 readVectorOfPair(
115 aNode,
116 OUSTR("extension-items"),
117 OUSTR("item"),
118 OUSTR("url"),
119 OUSTR("media-type"));
120 }
121 return retData;
122 }
123 catch(css::uno::Exception &)
124 {
125 Any exc( ::cppu::getCaughtException() );
126 throw css::deployment::DeploymentException(
127 OUSTR("Extension Manager: failed to read data entry in backend db: ") +
128 m_urlDb, 0, exc);
129 }
130 }
131
132 } // namespace bundle
133 } // namespace backend
134 } // namespace dp_registry
135
136