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_compbackenddb.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/component-registry/2010" 43 #define NS_PREFIX "comp" 44 #define ROOT_ELEMENT_NAME "component-backend-db" 45 #define KEY_ELEMENT_NAME "component" 46 47 namespace dp_registry { 48 namespace backend { 49 namespace component { 50 51 ComponentBackendDb::ComponentBackendDb( 52 Reference<XComponentContext> const & xContext, 53 ::rtl::OUString const & url):BackendDb(xContext, url) 54 { 55 56 } 57 58 OUString ComponentBackendDb::getDbNSName() 59 { 60 return OUSTR(EXTENSION_REG_NS); 61 } 62 63 OUString ComponentBackendDb::getNSPrefix() 64 { 65 return OUSTR(NS_PREFIX); 66 } 67 68 OUString ComponentBackendDb::getRootElementName() 69 { 70 return OUSTR(ROOT_ELEMENT_NAME); 71 } 72 73 OUString ComponentBackendDb::getKeyElementName() 74 { 75 return OUSTR(KEY_ELEMENT_NAME); 76 } 77 78 void ComponentBackendDb::addEntry(::rtl::OUString const & url, Data const & data) 79 { 80 try{ 81 if (!activateEntry(url)) 82 { 83 Reference<css::xml::dom::XNode> componentNode = writeKeyElement(url); 84 writeSimpleElement(OUSTR("java-type-library"), 85 OUString::valueOf((sal_Bool) data.javaTypeLibrary), 86 componentNode); 87 88 writeSimpleList( 89 data.implementationNames, 90 OUSTR("implementation-names"), 91 OUSTR("name"), 92 componentNode); 93 94 writeVectorOfPair( 95 data.singletons, 96 OUSTR("singletons"), 97 OUSTR("item"), 98 OUSTR("key"), 99 OUSTR("value"), 100 componentNode); 101 102 save(); 103 } 104 } 105 catch(css::uno::Exception &) 106 { 107 Any exc( ::cppu::getCaughtException() ); 108 throw css::deployment::DeploymentException( 109 OUSTR("Extension Manager: failed to write data entry in backend db: ") + 110 m_urlDb, 0, exc); 111 } 112 } 113 114 ComponentBackendDb::Data ComponentBackendDb::getEntry(::rtl::OUString const & url) 115 { 116 try 117 { 118 ComponentBackendDb::Data retData; 119 Reference<css::xml::dom::XNode> aNode = getKeyElement(url); 120 if (aNode.is()) 121 { 122 bool bJava = readSimpleElement(OUSTR("java-type-library"), aNode) 123 .equals(OUSTR("true")) ? true : false; 124 retData.javaTypeLibrary = bJava; 125 126 retData.implementationNames = 127 readList( 128 aNode, 129 OUSTR("implementation-names"), 130 OUSTR("name")); 131 132 retData.singletons = 133 readVectorOfPair( 134 aNode, 135 OUSTR("singletons"), 136 OUSTR("item"), 137 OUSTR("key"), 138 OUSTR("value")); 139 } 140 return retData; 141 } 142 catch(css::uno::Exception &) 143 { 144 Any exc( ::cppu::getCaughtException() ); 145 throw css::deployment::DeploymentException( 146 OUSTR("Extension Manager: failed to read data entry in backend db: ") + 147 m_urlDb, 0, exc); 148 } 149 } 150 151 152 } // namespace bundle 153 } // namespace backend 154 } // namespace dp_registry 155 156