xref: /AOO41X/main/framework/inc/xml/imagesdocumenthandler.hxx (revision 5758ad8ce74c9f4c352d679950be760456f756ea)
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_IMAGEDOCUMENTHANDLER_HXX_
25 #define FRAMEWORK_XML_IMAGEDOCUMENTHANDLER_HXX_
26 
27 #include <framework/fwedllapi.h>
28 
29 //_________________________________________________________________________________________________________________
30 //  interface includes
31 //_________________________________________________________________________________________________________________
32 
33 #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
34 
35 //_________________________________________________________________________________________________________________
36 //  other includes
37 //_________________________________________________________________________________________________________________
38 #include <xml/imagesconfiguration.hxx>
39 #include <threadhelp/threadhelpbase.hxx>
40 #include <rtl/ustring.hxx>
41 #include <cppuhelper/implbase1.hxx>
42 
43 #include <hash_map>
44 #include <stdtypes.h>
45 
46 
47 //_________________________________________________________________________________________________________________
48 //  namespace
49 //_________________________________________________________________________________________________________________
50 
51 namespace framework{
52 
53 //*****************************************************************************************************************
54 // Hash code function for using in all hash maps of follow implementation.
55 
56 class OReadImagesDocumentHandler : private ThreadHelpBase,  // Struct for right initalization of lock member! Must be first of baseclasses.
57                                    public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler >
58 {
59     public:
60         enum Image_XML_Entry
61         {
62             IMG_ELEMENT_IMAGECONTAINER,
63             IMG_ELEMENT_IMAGES,
64             IMG_ELEMENT_ENTRY,
65             IMG_ELEMENT_EXTERNALIMAGES,
66             IMG_ELEMENT_EXTERNALENTRY,
67             IMG_ATTRIBUTE_HREF,
68             IMG_ATTRIBUTE_MASKCOLOR,
69             IMG_ATTRIBUTE_COMMAND,
70             IMG_ATTRIBUTE_BITMAPINDEX,
71             IMG_ATTRIBUTE_MASKURL,
72             IMG_ATTRIBUTE_MASKMODE,
73             IMG_ATTRIBUTE_HIGHCONTRASTURL,
74             IMG_ATTRIBUTE_HIGHCONTRASTMASKURL,
75             IMG_XML_ENTRY_COUNT
76         };
77 
78         enum Image_XML_Namespace
79         {
80             IMG_NS_IMAGE,
81             IMG_NS_XLINK,
82             TBL_XML_NAMESPACES_COUNT
83         };
84 
85         OReadImagesDocumentHandler( ImageListsDescriptor& aItems );
86         virtual ~OReadImagesDocumentHandler();
87 
88         // XDocumentHandler
89         virtual void SAL_CALL startDocument(void)
90         throw ( ::com::sun::star::xml::sax::SAXException,
91                 ::com::sun::star::uno::RuntimeException );
92 
93         virtual void SAL_CALL endDocument(void)
94         throw(  ::com::sun::star::xml::sax::SAXException,
95                 ::com::sun::star::uno::RuntimeException );
96 
97         virtual void SAL_CALL startElement(
98             const rtl::OUString& aName,
99             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
100         throw(  ::com::sun::star::xml::sax::SAXException,
101                 ::com::sun::star::uno::RuntimeException );
102 
103         virtual void SAL_CALL endElement(const rtl::OUString& aName)
104         throw(  ::com::sun::star::xml::sax::SAXException,
105                 ::com::sun::star::uno::RuntimeException );
106 
107         virtual void SAL_CALL characters(const rtl::OUString& aChars)
108         throw(  ::com::sun::star::xml::sax::SAXException,
109                 ::com::sun::star::uno::RuntimeException );
110 
111         virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces)
112         throw(  ::com::sun::star::xml::sax::SAXException,
113                 ::com::sun::star::uno::RuntimeException );
114 
115         virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget,
116                                                     const rtl::OUString& aData)
117         throw(  ::com::sun::star::xml::sax::SAXException,
118                 ::com::sun::star::uno::RuntimeException );
119 
120         virtual void SAL_CALL setDocumentLocator(
121             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator)
122         throw(  ::com::sun::star::xml::sax::SAXException,
123                 ::com::sun::star::uno::RuntimeException );
124 
125     private:
126         ::rtl::OUString getErrorLineString();
127 
128         class ImageHashMap : public ::std::hash_map< ::rtl::OUString        ,
129                                                      Image_XML_Entry        ,
130                                                      rtl::OUStringHash,
131                                                      ::std::equal_to< ::rtl::OUString > >
132         {
133             public:
free()134                 inline void free()
135                 {
136                     ImageHashMap().swap( *this );
137                 }
138         };
139 
140         sal_Bool                                                                    m_bImageContainerStartFound;
141         sal_Bool                                                                    m_bImageContainerEndFound;
142         sal_Bool                                                                    m_bImagesStartFound;
143         sal_Bool                                                                    m_bImagesEndFound;
144         sal_Bool                                                                    m_bImageStartFound;
145         sal_Bool                                                                    m_bExternalImagesStartFound;
146         sal_Bool                                                                    m_bExternalImagesEndFound;
147         sal_Bool                                                                    m_bExternalImageStartFound;
148         sal_Int32                                                                   m_nHashMaskModeBitmap;
149         sal_Int32                                                                   m_nHashMaskModeColor;
150         ImageHashMap                                                                m_aImageMap;
151         ImageListsDescriptor&                                                       m_aImageList;
152         ImageListItemDescriptor*                                                    m_pImages;
153         ExternalImageItemListDescriptor*                                            m_pExternalImages;
154         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >    m_xLocator;
155 };
156 
157 class OWriteImagesDocumentHandler : private ThreadHelpBase // Struct for right initalization of lock member! Must be first of baseclasses.
158 {
159     public:
160         OWriteImagesDocumentHandler(
161             const ImageListsDescriptor& aItems,
162             ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > );
163         virtual ~OWriteImagesDocumentHandler();
164 
165         void WriteImagesDocument() throw
166             ( ::com::sun::star::xml::sax::SAXException,
167               ::com::sun::star::uno::RuntimeException );
168 
169     protected:
170         virtual void WriteImageList( const ImageListItemDescriptor* ) throw
171             ( ::com::sun::star::xml::sax::SAXException,
172               ::com::sun::star::uno::RuntimeException );
173 
174         virtual void WriteExternalImageList( const ExternalImageItemListDescriptor* ) throw
175             ( ::com::sun::star::xml::sax::SAXException,
176               ::com::sun::star::uno::RuntimeException );
177 
178         virtual void WriteImage( const ImageItemDescriptor* ) throw
179             ( ::com::sun::star::xml::sax::SAXException,
180               ::com::sun::star::uno::RuntimeException );
181 
182         virtual void WriteExternalImage( const ExternalImageItemDescriptor* ) throw
183             ( ::com::sun::star::xml::sax::SAXException,
184               ::com::sun::star::uno::RuntimeException );
185 
186         const ImageListsDescriptor&                                                         m_aImageListsItems;
187         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >    m_xWriteDocumentHandler;
188         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >      m_xEmptyList;
189         ::rtl::OUString                                                                     m_aXMLXlinkNS;
190         ::rtl::OUString                                                                     m_aXMLImageNS;
191         ::rtl::OUString                                                                     m_aAttributeType;
192         ::rtl::OUString                                                                     m_aAttributeXlinkType;
193         ::rtl::OUString                                                                     m_aAttributeValueSimple;
194 };
195 
196 } // namespace framework
197 
198 #endif
199