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_XML_EVENTSDOCUMENTHANDLER_HXX_ 25 #define __FRAMEWORK_XML_EVENTSDOCUMENTHANDLER_HXX_ 26 27 #ifndef __FRAMEWORK_XML_TOOLBOXCONFIGURATION_HXX_ 28 #include <framework/eventsconfiguration.hxx> 29 #endif 30 31 //_________________________________________________________________________________________________________________ 32 // interface includes 33 //_________________________________________________________________________________________________________________ 34 35 #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_ 36 #include <com/sun/star/xml/sax/XDocumentHandler.hpp> 37 #endif 38 39 //_________________________________________________________________________________________________________________ 40 // other includes 41 //_________________________________________________________________________________________________________________ 42 #include <threadhelp/threadhelpbase.hxx> 43 #include <rtl/ustring.hxx> 44 #include <cppuhelper/implbase1.hxx> 45 46 #include <hash_map> 47 #include <stdtypes.h> 48 49 #include <framework/fwedllapi.h> 50 //_________________________________________________________________________________________________________________ 51 // namespace 52 //_________________________________________________________________________________________________________________ 53 54 namespace framework{ 55 56 //***************************************************************************************************************** 57 // Hash code function for using in all hash maps of follow implementation. 58 59 class FWE_DLLPUBLIC OReadEventsDocumentHandler : private ThreadHelpBase, // Struct for right initialization of lock member! Must be first of baseclasses. 60 public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler > 61 { 62 public: 63 enum Events_XML_Entry 64 { 65 EV_ELEMENT_EVENTS, 66 EV_ELEMENT_EVENT, 67 EV_ATTRIBUTE_TYPE, 68 EV_ATTRIBUTE_NAME, 69 XL_ATTRIBUTE_HREF, 70 XL_ATTRIBUTE_TYPE, 71 EV_ATTRIBUTE_MACRONAME, 72 EV_ATTRIBUTE_LIBRARY, 73 EV_XML_ENTRY_COUNT 74 }; 75 76 enum Event_XML_Namespace 77 { 78 EV_NS_EVENT, 79 EV_NS_XLINK, 80 EV_XML_NAMESPACES_COUNT 81 }; 82 83 OReadEventsDocumentHandler( EventsConfig& aItems ); 84 85 86 // XDocumentHandler 87 virtual void SAL_CALL startDocument(void) 88 throw ( ::com::sun::star::xml::sax::SAXException, 89 ::com::sun::star::uno::RuntimeException ); 90 91 virtual void SAL_CALL endDocument(void) 92 throw( ::com::sun::star::xml::sax::SAXException, 93 ::com::sun::star::uno::RuntimeException ); 94 95 virtual void SAL_CALL startElement( 96 const rtl::OUString& aName, 97 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs) 98 throw( ::com::sun::star::xml::sax::SAXException, 99 ::com::sun::star::uno::RuntimeException ); 100 101 virtual void SAL_CALL endElement(const rtl::OUString& aName) 102 throw( ::com::sun::star::xml::sax::SAXException, 103 ::com::sun::star::uno::RuntimeException ); 104 105 virtual void SAL_CALL characters(const rtl::OUString& aChars) 106 throw( ::com::sun::star::xml::sax::SAXException, 107 ::com::sun::star::uno::RuntimeException ); 108 109 virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces) 110 throw( ::com::sun::star::xml::sax::SAXException, 111 ::com::sun::star::uno::RuntimeException ); 112 113 virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget, 114 const rtl::OUString& aData) 115 throw( ::com::sun::star::xml::sax::SAXException, 116 ::com::sun::star::uno::RuntimeException ); 117 118 virtual void SAL_CALL setDocumentLocator( 119 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator) 120 throw( ::com::sun::star::xml::sax::SAXException, 121 ::com::sun::star::uno::RuntimeException ); 122 123 protected: 124 virtual ~OReadEventsDocumentHandler(); 125 126 private: 127 ::rtl::OUString getErrorLineString(); 128 129 class EventsHashMap : public ::std::hash_map< ::rtl::OUString , 130 Events_XML_Entry , 131 rtl::OUStringHash, 132 ::std::equal_to< ::rtl::OUString > > 133 { 134 public: free()135 inline void free() 136 { 137 EventsHashMap().swap( *this ); 138 } 139 }; 140 141 sal_Bool m_bEventsStartFound; 142 sal_Bool m_bEventsEndFound; 143 sal_Bool m_bEventStartFound; 144 EventsHashMap m_aEventsMap; 145 EventsConfig& m_aEventItems; 146 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > m_xLocator; 147 }; 148 149 class FWE_DLLPUBLIC OWriteEventsDocumentHandler : private ThreadHelpBase // Struct for right initialization of lock member! Must be first of baseclasses. 150 { 151 public: 152 OWriteEventsDocumentHandler( 153 const EventsConfig& aItems, 154 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > ); 155 virtual ~OWriteEventsDocumentHandler(); 156 157 void WriteEventsDocument() throw 158 ( ::com::sun::star::xml::sax::SAXException, 159 ::com::sun::star::uno::RuntimeException ); 160 161 protected: 162 virtual void WriteEvent( 163 const ::rtl::OUString& aEventName, 164 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aPropertyValue ) throw 165 ( ::com::sun::star::xml::sax::SAXException, 166 ::com::sun::star::uno::RuntimeException ); 167 168 const EventsConfig& m_aItems; 169 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xWriteDocumentHandler; 170 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > m_xEmptyList; 171 ::rtl::OUString m_aXMLEventNS; 172 ::rtl::OUString m_aXMLXlinkNS; 173 ::rtl::OUString m_aAttributeType; 174 ::rtl::OUString m_aAttributeURL; 175 ::rtl::OUString m_aAttributeLanguage; 176 ::rtl::OUString m_aAttributeLinkType; 177 ::rtl::OUString m_aAttributeMacroName; 178 ::rtl::OUString m_aAttributeLibrary; 179 ::rtl::OUString m_aAttributeName; 180 }; 181 182 } // namespace framework 183 184 #endif 185