1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski package graphical;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue;
27*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet;
28*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess;
29*b1cdbd2cSJim Jagielski import com.sun.star.frame.FrameSearchFlag;
30*b1cdbd2cSJim Jagielski import com.sun.star.frame.XComponentLoader;
31*b1cdbd2cSJim Jagielski import com.sun.star.frame.XDesktop;
32*b1cdbd2cSJim Jagielski import com.sun.star.frame.XModel;
33*b1cdbd2cSJim Jagielski import com.sun.star.frame.XStorable;
34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent;
35*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
36*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo;
37*b1cdbd2cSJim Jagielski import com.sun.star.sdb.XOfficeDatabaseDocument;
38*b1cdbd2cSJim Jagielski import com.sun.star.sdb.XReportDocumentsSupplier;
39*b1cdbd2cSJim Jagielski import com.sun.star.sdb.application.XDatabaseDocumentUI;
40*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
41*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface;
42*b1cdbd2cSJim Jagielski import com.sun.star.util.XCloseable;
43*b1cdbd2cSJim Jagielski import complexlib.Assurance;
44*b1cdbd2cSJim Jagielski // import complexlib.ComplexTestCase.AssureException;
45*b1cdbd2cSJim Jagielski import helper.OfficeProvider;
46*b1cdbd2cSJim Jagielski import helper.PropertyHelper;
47*b1cdbd2cSJim Jagielski import helper.URLHelper;
48*b1cdbd2cSJim Jagielski import java.io.File;
49*b1cdbd2cSJim Jagielski import java.util.ArrayList;
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski /**
52*b1cdbd2cSJim Jagielski  *
53*b1cdbd2cSJim Jagielski  * @author ll93751
54*b1cdbd2cSJim Jagielski  */
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski class PropertySetHelper
57*b1cdbd2cSJim Jagielski {
58*b1cdbd2cSJim Jagielski     XPropertySet m_xPropertySet;
PropertySetHelper(Object _aObj)59*b1cdbd2cSJim Jagielski     public PropertySetHelper(Object _aObj)
60*b1cdbd2cSJim Jagielski         {
61*b1cdbd2cSJim Jagielski             m_xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, _aObj);
62*b1cdbd2cSJim Jagielski         }
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski     /**
65*b1cdbd2cSJim Jagielski        get a property and don't convert it
66*b1cdbd2cSJim Jagielski        @param _sName the string name of the property
67*b1cdbd2cSJim Jagielski        @return the object value of the property without any conversion
68*b1cdbd2cSJim Jagielski     */
getPropertyValueAsObject(String _sName)69*b1cdbd2cSJim Jagielski     public Object getPropertyValueAsObject(String _sName)
70*b1cdbd2cSJim Jagielski         {
71*b1cdbd2cSJim Jagielski             Object aObject = null;
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski             if (m_xPropertySet != null)
74*b1cdbd2cSJim Jagielski             {
75*b1cdbd2cSJim Jagielski                 try
76*b1cdbd2cSJim Jagielski                 {
77*b1cdbd2cSJim Jagielski                     aObject = m_xPropertySet.getPropertyValue(_sName);
78*b1cdbd2cSJim Jagielski                 }
79*b1cdbd2cSJim Jagielski                 catch (com.sun.star.beans.UnknownPropertyException e)
80*b1cdbd2cSJim Jagielski                 {
81*b1cdbd2cSJim Jagielski                     System.out.println("ERROR: UnknownPropertyException caught. '" + _sName + "'");
82*b1cdbd2cSJim Jagielski                     System.out.println("Message: " + e.getMessage());
83*b1cdbd2cSJim Jagielski                 }
84*b1cdbd2cSJim Jagielski                 catch (com.sun.star.lang.WrappedTargetException e)
85*b1cdbd2cSJim Jagielski                 {
86*b1cdbd2cSJim Jagielski                     System.out.println("ERROR: WrappedTargetException caught.");
87*b1cdbd2cSJim Jagielski                     System.out.println("Message: " + e.getMessage());
88*b1cdbd2cSJim Jagielski                 }
89*b1cdbd2cSJim Jagielski             }
90*b1cdbd2cSJim Jagielski             return aObject;
91*b1cdbd2cSJim Jagielski         }
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski public class OpenOfficeDatabaseReportExtractor extends Assurance
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski     private ParameterHelper m_aParameterHelper;
97*b1cdbd2cSJim Jagielski 
OpenOfficeDatabaseReportExtractor(ParameterHelper _aParameter)98*b1cdbd2cSJim Jagielski     public OpenOfficeDatabaseReportExtractor(ParameterHelper _aParameter)
99*b1cdbd2cSJim Jagielski     {
100*b1cdbd2cSJim Jagielski         m_aParameterHelper = _aParameter;
101*b1cdbd2cSJim Jagielski     }
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     private XDesktop m_xDesktop = null;
getXDesktop()104*b1cdbd2cSJim Jagielski     private XDesktop getXDesktop()
105*b1cdbd2cSJim Jagielski         {
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski             if (m_xDesktop == null)
108*b1cdbd2cSJim Jagielski             {
109*b1cdbd2cSJim Jagielski                 try
110*b1cdbd2cSJim Jagielski                 {
111*b1cdbd2cSJim Jagielski                     XInterface xInterface = (XInterface) getMultiServiceFactory().createInstance( "com.sun.star.frame.Desktop" );
112*b1cdbd2cSJim Jagielski                     m_xDesktop =  UnoRuntime.queryInterface(XDesktop.class, xInterface);
113*b1cdbd2cSJim Jagielski                 }
114*b1cdbd2cSJim Jagielski                 catch (com.sun.star.uno.Exception e)
115*b1cdbd2cSJim Jagielski                 {
116*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("ERROR: uno.Exception caught");
117*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("Message: " + e.getMessage());
118*b1cdbd2cSJim Jagielski                 }
119*b1cdbd2cSJim Jagielski             }
120*b1cdbd2cSJim Jagielski             return m_xDesktop;
121*b1cdbd2cSJim Jagielski         }
122*b1cdbd2cSJim Jagielski 
showElements(XNameAccess _xNameAccess)123*b1cdbd2cSJim Jagielski     private void showElements(XNameAccess _xNameAccess)
124*b1cdbd2cSJim Jagielski         {
125*b1cdbd2cSJim Jagielski             if (_xNameAccess != null)
126*b1cdbd2cSJim Jagielski             {
127*b1cdbd2cSJim Jagielski                 String[] sElementNames = _xNameAccess.getElementNames();
128*b1cdbd2cSJim Jagielski                 for(int i=0;i<sElementNames.length; i++)
129*b1cdbd2cSJim Jagielski                 {
130*b1cdbd2cSJim Jagielski                     System.out.println("Value: [" + i + "] := " + sElementNames[i]);
131*b1cdbd2cSJim Jagielski                 }
132*b1cdbd2cSJim Jagielski             }
133*b1cdbd2cSJim Jagielski             else
134*b1cdbd2cSJim Jagielski             {
135*b1cdbd2cSJim Jagielski                 System.out.println("Warning: Given object is null.");
136*b1cdbd2cSJim Jagielski             }
137*b1cdbd2cSJim Jagielski         }
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski     private OfficeProvider m_aProvider = null;
141*b1cdbd2cSJim Jagielski     private XMultiServiceFactory m_xMultiServiceFactory = null;
getMultiServiceFactory()142*b1cdbd2cSJim Jagielski     private XMultiServiceFactory getMultiServiceFactory()
143*b1cdbd2cSJim Jagielski     {
144*b1cdbd2cSJim Jagielski         if (m_xMultiServiceFactory == null)
145*b1cdbd2cSJim Jagielski         {
146*b1cdbd2cSJim Jagielski             m_xMultiServiceFactory = m_aParameterHelper.getMultiServiceFactory();
147*b1cdbd2cSJim Jagielski         }
148*b1cdbd2cSJim Jagielski         return m_xMultiServiceFactory;
149*b1cdbd2cSJim Jagielski     }
150*b1cdbd2cSJim Jagielski //    private void startOffice()
151*b1cdbd2cSJim Jagielski //        {
152*b1cdbd2cSJim Jagielski //            // int tempTime = m_aParameterHelper.getTestParameters().getInt("SingleTimeOut");
153*b1cdbd2cSJim Jagielski //            param.put("TimeOut", new Integer(300000));
154*b1cdbd2cSJim Jagielski //            System.out.println("TimeOut: " + param.getInt("TimeOut"));
155*b1cdbd2cSJim Jagielski //            System.out.println("ThreadTimeOut: " + param.getInt("ThreadTimeOut"));
156*b1cdbd2cSJim Jagielski //
157*b1cdbd2cSJim Jagielski //            // OfficeProvider aProvider = null;
158*b1cdbd2cSJim Jagielski //            m_aProvider = new OfficeProvider();
159*b1cdbd2cSJim Jagielski //            m_xXMultiServiceFactory = (XMultiServiceFactory) m_aProvider.getManager(param);
160*b1cdbd2cSJim Jagielski //            param.put("ServiceFactory", m_xXMultiServiceFactory);
161*b1cdbd2cSJim Jagielski //        }
162*b1cdbd2cSJim Jagielski //
163*b1cdbd2cSJim Jagielski //    private void stopOffice()
164*b1cdbd2cSJim Jagielski //        {
165*b1cdbd2cSJim Jagielski //            if (m_aProvider != null)
166*b1cdbd2cSJim Jagielski //            {
167*b1cdbd2cSJim Jagielski //                m_aProvider.closeExistingOffice(param, true);
168*b1cdbd2cSJim Jagielski //                m_aProvider = null;
169*b1cdbd2cSJim Jagielski //            }
170*b1cdbd2cSJim Jagielski //            TimeHelper.waitInSeconds(2, "Give close Office some time.");
171*b1cdbd2cSJim Jagielski //        }
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski     private String m_sMailAddress = null;
174*b1cdbd2cSJim Jagielski     private String m_sParentDistinct = null;
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski     // private String m_sUPDMinor;
177*b1cdbd2cSJim Jagielski     // private String m_sCWS_WORK_STAMP;
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski     private static String m_sSourceVersion;
180*b1cdbd2cSJim Jagielski     private static String m_sDestinationVersion;
181*b1cdbd2cSJim Jagielski     private static String m_sSourceName;
182*b1cdbd2cSJim Jagielski     private static String m_sDestinationName;
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski     private static final int WRITER = 1;
185*b1cdbd2cSJim Jagielski     private static final int CALC = 2;
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski     /**
188*b1cdbd2cSJim Jagielski      * This is the main test Function of current ReportDesignerTest
189*b1cdbd2cSJim Jagielski      * @param _sDocument
190*b1cdbd2cSJim Jagielski      * @return
191*b1cdbd2cSJim Jagielski      */
192*b1cdbd2cSJim Jagielski 
load(String _sDocument )193*b1cdbd2cSJim Jagielski     public ArrayList<String> load(String _sDocument /*, int _nType*/)
194*b1cdbd2cSJim Jagielski         {
195*b1cdbd2cSJim Jagielski             // We need to copy the database file to a place where we have write access, NEVER use the docpool for this
196*b1cdbd2cSJim Jagielski             String sOutputPath = m_aParameterHelper.getOutputPath();
197*b1cdbd2cSJim Jagielski             File aOutputPath = new File(sOutputPath);
198*b1cdbd2cSJim Jagielski             aOutputPath.mkdirs();
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski             String sFilename = FileHelper.getBasename(_sDocument);
201*b1cdbd2cSJim Jagielski             String sDestinationFile = FileHelper.appendPath(sOutputPath, sFilename);
202*b1cdbd2cSJim Jagielski             FileHelper.copy(_sDocument, sDestinationFile);
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski             // now the fix reference of the AbsoluteReferenceFile should exist.
205*b1cdbd2cSJim Jagielski             assure("There exists no file: " + sDestinationFile, FileHelper.exists(sDestinationFile));
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski             String sFileURL = URLHelper.getFileURLFromSystemPath(sDestinationFile);
208*b1cdbd2cSJim Jagielski             GlobalLogWriter.println("File URL: " + sFileURL);
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski             ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>();
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski             // FYI: it is not allowed to open the document read only
213*b1cdbd2cSJim Jagielski //            PropertyValue aReadOnly = new PropertyValue(); // always overwrite already exist files
214*b1cdbd2cSJim Jagielski //            aReadOnly.Name = "ReadOnly";
215*b1cdbd2cSJim Jagielski //            aReadOnly.Value = Boolean.TRUE;
216*b1cdbd2cSJim Jagielski //            aPropertyList.add(aReadOnly);
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski             XComponent xDocComponent = loadComponent(sFileURL, getXDesktop(), aPropertyList);
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski             GlobalLogWriter.println("Load done");
221*b1cdbd2cSJim Jagielski // 	context = createUnoService("com.sun.star.sdb.DatabaseContext")
222*b1cdbd2cSJim Jagielski //     oDataBase = context.getByName("hh")
223*b1cdbd2cSJim Jagielski //     oDBDoc = oDataBase.DatabaseDocument
224*b1cdbd2cSJim Jagielski //
225*b1cdbd2cSJim Jagielski // 	dim args(1) as new com.sun.star.beans.PropertyValue
226*b1cdbd2cSJim Jagielski // 	args(0).Name = "ActiveConnection"
227*b1cdbd2cSJim Jagielski // 	args(0).Value = oDBDoc.getCurrentController().getPropertyValue("ActiveConnection")
228*b1cdbd2cSJim Jagielski // 	reportContainer = oDBDoc.getReportDocuments()
229*b1cdbd2cSJim Jagielski //     report = reportContainer.loadComponentFromURL("Report40","",0,args)
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski             ArrayList<String> aList = null;
232*b1cdbd2cSJim Jagielski             try
233*b1cdbd2cSJim Jagielski             {
234*b1cdbd2cSJim Jagielski //                XInterface x = (XInterface)getMultiServiceFactory().createInstance("com.sun.star.sdb.DatabaseContext");
235*b1cdbd2cSJim Jagielski //                assure("can't create instance of com.sun.star.sdb.DatabaseContext", x != null);
236*b1cdbd2cSJim Jagielski //                GlobalLogWriter.println("createInstance com.sun.star.sdb.DatabaseContext done");
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski //                XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, x);
239*b1cdbd2cSJim Jagielski //                showElements(xNameAccess);
240*b1cdbd2cSJim Jagielski //                Object aObj = xNameAccess.getByName(sFileURL);
241*b1cdbd2cSJim Jagielski //                    GlobalLogWriter.println("1");
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski //                PropertySetHelper aHelper = new PropertySetHelper(aObj);
244*b1cdbd2cSJim Jagielski //                XDocumentDataSource xDataSource = (XDocumentDataSource)UnoRuntime.queryInterface(XDocumentDataSource.class, aObj);
245*b1cdbd2cSJim Jagielski //                Object aDatabaseDocument = aHelper.getPropertyValueAsObject("DatabaseDocument");
246*b1cdbd2cSJim Jagielski //                XOfficeDatabaseDocument xOfficeDBDoc = xDataSource.getDatabaseDocument();
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski                 XOfficeDatabaseDocument xOfficeDBDoc = UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDocComponent);
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski //                XOfficeDatabaseDocument xOfficeDBDoc = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDataSource);
251*b1cdbd2cSJim Jagielski                 assure("can't access DatabaseDocument", xOfficeDBDoc != null);
252*b1cdbd2cSJim Jagielski //                GlobalLogWriter.println("2");
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski                 XModel xDBSource = UnoRuntime.queryInterface(XModel.class, xOfficeDBDoc);
255*b1cdbd2cSJim Jagielski                 Object aController = xDBSource.getCurrentController();
256*b1cdbd2cSJim Jagielski                 assure("Controller of xOfficeDatabaseDocument is empty!", aController != null);
257*b1cdbd2cSJim Jagielski //                GlobalLogWriter.println("3");
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski                 XDatabaseDocumentUI aDBDocUI = UnoRuntime.queryInterface(XDatabaseDocumentUI.class, aController);
260*b1cdbd2cSJim Jagielski                 aDBDocUI.connect();
261*b1cdbd2cSJim Jagielski                 boolean isConnect = aDBDocUI.isConnected();
262*b1cdbd2cSJim Jagielski                 if (isConnect)
263*b1cdbd2cSJim Jagielski                 {
264*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("Connection is true");
265*b1cdbd2cSJim Jagielski                 }
266*b1cdbd2cSJim Jagielski                 else
267*b1cdbd2cSJim Jagielski                 {
268*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("Connection is false");
269*b1cdbd2cSJim Jagielski                 }
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski                 // aHelper = new PropertySetHelper(aController);
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski                 XReportDocumentsSupplier xSupplier = UnoRuntime.queryInterface(XReportDocumentsSupplier.class, xOfficeDBDoc);
274*b1cdbd2cSJim Jagielski                 XNameAccess xNameAccess = xSupplier.getReportDocuments();
275*b1cdbd2cSJim Jagielski                 assure("xOfficeDatabaseDocument returns no Report Document", xNameAccess != null);
276*b1cdbd2cSJim Jagielski //                     GlobalLogWriter.println("5");
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski                 showElements(xNameAccess);
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski                 // Object aActiveConnectionObj = aHelper.getPropertyValueAsObject("ActiveConnection");
281*b1cdbd2cSJim Jagielski                 Object aActiveConnectionObj = aDBDocUI.getActiveConnection();
282*b1cdbd2cSJim Jagielski                 assure("ActiveConnection is empty", aActiveConnectionObj != null);
283*b1cdbd2cSJim Jagielski //                     GlobalLogWriter.println("5");
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski                 ArrayList<PropertyValue> aPropertyList2 = new ArrayList<PropertyValue>();
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski                 PropertyValue aActiveConnection = new PropertyValue();
288*b1cdbd2cSJim Jagielski                 aActiveConnection.Name = "ActiveConnection";
289*b1cdbd2cSJim Jagielski                 aActiveConnection.Value = aActiveConnectionObj;
290*b1cdbd2cSJim Jagielski                 aPropertyList2.add(aActiveConnection);
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski                 aList = loadAndStoreReports(xNameAccess, aPropertyList2 /*, _nType*/ );
293*b1cdbd2cSJim Jagielski                 createDBEntry(/*_nType*/);
294*b1cdbd2cSJim Jagielski             }
295*b1cdbd2cSJim Jagielski             catch(Exception/*com.sun.star.uno.Exception*/ e)
296*b1cdbd2cSJim Jagielski             {
297*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("ERROR: Exception caught");
298*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Message: " + e.getMessage());
299*b1cdbd2cSJim Jagielski             }
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski             // String mTestDocumentPath = (String) param.get("TestDocumentPath");
302*b1cdbd2cSJim Jagielski             // System.out.println("mTestDocumentPath: '" + mTestDocumentPath + "'");
303*b1cdbd2cSJim Jagielski             // // workaround for issue using deprecated "DOCPTH" prop
304*b1cdbd2cSJim Jagielski             // System.setProperty("DOCPTH", mTestDocumentPath);
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski             // Close the document
307*b1cdbd2cSJim Jagielski             // util.utils.shortWait(2000);
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski             closeComponent(xDocComponent);
310*b1cdbd2cSJim Jagielski             return aList;
311*b1cdbd2cSJim Jagielski         }
312*b1cdbd2cSJim Jagielski 
getDocumentPoolName( )313*b1cdbd2cSJim Jagielski     private String getDocumentPoolName(/*int _nType*/)
314*b1cdbd2cSJim Jagielski         {
315*b1cdbd2cSJim Jagielski             return "AutogenReportDesignTest";
316*b1cdbd2cSJim Jagielski             // return getFileFormat(_nType);
317*b1cdbd2cSJim Jagielski         }
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
createDBEntry( )320*b1cdbd2cSJim Jagielski     private void createDBEntry(/*int _nType*/)
321*b1cdbd2cSJim Jagielski         {
322*b1cdbd2cSJim Jagielski             // try to connect the database
323*b1cdbd2cSJim Jagielski             String sDBConnection = (String)m_aParameterHelper.getTestParameters().get( convwatch.PropertyName.DB_CONNECTION_STRING );
324*b1cdbd2cSJim Jagielski             if (sDBConnection != null && sDBConnection.length() > 0)
325*b1cdbd2cSJim Jagielski             {
326*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("DBConnection: " + sDBConnection);
327*b1cdbd2cSJim Jagielski // TODO: DB
328*b1cdbd2cSJim Jagielski //                DB.init(sDBConnection);
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski                 // String sFixRefSubDirectory = "ReportDesign_qa_complex_" + getFileFormat(_nType);
331*b1cdbd2cSJim Jagielski                 String sFixRefSubDirectory = "ReportDesignFixRef";
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski                 String sSourceVersion = m_sSourceVersion;
334*b1cdbd2cSJim Jagielski                 // String sSourceVersion = sFixRefSubDirectory;
335*b1cdbd2cSJim Jagielski                 String sSourceName = m_sSourceName;
336*b1cdbd2cSJim Jagielski                 // String sSourceCreatorType = "fixref";
337*b1cdbd2cSJim Jagielski                 String sSourceCreatorType = "";
338*b1cdbd2cSJim Jagielski                 String sDestinationVersion = m_sDestinationVersion;
339*b1cdbd2cSJim Jagielski                 // if (sDestinationVersion.length() == 0)
340*b1cdbd2cSJim Jagielski                 // {
341*b1cdbd2cSJim Jagielski                 //     sDestinationVersion = m_sUPDMinor;
342*b1cdbd2cSJim Jagielski                 // }
343*b1cdbd2cSJim Jagielski                 String sDestinationName = m_sDestinationName;
344*b1cdbd2cSJim Jagielski                 String sDestinationCreatorType = "";
345*b1cdbd2cSJim Jagielski                 String sDocumentPoolDir = getOutputPath(/*_nType*/);
346*b1cdbd2cSJim Jagielski                 String sDocumentPoolName = getDocumentPoolName(/*_nType*/);
347*b1cdbd2cSJim Jagielski                 String sSpecial = "";
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski // TODO: DB
350*b1cdbd2cSJim Jagielski //                DB.insertinto_documentcompare(sSourceVersion, sSourceName, sSourceCreatorType,
351*b1cdbd2cSJim Jagielski //                                              m_sDestinationVersion, sDestinationName, sDestinationCreatorType,
352*b1cdbd2cSJim Jagielski //                                              sDocumentPoolDir, sDocumentPoolName, m_sMailAddress,
353*b1cdbd2cSJim Jagielski //                                              sSpecial, m_sParentDistinct);
354*b1cdbd2cSJim Jagielski                 TimeHelper.waitInSeconds(1, "wait for DB.");
355*b1cdbd2cSJim Jagielski                 // DB.test();
356*b1cdbd2cSJim Jagielski                 // System.exit(1);
357*b1cdbd2cSJim Jagielski             }
358*b1cdbd2cSJim Jagielski         }
359*b1cdbd2cSJim Jagielski 
loadAndStoreReports(XNameAccess _xNameAccess, ArrayList<PropertyValue> _aPropertyList )360*b1cdbd2cSJim Jagielski     private ArrayList<String> loadAndStoreReports(XNameAccess _xNameAccess, ArrayList<PropertyValue> _aPropertyList /*, int _nType*/ )
361*b1cdbd2cSJim Jagielski         {
362*b1cdbd2cSJim Jagielski             ArrayList<String> aList = new ArrayList<String>();
363*b1cdbd2cSJim Jagielski             if (_xNameAccess != null)
364*b1cdbd2cSJim Jagielski             {
365*b1cdbd2cSJim Jagielski                 String[] sElementNames = _xNameAccess.getElementNames();
366*b1cdbd2cSJim Jagielski                 for(int i=0;i<sElementNames.length; i++)
367*b1cdbd2cSJim Jagielski                 {
368*b1cdbd2cSJim Jagielski                     String sReportName = sElementNames[i];
369*b1cdbd2cSJim Jagielski                     XComponent xDoc = loadComponent(sReportName, _xNameAccess, _aPropertyList);
370*b1cdbd2cSJim Jagielski                     if (xDoc != null)
371*b1cdbd2cSJim Jagielski                     {
372*b1cdbd2cSJim Jagielski                         // util.utils.shortWait(1000);
373*b1cdbd2cSJim Jagielski                         // print? or store?
374*b1cdbd2cSJim Jagielski                         String sDocumentPathName = storeComponent(sReportName, xDoc /*, _nType*/);
375*b1cdbd2cSJim Jagielski                         aList.add(sDocumentPathName);
376*b1cdbd2cSJim Jagielski     //                    util.utils.shortWait(1000);
377*b1cdbd2cSJim Jagielski                         closeComponent(xDoc);
378*b1cdbd2cSJim Jagielski     //                    util.utils.shortWait(1000);
379*b1cdbd2cSJim Jagielski                     }
380*b1cdbd2cSJim Jagielski                     else
381*b1cdbd2cSJim Jagielski                     {
382*b1cdbd2cSJim Jagielski                         System.out.println("Leave out maybe due to errors.");
383*b1cdbd2cSJim Jagielski                     }
384*b1cdbd2cSJim Jagielski                     // sBackPath contains the path where to find the extracted ODB Document
385*b1cdbd2cSJim Jagielski                 }
386*b1cdbd2cSJim Jagielski             }
387*b1cdbd2cSJim Jagielski             return aList;
388*b1cdbd2cSJim Jagielski         }
389*b1cdbd2cSJim Jagielski 
getFormatExtension(Object _xComponent )390*b1cdbd2cSJim Jagielski     private String getFormatExtension(Object _xComponent /* int _nType*/ )
391*b1cdbd2cSJim Jagielski          {
392*b1cdbd2cSJim Jagielski              String sExtension;
393*b1cdbd2cSJim Jagielski              XServiceInfo xServiceInfo =  UnoRuntime.queryInterface( XServiceInfo.class, _xComponent );
394*b1cdbd2cSJim Jagielski              if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) )
395*b1cdbd2cSJim Jagielski              {
396*b1cdbd2cSJim Jagielski                  // calc
397*b1cdbd2cSJim Jagielski                  sExtension = ".ods";
398*b1cdbd2cSJim Jagielski              }
399*b1cdbd2cSJim Jagielski              else if (xServiceInfo.supportsService("com.sun.star.text.TextDocument"))
400*b1cdbd2cSJim Jagielski              {
401*b1cdbd2cSJim Jagielski                  //writer
402*b1cdbd2cSJim Jagielski                  sExtension = ".odt";
403*b1cdbd2cSJim Jagielski              }
404*b1cdbd2cSJim Jagielski              else
405*b1cdbd2cSJim Jagielski              {
406*b1cdbd2cSJim Jagielski                  sExtension = ".UNKNOWN";
407*b1cdbd2cSJim Jagielski              }
408*b1cdbd2cSJim Jagielski              return sExtension;
409*b1cdbd2cSJim Jagielski          }
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski     //         switch(_nType)
412*b1cdbd2cSJim Jagielski     //         {
413*b1cdbd2cSJim Jagielski     //         case WRITER:
414*b1cdbd2cSJim Jagielski     //             sExtension = ".odt";
415*b1cdbd2cSJim Jagielski     //             break;
416*b1cdbd2cSJim Jagielski     //         case CALC:
417*b1cdbd2cSJim Jagielski     //             sExtension = ".ods";
418*b1cdbd2cSJim Jagielski     //             break;
419*b1cdbd2cSJim Jagielski     //         default:
420*b1cdbd2cSJim Jagielski     //             sExtension = ".UNKNOWN";
421*b1cdbd2cSJim Jagielski     //         }
422*b1cdbd2cSJim Jagielski     //         return sExtension;
423*b1cdbd2cSJim Jagielski     //     }
424*b1cdbd2cSJim Jagielski     // private String getFileFormat(int _nType)
425*b1cdbd2cSJim Jagielski     //     {
426*b1cdbd2cSJim Jagielski     //         String sFileType;
427*b1cdbd2cSJim Jagielski     //         switch(_nType)
428*b1cdbd2cSJim Jagielski     //         {
429*b1cdbd2cSJim Jagielski     //         case WRITER:
430*b1cdbd2cSJim Jagielski     //             sFileType = "writer8";
431*b1cdbd2cSJim Jagielski     //             break;
432*b1cdbd2cSJim Jagielski     //         case CALC:
433*b1cdbd2cSJim Jagielski     //             sFileType = "calc8";
434*b1cdbd2cSJim Jagielski     //             break;
435*b1cdbd2cSJim Jagielski     //         default:
436*b1cdbd2cSJim Jagielski     //             sFileType = "UNKNOWN";
437*b1cdbd2cSJim Jagielski     //         }
438*b1cdbd2cSJim Jagielski     //         return sFileType;
439*b1cdbd2cSJim Jagielski     //     }
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski     private String m_sOutputPath = null;
442*b1cdbd2cSJim Jagielski 
getOutputPath( )443*b1cdbd2cSJim Jagielski     private String getOutputPath(/*int _nType*/)
444*b1cdbd2cSJim Jagielski         {
445*b1cdbd2cSJim Jagielski             if (m_sOutputPath == null)
446*b1cdbd2cSJim Jagielski             {
447*b1cdbd2cSJim Jagielski                 String sOutputPath = (String)m_aParameterHelper.getTestParameters().get( convwatch.PropertyName.DOC_COMPARATOR_OUTPUT_PATH );
448*b1cdbd2cSJim Jagielski                 sOutputPath = helper.StringHelper.removeQuoteIfExists(sOutputPath);
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski                 // sOutputPath += "tmp_123";
451*b1cdbd2cSJim Jagielski                 sOutputPath = FileHelper.appendPath(sOutputPath, DateHelper.getDateTimeForFilename());
452*b1cdbd2cSJim Jagielski                 // sOutputPath += System.getProperty("file.separator");
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski                 // sOutputPath += getFileFormat(_nType);
455*b1cdbd2cSJim Jagielski                 // sOutputPath += System.getProperty("file.separator");
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski                 File aOutputFile = new File(sOutputPath); // create the directory of the given output path
458*b1cdbd2cSJim Jagielski                 aOutputFile.mkdirs();
459*b1cdbd2cSJim Jagielski                 m_sOutputPath = sOutputPath;
460*b1cdbd2cSJim Jagielski             }
461*b1cdbd2cSJim Jagielski             return m_sOutputPath;
462*b1cdbd2cSJim Jagielski         }
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski     /*
465*b1cdbd2cSJim Jagielski       store given _xComponent under the given Name in DOC_COMPARATOR_INPUTPATH
466*b1cdbd2cSJim Jagielski      */
storeComponent(String _sName, Object _xComponent )467*b1cdbd2cSJim Jagielski     private String storeComponent(String _sName, Object _xComponent /*, int _nType*/ )
468*b1cdbd2cSJim Jagielski         {
469*b1cdbd2cSJim Jagielski             String sOutputPath = getOutputPath(/*_nType*/);
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski //            // add DocumentPoolName
472*b1cdbd2cSJim Jagielski //            sOutputPath = FileHelper.appendPath(sOutputPath, getDocumentPoolName(/*_nType*/));
473*b1cdbd2cSJim Jagielski //            // sOutputPath += System.getProperty("file.separator");
474*b1cdbd2cSJim Jagielski //
475*b1cdbd2cSJim Jagielski //            File aOutputFile = new File(sOutputPath); // create the directory of the given output path
476*b1cdbd2cSJim Jagielski //            aOutputFile.mkdirs();
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski             String sName = _sName + getFormatExtension(_xComponent /*_nType*/);
480*b1cdbd2cSJim Jagielski             sOutputPath = FileHelper.appendPath(sOutputPath, sName);
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski             // we need the name and path
483*b1cdbd2cSJim Jagielski             String sBackPathName = sOutputPath;
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski             String sOutputURL = URLHelper.getFileURLFromSystemPath(sOutputPath);
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski             ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // set some properties for storeAsURL
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski             // PropertyValue aFileFormat = new PropertyValue();
490*b1cdbd2cSJim Jagielski             // aFileFormat.Name = "FilterName";
491*b1cdbd2cSJim Jagielski             // aFileFormat.Value = getFileFormat(_nType);
492*b1cdbd2cSJim Jagielski             // aPropertyList.add(aFileFormat);
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski             PropertyValue aOverwrite = new PropertyValue(); // always overwrite already exist files
495*b1cdbd2cSJim Jagielski             aOverwrite.Name = "Overwrite";
496*b1cdbd2cSJim Jagielski             aOverwrite.Value = Boolean.TRUE;
497*b1cdbd2cSJim Jagielski             aPropertyList.add(aOverwrite);
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski             // store the document in an other directory
500*b1cdbd2cSJim Jagielski             XStorable aStorable = UnoRuntime.queryInterface( XStorable.class, _xComponent);
501*b1cdbd2cSJim Jagielski             if (aStorable != null)
502*b1cdbd2cSJim Jagielski             {
503*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("store document as URL: '" + sOutputURL + "'");
504*b1cdbd2cSJim Jagielski                 try
505*b1cdbd2cSJim Jagielski                 {
506*b1cdbd2cSJim Jagielski                     aStorable.storeAsURL(sOutputURL, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList));
507*b1cdbd2cSJim Jagielski                 }
508*b1cdbd2cSJim Jagielski                 catch (com.sun.star.io.IOException e)
509*b1cdbd2cSJim Jagielski                 {
510*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("ERROR: Exception caught");
511*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("Can't write document URL: '" + sOutputURL + "'");
512*b1cdbd2cSJim Jagielski                     GlobalLogWriter.println("Message: " + e.getMessage());
513*b1cdbd2cSJim Jagielski                 }
514*b1cdbd2cSJim Jagielski             }
515*b1cdbd2cSJim Jagielski             return sBackPathName;
516*b1cdbd2cSJim Jagielski         }
517*b1cdbd2cSJim Jagielski 
loadComponent(String _sName, Object _xComponent, ArrayList _aPropertyList)518*b1cdbd2cSJim Jagielski     private XComponent loadComponent(String _sName, Object _xComponent, ArrayList _aPropertyList)
519*b1cdbd2cSJim Jagielski         {
520*b1cdbd2cSJim Jagielski             XComponent xDocComponent = null;
521*b1cdbd2cSJim Jagielski             XComponentLoader xComponentLoader =  UnoRuntime.queryInterface( XComponentLoader.class, _xComponent );
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski             try
524*b1cdbd2cSJim Jagielski             {
525*b1cdbd2cSJim Jagielski                 PropertyValue[] aLoadProperties = PropertyHelper.createPropertyValueArrayFormArrayList(_aPropertyList);
526*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Load component: '" + _sName + "'");
527*b1cdbd2cSJim Jagielski                 xDocComponent = xComponentLoader.loadComponentFromURL(_sName, "_blank", FrameSearchFlag.ALL, aLoadProperties);
528*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Load component: '" + _sName + "' done");
529*b1cdbd2cSJim Jagielski             }
530*b1cdbd2cSJim Jagielski             catch (com.sun.star.io.IOException e)
531*b1cdbd2cSJim Jagielski             {
532*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("ERROR: Exception caught");
533*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Can't load document '" + _sName + "'");
534*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Message: " + e.getMessage());
535*b1cdbd2cSJim Jagielski             }
536*b1cdbd2cSJim Jagielski             catch (com.sun.star.lang.IllegalArgumentException e)
537*b1cdbd2cSJim Jagielski             {
538*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("ERROR: Exception caught");
539*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Illegal Arguments given to loadComponentFromURL.");
540*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Message: " + e.getMessage());
541*b1cdbd2cSJim Jagielski             }
542*b1cdbd2cSJim Jagielski             return xDocComponent;
543*b1cdbd2cSJim Jagielski         }
544*b1cdbd2cSJim Jagielski 
closeComponent(XComponent _xDoc)545*b1cdbd2cSJim Jagielski     private void closeComponent(XComponent _xDoc)
546*b1cdbd2cSJim Jagielski         {
547*b1cdbd2cSJim Jagielski             // Close the document
548*b1cdbd2cSJim Jagielski             XCloseable xCloseable =  UnoRuntime.queryInterface(XCloseable.class, _xDoc);
549*b1cdbd2cSJim Jagielski             try
550*b1cdbd2cSJim Jagielski             {
551*b1cdbd2cSJim Jagielski                 xCloseable.close(true);
552*b1cdbd2cSJim Jagielski             }
553*b1cdbd2cSJim Jagielski             catch (com.sun.star.util.CloseVetoException e)
554*b1cdbd2cSJim Jagielski             {
555*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("ERROR: CloseVetoException caught");
556*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("CloseVetoException occured Can't close document.");
557*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Message: " + e.getMessage());
558*b1cdbd2cSJim Jagielski             }
559*b1cdbd2cSJim Jagielski         }
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski }
562