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_ACCELERATORCONFIGURATIONREADER_HXX_
25 #define _FRAMEWORK_XML_ACCELERATORCONFIGURATIONREADER_HXX_
26 
27 //_______________________________________________
28 // own includes
29 
30 #include <accelerators/acceleratorcache.hxx>
31 #include <accelerators/keymapping.hxx>
32 #include <macros/xinterface.hxx>
33 #include <threadhelp/threadhelpbase.hxx>
34 #include <general.h>
35 
36 //_______________________________________________
37 // interface includes
38 
39 #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_
40 #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
41 #endif
42 
43 #ifndef __COM_SUN_STAR_XML_SAX_XLOCATOR_HPP_
44 #include <com/sun/star/xml/sax/XLocator.hpp>
45 #endif
46 
47 //_______________________________________________
48 // other includes
49 #include <salhelper/singletonref.hxx>
50 #include <cppuhelper/weak.hxx>
51 #include <rtl/ustring.hxx>
52 
53 namespace framework{
54 
55 class AcceleratorConfigurationReader : public  css::xml::sax::XDocumentHandler
56                                      , private ThreadHelpBase
57                                      , public  ::cppu::OWeakObject
58 {
59     //-------------------------------------------
60     // const, types
61 
62     private:
63 
64         //---------------------------------------
65         /** @short  classification of XML elements. */
66 		enum EXMLElement
67 		{
68 			E_ELEMENT_ACCELERATORLIST,
69 			E_ELEMENT_ITEM
70         };
71 
72         //---------------------------------------
73         /** @short  classification of XML attributes. */
74         enum EXMLAttribute
75         {
76 			E_ATTRIBUTE_KEYCODE,
77 			E_ATTRIBUTE_MOD_SHIFT,
78 			E_ATTRIBUTE_MOD_MOD1,
79 			E_ATTRIBUTE_MOD_MOD2,
80                         E_ATTRIBUTE_MOD_MOD3,
81 			E_ATTRIBUTE_URL
82 		};
83 
84         //---------------------------------------
85         /** @short  some namespace defines */
86 		enum EAcceleratorXMLNamespace
87 		{
88 			E_NAMESPACE_ACCEL,
89 			E_NAMESPACE_XLINK
90 		};
91 
92     //-------------------------------------------
93     // member
94 
95     private:
96 
97         //---------------------------------------
98         /** @short  needed to read the xml configuration. */
99         css::uno::Reference< css::xml::sax::XDocumentHandler > m_xReader;
100 
101         //---------------------------------------
102         /** @short  reference to the outside container, where this
103                     reader/writer must work on. */
104         AcceleratorCache& m_rContainer;
105 
106         //---------------------------------------
107         /** @short  used to detect if an accelerator list
108                     occures recursive inside xml. */
109 		sal_Bool m_bInsideAcceleratorList;
110 
111         //---------------------------------------
112         /** @short  used to detect if an accelerator item
113                     occures recursive inside xml. */
114 		sal_Bool m_bInsideAcceleratorItem;
115 
116         //---------------------------------------
117         /** @short  is used to map key codes to its
118                     string representation.
119 
120             @descr  To perform this operatio is
121                     created only one times and holded
122                     alive forever ...*/
123         ::salhelper::SingletonRef< KeyMapping > m_rKeyMapping;
124 
125         //---------------------------------------
126         /** @short  provide informations abou the parsing state.
127 
128             @descr  We use it to find out the line and column, where
129                     an error occur.
130           */
131 		css::uno::Reference< css::xml::sax::XLocator > m_xLocator;
132 
133 /*        SfxAcceleratorItemList& m_aReadAcceleratorList;
134 */
135 
136     //-------------------------------------------
137     // interface
138 
139 	public:
140 
141         //---------------------------------------
142         /** @short  connect this new reader/writer instance
143                     to an outside container, which should be used
144                     flushed to the underlying XML configuration or
145                     filled from there.
146 
147             @param  rContainer
148                     a reference to the outside container.
149           */
150         AcceleratorConfigurationReader(AcceleratorCache& rContainer);
151 
152         //---------------------------------------
153         /** @short  does nothing real ... */
154 		virtual ~AcceleratorConfigurationReader();
155 
156         //---------------------------------------
157         // XInterface
158         FWK_DECLARE_XINTERFACE
159 
160         //---------------------------------------
161 		// XDocumentHandler
162 		virtual void SAL_CALL startDocument()
163 			throw(css::xml::sax::SAXException,
164                   css::uno::RuntimeException );
165 
166 		virtual void SAL_CALL endDocument()
167 			throw(css::xml::sax::SAXException,
168                   css::uno::RuntimeException );
169 
170 		virtual void SAL_CALL startElement(const ::rtl::OUString&                                      sElement      ,
171 			                               const css::uno::Reference< css::xml::sax::XAttributeList >& xAttributeList)
172 			throw(css::xml::sax::SAXException,
173                   css::uno::RuntimeException );
174 
175 		virtual void SAL_CALL endElement(const ::rtl::OUString& sElement)
176             throw(css::xml::sax::SAXException,
177                   css::uno::RuntimeException );
178 
179 		virtual void SAL_CALL characters(const ::rtl::OUString& sChars)
180 			throw(css::xml::sax::SAXException,
181                   css::uno::RuntimeException );
182 
183 		virtual void SAL_CALL ignorableWhitespace(const ::rtl::OUString& sWhitespaces)
184 			throw(css::xml::sax::SAXException,
185                   css::uno::RuntimeException );
186 
187 		virtual void SAL_CALL processingInstruction(const ::rtl::OUString& sTarget,
188                                                     const ::rtl::OUString& sData  )
189 			throw(css::xml::sax::SAXException,
190                   css::uno::RuntimeException );
191 
192 		virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator >& xLocator)
193 			throw(css::xml::sax::SAXException,
194                   css::uno::RuntimeException );
195 
196     //-------------------------------------------
197     // helper
198 
199     private:
200 
201         //---------------------------------------
202         /** TODO document me */
203 		static EXMLElement implst_classifyElement(const ::rtl::OUString& sElement);
204 
205         //---------------------------------------
206         /** TODO document me */
207 		static EXMLAttribute implst_classifyAttribute(const ::rtl::OUString& sAttribute);
208 
209         //---------------------------------------
210         /** TODO document me */
211 		::rtl::OUString implts_getErrorLineString();
212 };
213 
214 } // namespace framework
215 
216 #endif // _FRAMEWORK_XML_ACCELERATORCONFIGURATIONREADER_HXX_
217