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  package convwatch;
25  
26  import java.io.File;
27  import java.util.ArrayList;
28  
29  import com.sun.star.beans.PropertyValue;
30  import com.sun.star.beans.XPropertySet;
31  import com.sun.star.container.XNameAccess;
32  import com.sun.star.frame.XComponentLoader;
33  import com.sun.star.frame.XDesktop;
34  import com.sun.star.frame.XModel;
35  import com.sun.star.frame.XStorable;
36  import com.sun.star.lang.XComponent;
37  import com.sun.star.lang.XMultiServiceFactory;
38  import com.sun.star.sdb.XDocumentDataSource;
39  import com.sun.star.sdb.XOfficeDatabaseDocument;
40  import com.sun.star.sdb.XReportDocumentsSupplier;
41  import com.sun.star.sdb.application.XDatabaseDocumentUI;
42  import com.sun.star.uno.UnoRuntime;
43  import com.sun.star.uno.XInterface;
44  import com.sun.star.util.XCloseable;
45  import com.sun.star.lang.XServiceInfo;
46  
47  // import util.BasicMacroTools;
48  // import util.DesktopTools;
49  // import util.dbg;
50  import complexlib.ComplexTestCase;
51  import helper.OfficeProvider;
52  import helper.URLHelper;
53  import helper.OfficeWatcher;
54  
55  // import convwatch.DB;
56  
57  // import java.util.Date;
58  // import java.text.SimpleDateFormat;
59  // import java.text.ParsePosition;
60  // import java.sql.Time;
61  //
62  // import java.io.BufferedReader;
63  // import java.io.File;
64  // import java.io.FileReader;
65  // import java.io.IOException;
66  // import java.io.FilenameFilter;
67  //
68  // import java.util.Vector;
69  //
70  // import helper.AppProvider;
71  // import java.text.DecimalFormat;
72  // import util.DynamicClassLoader;
73  // import java.util.StringTokenizer;
74  
75  
76  
77  
78  class PropertySetHelper
79  {
80      XPropertySet m_xPropertySet;
PropertySetHelper(Object _aObj)81      public PropertySetHelper(Object _aObj)
82          {
83              m_xPropertySet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, _aObj);
84          }
85  
86      /**
87         get a property and don't convert it
88         @param _sName the string name of the property
89         @return the object value of the property without any conversion
90      */
getPropertyValueAsObject(String _sName)91      public Object getPropertyValueAsObject(String _sName)
92          {
93              Object aObject = null;
94  
95              if (m_xPropertySet != null)
96              {
97                  try
98                  {
99                      aObject = m_xPropertySet.getPropertyValue(_sName);
100                  }
101                  catch (com.sun.star.beans.UnknownPropertyException e)
102                  {
103                      System.out.println("ERROR: UnknownPropertyException caught. '" + _sName + "'");
104                      System.out.println("Message: " + e.getMessage());
105                  }
106                  catch (com.sun.star.lang.WrappedTargetException e)
107                  {
108                      System.out.println("ERROR: WrappedTargetException caught.");
109                      System.out.println("Message: " + e.getMessage());
110                  }
111              }
112              return aObject;
113          }
114  }
115  
116  class PropertyHelper
117  {
118      /**
119         Create a PropertyValue[] from a ArrayList
120         @param _aPropertyList
121         @return a PropertyValue[]
122      */
createPropertyValueArrayFormArrayList(ArrayList _aPropertyList)123      public static PropertyValue[] createPropertyValueArrayFormArrayList(ArrayList _aPropertyList)
124          {
125              // copy the whole PropertyValue List to an PropertyValue Array
126              PropertyValue[] aSaveProperties = null;
127  
128              if (_aPropertyList == null)
129              {
130                  aSaveProperties = new PropertyValue[0];
131              }
132              else
133              {
134                  if (_aPropertyList.size() > 0)
135                  {
136                      aSaveProperties = new PropertyValue[_aPropertyList.size()];
137                      for (int i = 0;i<_aPropertyList.size(); i++)
138                      {
139                          aSaveProperties[i] = (PropertyValue) _aPropertyList.get(i);
140                      }
141                  }
142                  else
143                  {
144                      aSaveProperties = new PropertyValue[0];
145                  }
146              }
147              return aSaveProperties;
148          }
149  }
150  
151  public class ReportDesignerTest extends ComplexTestCase {
152  
153      String mTestDocumentPath;
154  
155      /**
156       * This method returns a list of Strings, each string must be a function name in this class.
157       * @return
158       */
getTestMethodNames()159      public String[] getTestMethodNames()
160          {
161              return new String[] {"ReportDesignTest"}; // MAIN
162          }
163  
checkIfOfficeExists(String _sOfficePathWithTrash)164      private void checkIfOfficeExists(String _sOfficePathWithTrash)
165          {
166              String sOfficePath = "";
167              int nIndex = _sOfficePathWithTrash.indexOf("soffice.exe");
168              if (nIndex > 0)
169              {
170                  sOfficePath = _sOfficePathWithTrash.substring(0, nIndex + 11);
171              }
172              else
173              {
174                  nIndex = _sOfficePathWithTrash.indexOf("soffice");
175                  if (nIndex > 0)
176                  {
177                      sOfficePath = _sOfficePathWithTrash.substring(0, nIndex + 7);
178                  }
179              }
180  
181              // if (sOfficePath.startsWith("\"") ||
182              //     sOfficePath.startsWith("'"))
183              // {
184              //     sOfficePath = sOfficePath.substring(1);
185              // }
186              sOfficePath = helper.StringHelper.removeQuoteIfExists(sOfficePath);
187  
188              log.println(sOfficePath);
189              File sOffice = new File(sOfficePath);
190              if (! sOffice.exists())
191              {
192                  log.println("ERROR: There exists no office installation at given path: '" + sOfficePath + "'");
193                  System.exit(0);
194              }
195          }
196  
197  
198      private static XDesktop m_xDesktop = null;
getXDesktop()199      public static XDesktop getXDesktop()
200          {
201  
202              if (m_xDesktop == null)
203              {
204                  try
205                  {
206                      XInterface xInterface = (XInterface) m_xXMultiServiceFactory.createInstance( "com.sun.star.frame.Desktop" );
207                      m_xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, xInterface);
208                  }
209                  catch (com.sun.star.uno.Exception e)
210                  {
211                      log.println("ERROR: uno.Exception caught");
212                      log.println("Message: " + e.getMessage());
213                  }
214              }
215              return m_xDesktop;
216          }
217  
showElements(XNameAccess _xNameAccess)218      private void showElements(XNameAccess _xNameAccess)
219          {
220              if (_xNameAccess != null)
221              {
222                  String[] sElementNames = _xNameAccess.getElementNames();
223                  for(int i=0;i<sElementNames.length; i++)
224                  {
225                      System.out.println("Value: [" + i + "] := " + sElementNames[i]);
226                  }
227              }
228              else
229              {
230                  System.out.println("Warning: Given object is null.");
231              }
232          }
233  
234  
235      private OfficeProvider m_aProvider = null;
236      private static XMultiServiceFactory m_xXMultiServiceFactory = null;
startOffice()237      private void startOffice()
238          {
239              // int tempTime = param.getInt("SingleTimeOut");
240              param.put("TimeOut", new Integer(300000));
241              System.out.println("TimeOut: " + param.getInt("TimeOut"));
242              System.out.println("ThreadTimeOut: " + param.getInt("ThreadTimeOut"));
243  
244              // OfficeProvider aProvider = null;
245              m_aProvider = new OfficeProvider();
246              m_xXMultiServiceFactory = (XMultiServiceFactory) m_aProvider.getManager(param);
247              param.put("ServiceFactory", m_xXMultiServiceFactory);
248          }
249  
stopOffice()250      private void stopOffice()
251          {
252              if (m_aProvider != null)
253              {
254                  m_aProvider.closeExistingOffice(param, true);
255                  m_aProvider = null;
256              }
257              TimeHelper.waitInSeconds(2, "Give close Office some time.");
258          }
259  
260      private String m_sMailAddress = null;
261      private String m_sParentDistinct = null;
262  
263      // private String m_sUPDMinor;
264      // private String m_sCWS_WORK_STAMP;
265  
266      private static String m_sSourceVersion;
267      private static String m_sDestinationVersion;
268      private static String m_sSourceName;
269      private static String m_sDestinationName;
270  
271      private static final int WRITER = 1;
272      private static final int CALC = 2;
273  
274      /**
275       * This is the main test Function of current ReportDesignerTest
276       */
ReportDesignTest()277      public void ReportDesignTest()
278          {
279              convwatch.GlobalLogWriter.set(log);
280  
281              GlobalLogWriter.get().println("Set office watcher");
282              OfficeWatcher aWatcher = (OfficeWatcher)param.get("Watcher");
283              GlobalLogWriter.get().setWatcher(aWatcher);
284  
285              try
286              {
287  
288                  // -------------------- preconditions, try to find an office --------------------
289  
290                  String sAppExecutionCommand = (String) param.get("AppExecutionCommand");
291                  log.println("sAppExecutionCommand='" + sAppExecutionCommand + "'");
292  
293                  String sUser = System.getProperty("user.name");
294                  log.println("user.name='" + sUser + "'");
295  
296                  // String sVCSID = System.getProperty("VCSID");
297                  // log.println("VCSID='" + sVCSID + "'");
298                  // m_sMailAddress = sVCSID + "@openoffice.org";
299                  m_sMailAddress = System.getProperty("MailAddress");
300                  log.println("Assumed mail address: " + m_sMailAddress);
301  
302                  m_sParentDistinct = System.getProperty("ParentDistinct");
303  
304                  m_sSourceVersion = System.getProperty("SourceVersion");
305                  m_sSourceName = System.getProperty("SourceName");
306                  m_sDestinationVersion = System.getProperty("DestinationVersion");
307                  m_sDestinationName = System.getProperty("DestinationName");
308                  // createDBEntry();
309                  // log.println("Current CWS: " + m_sCWS_WORK_STAMP);
310                  // log.println("Current MWS: " + m_sUPDMinor);
311  
312                  if (m_sSourceVersion == null)
313                  {
314                      System.out.println("Error, Sourceversion is null.");
315                      System.exit(1);
316                  }
317  
318                  sAppExecutionCommand = sAppExecutionCommand.replaceAll( "\\$\\{USERNAME\\}", sUser);
319                  log.println("sAppExecutionCommand='" + sAppExecutionCommand + "'");
320  
321                  // an other way to replace strings
322                  // sAppExecutionCommand = utils.replaceAll13(sAppExecutionCommand, "${USERNAME}", sUser);
323  
324                  checkIfOfficeExists(sAppExecutionCommand);
325                  param.put("AppExecutionCommand", new String(sAppExecutionCommand));
326  
327                  // System.exit(1);
328  
329                  // --------------------------- Start the given Office ---------------------------
330  
331                  startOffice();
332  
333                  // ------------------------------ Start a test run ------------------------------
334  
335                  // String sCurrentDirectory = System.getProperty("user.dir");
336                  // log.println("Current Dir: " + sCurrentDirectory);
337                  String sDocument = (String) param.get(convwatch.PropertyName.DOC_COMPARATOR_INPUT_PATH);
338                  sDocument = helper.StringHelper.removeQuoteIfExists( sDocument );
339                  startTestForFile(sDocument);
340                  // if (sDocument.toLowerCase().indexOf("writer") >= 0)
341                  // {
342                  //     startTestForFile(sDocument, WRITER);
343                  // }
344                  // else if (sDocument.toLowerCase().indexOf("calc") >= 0)
345                  // {
346                  //     startTestForFile(sDocument, CALC);
347                  // }
348                  // else
349                  // {
350                  //     assure("Can't identify the document no 'writer' nor 'calc' in it's name given.", false);
351                  // }
352              }
353              catch (AssureException e)
354              {
355                  stopOffice();
356                  throw new AssureException(e.getMessage());
357              }
358  
359              // ------------------------------ Office shutdown ------------------------------
360              stopOffice();
361          }
362  
363  // -----------------------------------------------------------------------------
startTestForFile(String _sDocument )364      private void startTestForFile(String _sDocument /*, int _nType*/)
365          {
366              File aFile = new File(_sDocument);
367              assure("Test File '" + _sDocument + "' doesn't exist.", aFile.exists());
368  
369              String sFileURL = URLHelper.getFileURLFromSystemPath(_sDocument);
370              log.println("File URL: " + sFileURL);
371  
372              XComponent xDocComponent = loadComponent(sFileURL, getXDesktop(), null);
373              log.println("Load done");
374  // 	context = createUnoService("com.sun.star.sdb.DatabaseContext")
375  //     oDataBase = context.getByName("hh")
376  //     oDBDoc = oDataBase.DatabaseDocument
377  //
378  // 	dim args(1) as new com.sun.star.beans.PropertyValue
379  // 	args(0).Name = "ActiveConnection"
380  // 	args(0).Value = oDBDoc.getCurrentController().getPropertyValue("ActiveConnection")
381  // 	reportContainer = oDBDoc.getReportDocuments()
382  //     report = reportContainer.loadComponentFromURL("Report40","",0,args)
383  
384              try
385              {
386                  XInterface x = (XInterface)m_xXMultiServiceFactory.createInstance("com.sun.star.sdb.DatabaseContext");
387                  assure("can't create instance of com.sun.star.sdb.DatabaseContext", x != null);
388                  log.println("createInstance com.sun.star.sdb.DatabaseContext done");
389  
390                  XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, x);
391                  showElements(xNameAccess);
392                  Object aObj = xNameAccess.getByName(sFileURL);
393  //                    log.println("1");
394  
395                      // PropertySetHelper aHelper = new PropertySetHelper(aObj);
396                  XDocumentDataSource xDataSource = (XDocumentDataSource)UnoRuntime.queryInterface(XDocumentDataSource.class, aObj);
397  //                    Object aDatabaseDocmuent = aHelper.getPropertyValueAsObject("DatabaseDocument");
398                  XOfficeDatabaseDocument xOfficeDBDoc = xDataSource.getDatabaseDocument();
399  
400                  // XOfficeDatabaseDocument xOfficeDBDoc = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, aDatabaseDocument);
401                  assure("can't access DatabaseDocument", xOfficeDBDoc != null);
402  //                    log.println("2");
403  
404                  XModel xDBSource = (XModel)UnoRuntime.queryInterface(XModel.class, xOfficeDBDoc);
405                  Object aController = xDBSource.getCurrentController();
406                  assure("Controller of xOfficeDatabaseDocument is empty!", aController != null);
407  //                     log.println("3");
408  
409                  XDatabaseDocumentUI aDBDocUI = (XDatabaseDocumentUI)UnoRuntime.queryInterface(XDatabaseDocumentUI.class, aController);
410                  aDBDocUI.connect();
411  //                     if (aDBDocUI.isConnected())
412  //                     {
413  //                         System.out.println("true");
414  //                     }
415  //                     else
416  //                     {
417  //                         System.out.println("false");
418  //                     }
419  //                     log.println("4");
420  
421                  // aHelper = new PropertySetHelper(aController);
422  
423                  // Object aActiveConnectionObj = aHelper.getPropertyValueAsObject("ActiveConnection");
424                  Object aActiveConnectionObj = aDBDocUI.getActiveConnection();
425                  assure("ActiveConnection is empty", aActiveConnectionObj != null);
426  //                     log.println("5");
427  
428                  XReportDocumentsSupplier xSupplier = (XReportDocumentsSupplier)UnoRuntime.queryInterface(XReportDocumentsSupplier.class, xOfficeDBDoc);
429                  xNameAccess = xSupplier.getReportDocuments();
430                  assure("xOfficeDatabaseDocument returns no Report Document", xNameAccess != null);
431  //                     log.println("5");
432  
433                  showElements(xNameAccess);
434  
435                  ArrayList aPropertyList = new ArrayList();
436  
437                  PropertyValue aActiveConnection = new PropertyValue();
438                  aActiveConnection.Name = "ActiveConnection";
439                  aActiveConnection.Value = aActiveConnectionObj;
440                  aPropertyList.add(aActiveConnection);
441  
442                  loadAndStoreReports(xNameAccess, aPropertyList /*, _nType*/ );
443                  createDBEntry(/*_nType*/);
444              }
445              catch(com.sun.star.uno.Exception e)
446              {
447                  log.println("ERROR: Exception caught");
448                  log.println("Message: " + e.getMessage());
449              }
450  
451              // String mTestDocumentPath = (String) param.get("TestDocumentPath");
452              // System.out.println("mTestDocumentPath: '" + mTestDocumentPath + "'");
453              // // workaround for issue using deprecated "DOCPTH" prop
454              // System.setProperty("DOCPTH", mTestDocumentPath);
455  
456              // Close the document
457              closeComponent(xDocComponent);
458          }
459  
getDocumentPoolName( )460      private String getDocumentPoolName(/*int _nType*/)
461          {
462              return "AutogenReportDesignTest";
463              // return getFileFormat(_nType);
464          }
465  
466  // -----------------------------------------------------------------------------
createDBEntry( )467      private void createDBEntry(/*int _nType*/)
468          {
469              // try to connect the database
470              String sDBConnection = (String)param.get( convwatch.PropertyName.DB_CONNECTION_STRING );
471              log.println("DBConnection: " + sDBConnection);
472              DB.init(sDBConnection);
473  
474              // String sFixRefSubDirectory = "ReportDesign_qa_complex_" + getFileFormat(_nType);
475              String sFixRefSubDirectory = "ReportDesignFixRef";
476  
477              String sSourceVersion = m_sSourceVersion;
478              // String sSourceVersion = sFixRefSubDirectory;
479              String sSourceName = m_sSourceName;
480              // String sSourceCreatorType = "fixref";
481              String sSourceCreatorType = "";
482              String sDestinationVersion = m_sDestinationVersion;
483              // if (sDestinationVersion.length() == 0)
484              // {
485              //     sDestinationVersion = m_sUPDMinor;
486              // }
487              String sDestinationName = m_sDestinationName;
488              String sDestinationCreatorType = "";
489              String sDocumentPoolDir = getOutputPath(/*_nType*/);
490              String sDocumentPoolName = getDocumentPoolName(/*_nType*/);
491              String sSpecial = "";
492  
493              DB.insertinto_documentcompare(sSourceVersion, sSourceName, sSourceCreatorType,
494                                            m_sDestinationVersion, sDestinationName, sDestinationCreatorType,
495                                            sDocumentPoolDir, sDocumentPoolName, m_sMailAddress,
496                                            sSpecial, m_sParentDistinct);
497              TimeHelper.waitInSeconds(1, "wait for DB.");
498              // DB.test();
499              // System.exit(1);
500          }
501  
loadAndStoreReports(XNameAccess _xNameAccess, ArrayList _aPropertyList )502      private void loadAndStoreReports(XNameAccess _xNameAccess, ArrayList _aPropertyList /*, int _nType*/ )
503          {
504              if (_xNameAccess != null)
505              {
506                  String[] sElementNames = _xNameAccess.getElementNames();
507                  for(int i=0;i<sElementNames.length; i++)
508                  {
509                      String sReportName = sElementNames[i];
510                      XComponent xDoc = loadComponent(sReportName, _xNameAccess, _aPropertyList);
511                      // print? or store?
512                      storeComponent(sReportName, xDoc /*, _nType*/);
513                      closeComponent(xDoc);
514                  }
515              }
516          }
517  
getFormatExtension(Object _xComponent )518      private String getFormatExtension(Object _xComponent /* int _nType*/ )
519           {
520               String sExtension;
521               XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, _xComponent );
522               if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) )
523               {
524                   // calc
525                   sExtension = ".ods";
526               }
527               else if (xServiceInfo.supportsService("com.sun.star.text.TextDocument"))
528               {
529                   //writer
530                   sExtension = ".odt";
531               }
532               else
533               {
534                   sExtension = ".UNKNOWN";
535               }
536               return sExtension;
537           }
538  
539      //         switch(_nType)
540      //         {
541      //         case WRITER:
542      //             sExtension = ".odt";
543      //             break;
544      //         case CALC:
545      //             sExtension = ".ods";
546      //             break;
547      //         default:
548      //             sExtension = ".UNKNOWN";
549      //         }
550      //         return sExtension;
551      //     }
552      // private String getFileFormat(int _nType)
553      //     {
554      //         String sFileType;
555      //         switch(_nType)
556      //         {
557      //         case WRITER:
558      //             sFileType = "writer8";
559      //             break;
560      //         case CALC:
561      //             sFileType = "calc8";
562      //             break;
563      //         default:
564      //             sFileType = "UNKNOWN";
565      //         }
566      //         return sFileType;
567      //     }
568  
569      private String m_sOutputPath = null;
570  
getOutputPath( )571      private String getOutputPath(/*int _nType*/)
572          {
573              if (m_sOutputPath == null)
574              {
575                  String sOutputPath = (String)param.get( convwatch.PropertyName.DOC_COMPARATOR_OUTPUT_PATH );
576                  sOutputPath = helper.StringHelper.removeQuoteIfExists(sOutputPath);
577  
578                  if (!sOutputPath.endsWith("/") ||         // construct the output file name
579                      !sOutputPath.endsWith("\\"))
580                  {
581                      sOutputPath += System.getProperty("file.separator");
582                  }
583                  // sOutputPath += "tmp_123";
584                  sOutputPath += DateHelper.getDateTimeForFilename();
585                  sOutputPath += System.getProperty("file.separator");
586  
587                  // sOutputPath += getFileFormat(_nType);
588                  // sOutputPath += System.getProperty("file.separator");
589  
590                  File aOutputFile = new File(sOutputPath); // create the directory of the given output path
591                  aOutputFile.mkdirs();
592                  m_sOutputPath = sOutputPath;
593              }
594              return m_sOutputPath;
595          }
596  
597      /*
598        store given _xComponent under the given Name in DOC_COMPARATOR_INPUTPATH
599       */
storeComponent(String _sName, Object _xComponent )600      private void storeComponent(String _sName, Object _xComponent /*, int _nType*/ )
601          {
602              String sOutputPath = getOutputPath(/*_nType*/);
603  
604              // add DocumentPoolName
605              sOutputPath += getDocumentPoolName(/*_nType*/);
606              sOutputPath += System.getProperty("file.separator");
607  
608              File aOutputFile = new File(sOutputPath); // create the directory of the given output path
609              aOutputFile.mkdirs();
610  
611              sOutputPath += _sName;
612              sOutputPath += getFormatExtension(_xComponent /*_nType*/);
613  
614              String sOutputURL = URLHelper.getFileURLFromSystemPath(sOutputPath);
615  
616              ArrayList aPropertyList = new ArrayList(); // set some properties for storeAsURL
617  
618              // PropertyValue aFileFormat = new PropertyValue();
619              // aFileFormat.Name = "FilterName";
620              // aFileFormat.Value = getFileFormat(_nType);
621              // aPropertyList.add(aFileFormat);
622  
623              PropertyValue aOverwrite = new PropertyValue(); // always overwrite already exist files
624              aOverwrite.Name = "Overwrite";
625              aOverwrite.Value = Boolean.TRUE;
626              aPropertyList.add(aOverwrite);
627  
628              // store the document in an other directory
629              XStorable aStorable = (XStorable) UnoRuntime.queryInterface( XStorable.class, _xComponent);
630              if (aStorable != null)
631              {
632                  log.println("store document as URL: '" + sOutputURL + "'");
633                  try
634                  {
635                      aStorable.storeAsURL(sOutputURL, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList));
636                  }
637                  catch (com.sun.star.io.IOException e)
638                  {
639                      log.println("ERROR: Exception caught");
640                      log.println("Can't write document URL: '" + sOutputURL + "'");
641                      log.println("Message: " + e.getMessage());
642                  }
643              }
644          }
645  
loadComponent(String _sName, Object _xComponent, ArrayList _aPropertyList)646      private XComponent loadComponent(String _sName, Object _xComponent, ArrayList _aPropertyList)
647          {
648              XComponent xDocComponent = null;
649              XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface( XComponentLoader.class, _xComponent );
650  
651              try
652              {
653                  PropertyValue[] aLoadProperties = PropertyHelper.createPropertyValueArrayFormArrayList(_aPropertyList);
654                  log.println("Load component: '" + _sName + "'");
655                  xDocComponent = xComponentLoader.loadComponentFromURL(_sName, "_blank", 0, aLoadProperties);
656                  log.println("Load component: '" + _sName + "' done");
657              }
658              catch (com.sun.star.io.IOException e)
659              {
660                  log.println("ERROR: Exception caught");
661                  log.println("Can't load document '" + _sName + "'");
662                  log.println("Message: " + e.getMessage());
663              }
664              catch (com.sun.star.lang.IllegalArgumentException e)
665              {
666                  log.println("ERROR: Exception caught");
667                  log.println("Illegal Arguments given to loadComponentFromURL.");
668                  log.println("Message: " + e.getMessage());
669              }
670              return xDocComponent;
671          }
672  
closeComponent(XComponent _xDoc)673      private void closeComponent(XComponent _xDoc)
674          {
675              // Close the document
676              XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, _xDoc);
677              try
678              {
679                  xCloseable.close(true);
680              }
681              catch (com.sun.star.util.CloseVetoException e)
682              {
683                  log.println("ERROR: CloseVetoException caught");
684                  log.println("CloseVetoException occured Can't close document.");
685                  log.println("Message: " + e.getMessage());
686              }
687          }
688  
689  }
690