xref: /AOO41X/main/dbaccess/source/filter/xml/xmlfilter.hxx (revision 2e2212a7c22e96cf6f6fab0dd042c34a45a64bd6)
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 DBA_XMLFILTER_HXX
25 #define DBA_XMLFILTER_HXX
26 
27 #ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_
28 #include <com/sun/star/container/XNamed.hpp>
29 #endif
30 #ifndef _COM_SUN_STAR_DOCUMENT_XFILTER_HPP_
31 #include <com/sun/star/document/XFilter.hpp>
32 #endif
33 #ifndef _COM_SUN_STAR_DOCUMENT_XIMPORTER_HPP_
34 #include <com/sun/star/document/XImporter.hpp>
35 #endif
36 #ifndef _COM_SUN_STAR_DOCUMENT_XEXPORTER_HPP_
37 #include <com/sun/star/document/XExporter.hpp>
38 #endif
39 #ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_
40 #include <com/sun/star/lang/XInitialization.hpp>
41 #endif
42 #ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
43 #include <com/sun/star/lang/XServiceInfo.hpp>
44 #endif
45 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
46 #include <com/sun/star/beans/XPropertySet.hpp>
47 #endif
48 #ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_
49 #include <com/sun/star/lang/XComponent.hpp>
50 #endif
51 #ifndef _CPPUHELPER_IMPLBASE1_HXX_
52 #include <cppuhelper/implbase1.hxx>
53 #endif
54 #ifndef _CPPUHELPER_IMPLBASE5_HXX_
55 #include <cppuhelper/implbase5.hxx>
56 #endif
57 #ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_
58 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
59 #endif
60 #ifndef _COM_SUN_STAR_IO_XACTIVEDATASOURCE_HPP_
61 #include <com/sun/star/io/XActiveDataSource.hpp>
62 #endif
63 #ifndef _OSL_DIAGNOSE_H_
64 #include <osl/diagnose.h>
65 #endif
66 #ifndef _UNOTOOLS_TEMPFILE_HXX
67 #include <unotools/tempfile.hxx>
68 #endif
69 #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX
70 #include <unotools/localfilehelper.hxx>
71 #endif
72 #ifndef _UNTOOLS_UCBSTREAMHELPER_HXX
73 #include <unotools/ucbstreamhelper.hxx>
74 #endif
75 #ifndef _XMLOFF_XMLIMP_HXX
76 #include <xmloff/xmlimp.hxx>
77 #endif
78 #ifndef _DBASHARED_APITOOLS_HXX_
79 #include "apitools.hxx"
80 #endif
81 #ifndef _COMPHELPER_STLTYPES_HXX_
82 #include <comphelper/stl_types.hxx>
83 #endif
84 
85 #include <memory>
86 
87 namespace dbaxml
88 {
89 using namespace ::xmloff::token;
90 using namespace ::com::sun::star::uno;
91 using namespace ::com::sun::star::container;
92 using namespace ::com::sun::star::lang;
93 using namespace ::com::sun::star::beans;
94 using namespace ::com::sun::star::document;
95 using namespace ::com::sun::star::text;
96 using namespace ::com::sun::star::io;
97 using namespace ::com::sun::star::xml::sax;
98 
99 // -------------
100 // - ODBFilter -
101 // -------------
102 class ODBFilter : public SvXMLImport
103 {
104 public:
105     DECLARE_STL_USTRINGACCESS_MAP(Sequence<PropertyValue>,TPropertyNameMap);
106     typedef ::std::vector< ::com::sun::star::beans::PropertyValue> TInfoSequence;
107 private:
108     TPropertyNameMap                                m_aQuerySettings;
109     TPropertyNameMap                                m_aTablesSettings;
110     TInfoSequence                                   m_aInfoSequence;
111     Reference< XComponent >                         m_xSrcDoc;
112     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pDocElemTokenMap;
113     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pDatabaseElemTokenMap;
114     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pDataSourceElemTokenMap;
115     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pLoginElemTokenMap;
116     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pDatabaseDescriptionElemTokenMap;
117     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pDataSourceInfoElemTokenMap;
118     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pDocumentsElemTokenMap;
119     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pComponentElemTokenMap;
120     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pQueryElemTokenMap;
121     mutable ::std::auto_ptr<SvXMLTokenMap>          m_pColumnElemTokenMap;
122 
123     mutable UniReference < XMLPropertySetMapper >   m_xTableStylesPropertySetMapper;
124     mutable UniReference < XMLPropertySetMapper >   m_xColumnStylesPropertySetMapper;
125     mutable UniReference < XMLPropertySetMapper >   m_xCellStylesPropertySetMapper;
126     Reference<XPropertySet>                         m_xDataSource;
127     sal_Int32                                       m_nPreviewMode;
128     bool                                            m_bNewFormat;
129 
130     sal_Bool                            implImport( const Sequence< PropertyValue >& rDescriptor ) throw (RuntimeException);
131 
132 
133     /** fills the map with the Properties
134         @param  _rValue
135             The Any where the sequence resists in.
136         @param  _rMap
137             The map to fill.
138     */
139     void fillPropertyMap(const Any& _rValue,TPropertyNameMap& _rMap);
140 
141     SvXMLImportContext* CreateStylesContext(sal_uInt16 nPrefix,const ::rtl::OUString& rLocalName,
142                                      const Reference< XAttributeList>& xAttrList, sal_Bool bIsAutoStyle );
143     SvXMLImportContext* CreateScriptContext( const ::rtl::OUString& rLocalName );
144 
145 protected:
146     // SvXMLImport
147     virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix,
148                                       const ::rtl::OUString& rLocalName,
149                                       const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
150 
151     virtual ~ODBFilter()  throw();
152 public:
153 
154     ODBFilter( const Reference< XMultiServiceFactory >& _rxMSF );
155 
156     // XFilter
157     virtual sal_Bool SAL_CALL filter( const Sequence< PropertyValue >& rDescriptor ) throw(RuntimeException);
158 
159     // XServiceInfo
160     DECLARE_SERVICE_INFO_STATIC( );
161 
162     // helper class
163     virtual void SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps);
164     virtual void SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps);
165 
getORB()166     inline Reference< XMultiServiceFactory > getORB() { return getServiceFactory(); }
getDataSource() const167     inline Reference<XPropertySet> getDataSource() const { return m_xDataSource; }
168 
getQuerySettings() const169     inline const TPropertyNameMap& getQuerySettings() const { return m_aQuerySettings;}
getTableSettings() const170     inline const TPropertyNameMap& getTableSettings() const { return m_aTablesSettings;}
171 
172     const SvXMLTokenMap& GetDocElemTokenMap() const;
173     const SvXMLTokenMap& GetDatabaseElemTokenMap() const;
174     const SvXMLTokenMap& GetDataSourceElemTokenMap() const;
175     const SvXMLTokenMap& GetLoginElemTokenMap() const;
176     const SvXMLTokenMap& GetDatabaseDescriptionElemTokenMap() const;
177     const SvXMLTokenMap& GetDataSourceInfoElemTokenMap() const;
178     const SvXMLTokenMap& GetDocumentsElemTokenMap() const;
179     const SvXMLTokenMap& GetComponentElemTokenMap() const;
180     const SvXMLTokenMap& GetQueryElemTokenMap() const;
181     const SvXMLTokenMap& GetColumnElemTokenMap() const;
182 
183     UniReference < XMLPropertySetMapper > GetTableStylesPropertySetMapper() const;
184     UniReference < XMLPropertySetMapper > GetColumnStylesPropertySetMapper() const;
185     UniReference < XMLPropertySetMapper > GetCellStylesPropertySetMapper() const;
186 
187     /** add a Info to the sequence which will be appened to the data source
188         @param  _rInfo The property to append.
189     */
addInfo(const::com::sun::star::beans::PropertyValue & _rInfo)190     inline void addInfo(const ::com::sun::star::beans::PropertyValue& _rInfo)
191     {
192         m_aInfoSequence.push_back(_rInfo);
193     }
194 
195     void setPropertyInfo();
196 
197     const ::std::map< sal_uInt16,com::sun::star::beans::Property>& GetDataSourceInfoDefaulValueMap() const;
198 
isNewFormat() const199     inline bool isNewFormat() const { return m_bNewFormat; }
setNewFormat(bool _bNewFormat)200     inline void setNewFormat(bool _bNewFormat) { m_bNewFormat = _bNewFormat; }
201 };
202 
203 // -----------------------------------------------------------------------------
204 } // dbaxml
205 // -----------------------------------------------------------------------------
206 #endif // DBA_XMLFILTER_HXX
207