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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_framework.hxx"
26
27 //_________________________________________________________________________________________________________________
28 // my own includes
29 //_________________________________________________________________________________________________________________
30 #include <classes/servicemanager.hxx>
31 #include <classes/filtercache.hxx>
32 #include <macros/generic.hxx>
33 #include <macros/debug.hxx>
34 #include <services.h>
35
36 //_________________________________________________________________________________________________________________
37 // interface includes
38 //_________________________________________________________________________________________________________________
39 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
40 #include <com/sun/star/container/XNameContainer.hpp>
41 #include <com/sun/star/beans/PropertyValue.hpp>
42
43 //_________________________________________________________________________________________________________________
44 // other includes
45 //_________________________________________________________________________________________________________________
46 #include <comphelper/processfactory.hxx>
47 #include <vos/process.hxx>
48 #include <rtl/ustring.hxx>
49 #include <rtl/ustrbuf.hxx>
50
51 #include <vcl/event.hxx>
52 #include <vcl/svapp.hxx>
53 #include <vcl/wrkwin.hxx>
54 #include <vcl/msgbox.hxx>
55 #include <stdio.h>
56
57 //_________________________________________________________________________________________________________________
58 // const
59 //_________________________________________________________________________________________________________________
60
61 #define RDBFILE DECLARE_ASCII("typecfg.rdb" )
62 #define ARGUMENT_GENERATE_CFGVIEW DECLARE_ASCII("-cfgview" )
63 #define ARGUMENT_CHECK_FILTERREGISTRATION DECLARE_ASCII("-registerfilter" )
64 #define ARGUMENT_GENERATE_TYPEDETECTION_XCD DECLARE_ASCII("-generatexcd" )
65
66 //_________________________________________________________________________________________________________________
67 // namespace
68 //_________________________________________________________________________________________________________________
69
70 using namespace ::std ;
71 using namespace ::vos ;
72 using namespace ::rtl ;
73 using namespace ::framework ;
74 using namespace ::comphelper ;
75 using namespace ::com::sun::star::uno ;
76 using namespace ::com::sun::star::lang ;
77 using namespace ::com::sun::star::container ;
78 using namespace ::com::sun::star::beans ;
79
80 //_________________________________________________________________________________________________________________
81 // defines
82 //_________________________________________________________________________________________________________________
83
84 //_________________________________________________________________________________________________________________
85 // declarations
86 //_________________________________________________________________________________________________________________
87
88 enum EMode
89 {
90 E_GENERATE_CFGVIEW ,
91 E_CHECK_FILTERREGISTRATION ,
92 E_GENERATE_TYPEDETECTION_XCD
93 };
94
95 /*-***************************************************************************************************************/
96 class TypeApplication : public Application
97 {
98 //*************************************************************************************************************
99 public:
100
101 void Main();
102
103 //*************************************************************************************************************
104 private:
105
106 void impl_parseCommandLine ();
107 void impl_generateCFGView ();
108 void impl_checkFilterRegistration ();
109 void impl_generateTypeDetectionXCD ();
110
111 //*************************************************************************************************************
112 private:
113
114 EMode m_eMode ;
115 Reference< XMultiServiceFactory > m_xServiceManager ;
116
117 FilterCache* m_pCache ;
118
119 }; // class FilterApplication
120
121 //_________________________________________________________________________________________________________________
122 // global variables
123 //_________________________________________________________________________________________________________________
124
125 TypeApplication gApplication;
126
127 //*****************************************************************************************************************
Main()128 void TypeApplication::Main()
129 {
130 // Init global servicemanager and set it.
131 ServiceManager aManager;
132 m_xServiceManager = aManager.getSharedUNOServiceManager( RDBFILE );
133 setProcessServiceFactory( m_xServiceManager );
134
135 m_pCache = new FilterCache;
136
137 impl_parseCommandLine();
138
139 switch( m_eMode )
140 {
141 case E_GENERATE_CFGVIEW : impl_generateCFGView();
142 break;
143 case E_CHECK_FILTERREGISTRATION : impl_checkFilterRegistration();
144 break;
145 case E_GENERATE_TYPEDETECTION_XCD : impl_generateTypeDetectionXCD();
146 break;
147 }
148
149 delete m_pCache;
150 m_pCache = NULL;
151 }
152
153 //*****************************************************************************************************************
impl_parseCommandLine()154 void TypeApplication::impl_parseCommandLine()
155 {
156 OStartupInfo aInfo ;
157 OUString sArgument ;
158 sal_Int32 nArgument = 0 ;
159 sal_Int32 nCount = aInfo.getCommandArgCount();
160
161 while( nArgument<nCount )
162 {
163 aInfo.getCommandArg( nArgument, sArgument );
164
165 if( sArgument == ARGUMENT_GENERATE_CFGVIEW )
166 {
167 m_eMode = E_GENERATE_CFGVIEW;
168 break;
169 }
170 else
171 if( sArgument == ARGUMENT_CHECK_FILTERREGISTRATION )
172 {
173 m_eMode = E_CHECK_FILTERREGISTRATION;
174 break;
175 }
176 else
177 if( sArgument == ARGUMENT_GENERATE_TYPEDETECTION_XCD )
178 {
179 m_eMode = E_GENERATE_TYPEDETECTION_XCD;
180 break;
181 }
182
183 ++nArgument;
184 }
185 }
186
187 //*****************************************************************************************************************
impl_generateCFGView()188 void TypeApplication::impl_generateCFGView()
189 {
190 #ifdef ENABLE_FILTERCACHEDEBUG
191 // Cache use ref count!
192 FilterCache aCache;
193 aCache.impldbg_generateHTMLView();
194 #endif //ENABLE_FILTERCACHEDEBUG
195 }
196
197 //*****************************************************************************************************************
impl_checkFilterRegistration()198 void TypeApplication::impl_checkFilterRegistration()
199 {
200 Reference< XNameContainer > xFilterContainer( m_xServiceManager->createInstance( SERVICENAME_FILTERFACTORY ), UNO_QUERY );
201 LOG_ASSERT2( xFilterContainer.is()==sal_False, "TypeApplication::impl_checkFilterRegistration()", "Couldn't create filter factory!" )
202 if( xFilterContainer.is() == sal_True )
203 {
204 Sequence< PropertyValue > lProperties( 8 );
205
206 lProperties[0].Name = DECLARE_ASCII("Type") ;
207 lProperties[0].Value <<= DECLARE_ASCII("MeinType") ;
208
209 lProperties[1].Name = DECLARE_ASCII("UIName") ;
210 lProperties[1].Value <<= DECLARE_ASCII("MeinUIName") ;
211
212 lProperties[2].Name = DECLARE_ASCII("UINames") ;
213 lProperties[2].Value <<= Sequence< PropertyValue >() ;
214
215 lProperties[3].Name = DECLARE_ASCII("DocumentService") ;
216 lProperties[3].Value <<= DECLARE_ASCII("MeinDocService") ;
217
218 lProperties[4].Name = DECLARE_ASCII("FilterService") ;
219 lProperties[4].Value <<= DECLARE_ASCII("MeinFilterService") ;
220
221 lProperties[5].Name = DECLARE_ASCII("Flags") ;
222 lProperties[5].Value <<= (sal_Int32)256 ;
223
224 lProperties[6].Name = DECLARE_ASCII("UserData") ;
225 lProperties[6].Value <<= Sequence< OUString >() ;
226
227 lProperties[7].Name = DECLARE_ASCII("FileFormatVersion") ;
228 lProperties[7].Value <<= (sal_Int32)0 ;
229
230 lProperties[8].Name = DECLARE_ASCII("TemplateName") ;
231 lProperties[8].Value <<= DECLARE_ASCII("MeinTemplate") ;
232 }
233 }
234
235 //*****************************************************************************************************************
impl_generateTypeDetectionXCD()236 void TypeApplication::impl_generateTypeDetectionXCD()
237 {
238 #ifdef ENABLE_GENERATEFILTERCACHE
239 // Cache use ref count!
240 FilterCache aCache ;
241 sal_Bool bWriteable = sal_True;
242 sal_Unicode cSeparator = ',' ;
243 aCache.impldbg_generateXCD( "org.openoffice.Office.TypeDetection.xcd", bWriteable, cSeparator );
244 #endif //ENABLE_GENERATEFILTERCACHE
245 }
246