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 _COMPHELPER_MIMECONFIGHELPER_HXX_
25 #define _COMPHELPER_MIMECONFIGHELPER_HXX_
26 
27 #include <com/sun/star/uno/Reference.hxx>
28 #include <com/sun/star/uno/Sequence.hxx>
29 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30 #include <com/sun/star/container/XNameAccess.hpp>
31 #include <com/sun/star/container/XContainerQuery.hpp>
32 #include <com/sun/star/beans/NamedValue.hpp>
33 #include <com/sun/star/beans/PropertyValue.hpp>
34 #include <com/sun/star/embed/VerbDescriptor.hpp>
35 #include "comphelper/comphelperdllapi.h"
36 
37 
38 namespace comphelper {
39 
40 class COMPHELPER_DLLPUBLIC MimeConfigurationHelper
41 {
42     ::osl::Mutex m_aMutex;
43     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xFactory;
44     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xConfigProvider;
45 
46     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xObjectConfig;
47     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xVerbsConfig;
48     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xMediaTypeConfig;
49 
50     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xFilterFactory;
51 
52 public:
53 
54     MimeConfigurationHelper( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory );
55 
56 
57     static ::rtl::OUString GetStringClassIDRepresentation( const ::com::sun::star::uno::Sequence< sal_Int8 >& aClassID );
58 
59     static ::com::sun::star::uno::Sequence< sal_Int8 > GetSequenceClassIDRepresentation( const ::rtl::OUString& aClassID );
60 
61 
62     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
63                                             GetConfigurationByPath( const ::rtl::OUString& aPath );
64 
65     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetObjConfiguration();
66 
67     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetVerbsConfiguration();
68     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetMediaTypeConfiguration();
69 
70 
71     ::rtl::OUString GetDocServiceNameFromFilter( const ::rtl::OUString& aFilterName );
72 
73     ::rtl::OUString GetDocServiceNameFromMediaType( const ::rtl::OUString& aMediaType );
74 
75     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > GetObjPropsFromConfigEntry(
76                         const ::com::sun::star::uno::Sequence< sal_Int8 >& aClassID,
77                         const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& xObjectProps );
78 
79     sal_Bool GetVerbByShortcut( const ::rtl::OUString& aVerbShortcut,
80                                 ::com::sun::star::embed::VerbDescriptor& aDescriptor );
81 
82     ::rtl::OUString GetExplicitlyRegisteredObjClassID( const ::rtl::OUString& aMediaType );
83 
84 
85     // retrieving object description from configuration
86     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > GetObjectPropsByStringClassID(
87                                                                 const ::rtl::OUString& aStringClassID );
88 
89     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > GetObjectPropsByClassID(
90                                                 const ::com::sun::star::uno::Sequence< sal_Int8 >& aClassID );
91 
92     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > GetObjectPropsByMediaType(
93                                                 const ::rtl::OUString& aMediaType );
94 
95     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > GetObjectPropsByFilter(
96                                                 const ::rtl::OUString& aFilterName );
97 
98     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > GetObjectPropsByDocumentName(
99                                                 const ::rtl::OUString& aDocumentName );
100 
101     // retrieving object factory from configuration
102     ::rtl::OUString GetFactoryNameByStringClassID( const ::rtl::OUString& aStringClassID );
103     ::rtl::OUString GetFactoryNameByClassID( const ::com::sun::star::uno::Sequence< sal_Int8 >& aClassID );
104     ::rtl::OUString GetFactoryNameByDocumentName( const ::rtl::OUString& aDocName );
105     ::rtl::OUString GetFactoryNameByMediaType( const ::rtl::OUString& aMediaType );
106 
107     // typedetection related
108     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetFilterFactory();
109 
110     sal_Int32 GetFilterFlags( const ::rtl::OUString& aFilterName );
111 
112     ::rtl::OUString UpdateMediaDescriptorWithFilterName(
113                         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aMediaDescr,
114                         sal_Bool bIgnoreType );
115     ::rtl::OUString UpdateMediaDescriptorWithFilterName(
116                         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aMediaDescr,
117                         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aObject );
118     sal_Bool AddFilterNameCheckOwnFile(
119                         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aMediaDescr );
120 
121     ::rtl::OUString GetDefaultFilterFromServiceName( const ::rtl::OUString& aServName, sal_Int32 nVersion );
122 
123     ::rtl::OUString GetExportFilterFromImportFilter( const ::rtl::OUString& aImportFilterName );
124 
125     static ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SearchForFilter(
126                         const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerQuery >& xFilterQuery,
127                         const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aSearchRequest,
128                         sal_Int32 nMustFlags,
129                         sal_Int32 nDontFlags );
130 
131     static sal_Bool ClassIDsEqual( const ::com::sun::star::uno::Sequence< sal_Int8 >& aClassID1,
132                         const ::com::sun::star::uno::Sequence< sal_Int8 >& aClassID2 );
133     static ::com::sun::star::uno::Sequence< sal_Int8 > GetSequenceClassID( sal_uInt32 n1, sal_uInt16 n2, sal_uInt16 n3,
134                                                 sal_uInt8 b8, sal_uInt8 b9, sal_uInt8 b10, sal_uInt8 b11,
135                                                 sal_uInt8 b12, sal_uInt8 b13, sal_uInt8 b14, sal_uInt8 b15 );
136 
137     ::com::sun::star::uno::Sequence<sal_Int8> GetSequenceClassIDFromObjectName(const ::rtl::OUString& _sObjectName) ;
138 
139 };
140 
141 }
142 
143 #endif // _COMPHELPER_MIMECONFIGHELPER_HXX_
144 
145