blob: 172b6cc056d431d7d40d5be7729ddf623d764a72 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package convwatch;
import com.sun.star.lang.XMultiServiceFactory;
import lib.TestParameters;
import java.io.File;
import com.sun.star.container.XNameAccess;
import com.sun.star.uno.UnoRuntime;
/**
* This class object is more a Helper or Controller.
* It stores information like:
* - How to create a document (with a OpenOffice.org method, or with MS Word, or with OpenOffice.org as pdf)
* - some more infos for OpenOffice.org method
* - a service factory pointer
* - if hidden mode should use
* - target name
*
* - printer name
*
* - how to handle .xml files, which in Microsoft could be Excel or Word documents
*
* HOWTO USE:
* For OOo,
* create an GraphicalTestArguments with a set of TestParameters
* GraphicalTestArguments a = new GraphicalTestArguments(params);
*
* If you wish to use pdf export instead of normal printer output, set also the reference type to 'pdf'
* a.setReferenceType("pdf");
*
*
* For MS Office:
* create an GraphicalTestArguments and set the reference type to 'msoffice'
* GraphicalTestArguments a = new GraphicalTestArguments(params);
* a.setReferenceType("msoffice");
*
* within windows it's better to set also a printer name so it's simply possible to use for normal work the default printer
* and for such tests with ConvWatch a extra printer.
* a.setPrinterName("CrossOffice Printer");
*
*/
public class GraphicalTestArguments
{
/**
2DO:
Possible reference types are currently
// ooo
// pdf
// msoffice
*/
String m_sReferenceType = "OOo";
String m_sTargetFrameName = "_blank";
String m_sPrinterName = null;
// Hidden = true hiddes a used OpenOffice.org, all code is executed in the background
// This parameter is not used for RefType: msoffice
boolean m_bHidden = true;
String m_sDefaultXMLFormatApplication = null;
boolean m_bIncludeSubdirectories;
TestParameters m_aCurrentParams;
int m_nMaxPages = 0; // default is 0 (print all pages)
String m_sOnlyPage = ""; // default is "", there is no page which we want to print only.
int m_nResolutionInDPI = 0;
boolean m_bStoreFile = true;
boolean m_bResuseOffice = false;
boolean m_bDebugMode = false;
String m_sLeaveOutNames = null;
String m_sDistinct = null;
boolean m_bCreateDefaultReference = false;
// CONSTRUCTOR
private GraphicalTestArguments(){}
public GraphicalTestArguments(TestParameters param)
{
m_aCurrentParams = param;
// collect interesting information from the ComplexTestCase
// ....
// REFERENCE_TYPE ----------
String sReferenceType = (String)param.get( PropertyName.DOC_COMPARATOR_REFERENCE_TYPE );
if (sReferenceType == null || sReferenceType.length() == 0)
{
}
else
{
// log.println("found REFERENCE_TYPE " + sReferenceType );
setReferenceType(sReferenceType);
}
// PRINTER_NAME ----------
String sPrinterName = (String)param.get( PropertyName.DOC_COMPARATOR_PRINTER_NAME );
if (sPrinterName == null || sPrinterName.length() == 0)
{
}
else
{
// log.println("found PRINTER_NAME " + sPrinterName );
setPrinterName(sPrinterName);
}
// DEFAULT_XML_FORMAT_APP ------
String sDefaultXMLFormatApp = (String)param.get( PropertyName.DOC_COMPARATOR_DEFAULT_XML_FORMAT_APP );
if (sDefaultXMLFormatApp == null || sDefaultXMLFormatApp.length() == 0)
{
}
else
{
setDefaultXMLFormatApp(sDefaultXMLFormatApp);
}
m_bIncludeSubdirectories = true;
String sRECURSIVE = (String)param.get( PropertyName.DOC_COMPARATOR_INCLUDE_SUBDIRS );
// TODO: I need to get the boolean value with get("name") because, if it is not given getBool() returns
// with a default of 'false' which is not very helpful if the default should be 'true'
// maybe a getBoolean("name", true) could be a better choise.
if (sRECURSIVE == null)
{
sRECURSIVE = "true";
}
if (sRECURSIVE.toLowerCase().equals("no") ||
sRECURSIVE.toLowerCase().equals("false"))
{
m_bIncludeSubdirectories = false;
}
// ----------------------------------------
m_nMaxPages = param.getInt( PropertyName.DOC_COMPARATOR_PRINT_MAX_PAGE );
m_sOnlyPage = (String)param.get(PropertyName.DOC_COMPARATOR_PRINT_ONLY_PAGE);
m_nResolutionInDPI = param.getInt( PropertyName.DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION );
if (m_nResolutionInDPI == 0)
{
// 212 DPI is 1754 x 2474 pixel for DIN A4
m_nResolutionInDPI = 212;
}
// ----------------------------------------
String sImportFilterName = (String)param.get(PropertyName.DOC_CONVERTER_IMPORT_FILTER_NAME);
if (sImportFilterName != null && sImportFilterName.length() > 0)
{
// System.out.println("found " + PropertyName.DOC_CONVERTER_IMPORT_FILTER_NAME + " " + sImportFilterName );
m_sImportFilterName = sImportFilterName;
if (sImportFilterName.toLowerCase().equals("help"))
{
showInternalFilterName(sImportFilterName, getMultiServiceFactory() );
GlobalLogWriter.get().println("Must quit.");
}
}
// ----------------------------------------
String sExportFilterName = (String)param.get(PropertyName.DOC_CONVERTER_EXPORT_FILTER_NAME);
if (sExportFilterName != null && sExportFilterName.length() > 0)
{
// System.out.println("found " + PropertyName.DOC_CONVERTER_EXPORT_FILTER_NAME + " " + sExportFilterName );
m_sExportFilterName = sExportFilterName;
if (sExportFilterName.toLowerCase().equals("help"))
{
showInternalFilterName(sExportFilterName, getMultiServiceFactory() );
GlobalLogWriter.get().println("Must quit.");
}
}
// ----------------------------------------
String sOfficeProgram = (String)param.get(PropertyName.DOC_CONVERTER_OFFICE_PROGRAM);
if (sOfficeProgram != null && sOfficeProgram.length() > 0)
{
m_sOfficeProgram = sOfficeProgram;
}
// ----------------------------------------
String sREUSE_OFFICE = (String)param.get( PropertyName.DOC_CONVERTER_REUSE_OFFICE);
if (sREUSE_OFFICE == null)
{
sREUSE_OFFICE = "false";
}
if (sREUSE_OFFICE.toLowerCase().equals("yes") ||
sREUSE_OFFICE.toLowerCase().equals("true"))
{
m_bResuseOffice = true;
}
else
{
m_bResuseOffice = false;
}
String sHTMLOutputPrefix = (String)param.get( PropertyName.DOC_COMPARATOR_HTML_OUTPUT_PREFIX);
if (sHTMLOutputPrefix == null)
{
m_sHTMLOutputPrefix = "";
}
else
{
m_sHTMLOutputPrefix = sHTMLOutputPrefix;
}
String sWithBorderMove = (String)param.get( PropertyName.DOC_COMPARATOR_GFXCMP_WITH_BORDERMOVE);
if (sWithBorderMove == null)
{
sWithBorderMove = "";
// m_tWithBorderMove = TriState.UNSET;
m_tWithBorderMove = TriState.FALSE;
}
if (sWithBorderMove.toLowerCase().equals("yes") ||
sWithBorderMove.toLowerCase().equals("true"))
{
m_tWithBorderMove = TriState.TRUE;
}
else if (sWithBorderMove.toLowerCase().equals("no") ||
sWithBorderMove.toLowerCase().equals("false"))
{
m_tWithBorderMove = TriState.FALSE;
}
else
{
m_tWithBorderMove = TriState.FALSE;
// m_tWithBorderMove = TriState.UNSET;
}
String sLeaveOutNames = (String)param.get(PropertyName.DOC_COMPARATOR_LEAVE_OUT_FILES);
if (sLeaveOutNames != null)
{
m_sLeaveOutNames = sLeaveOutNames;
}
String sDBInfoString = (String)param.get(PropertyName.DOC_COMPARATOR_DB_INFO_STRING);
if (sDBInfoString != null)
{
m_sDBInfoString = sDBInfoString;
}
// DISTINCT ----------
String sDistinct = (String)param.get( "DISTINCT" );
if (sDistinct == null || sDistinct.length() == 0)
{
sDistinct = "";
}
else
{
m_sDistinct = sDistinct;
}
// HIDDEN
String sOfficeViewable = (String)param.get(PropertyName.OFFICE_VIEWABLE);
if (sOfficeViewable != null)
{
if (sOfficeViewable.toLowerCase().equals("yes") ||
sOfficeViewable.toLowerCase().equals("true"))
{
setViewable();
}
else
{
setHidden();
}
}
// CREATE_DEFAULT
String sCreateDefault = (String)param.get(PropertyName.CREATE_DEFAULT);
if (sCreateDefault != null)
{
if (sCreateDefault.toLowerCase().equals("yes") ||
sCreateDefault.toLowerCase().equals("true"))
{
m_bCreateDefaultReference = true;
}
else
{
m_bCreateDefaultReference = false;
}
}
}
public boolean checkIfUsableDocumentType(String _sName)
{
// @todo
// check if the name is in the leave out list and then return 'false'
if (_sName.toLowerCase().endsWith(".jpg") ||
_sName.toLowerCase().endsWith(".png") ||
_sName.toLowerCase().endsWith(".gif") ||
_sName.toLowerCase().endsWith(".bmp") ||
_sName.toLowerCase().endsWith(".prn") ||
_sName.toLowerCase().endsWith(".ps"))
{
return false;
}
return true;
}
static void showInternalFilterName(String _sFilterName, XMultiServiceFactory _xMSF)
{
if (_sFilterName.length() == 0)
{
// System.out.println("No FilterName set.");
return;
}
if (_xMSF == null)
{
GlobalLogWriter.get().println("MultiServiceFactory not set.");
return;
}
// XFilterFactory aFilterFactory = null;
Object aObj = null;
try
{
aObj = _xMSF.createInstance("com.sun.star.document.FilterFactory");
}
catch(com.sun.star.uno.Exception e)
{
GlobalLogWriter.get().println("Can't get com.sun.star.document.FilterFactory.");
return;
}
if (aObj != null)
{
XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aObj);
if (aNameAccess != null)
{
if (_sFilterName.toLowerCase().equals("help"))
{
GlobalLogWriter.get().println("Show all possible ElementNames from current version." );
String[] aElementNames = aNameAccess.getElementNames();
for (int i = 0; i<aElementNames.length; i++)
{
GlobalLogWriter.get().println(aElementNames[i]);
}
}
}
}
}
/*
public GraphicalTestArguments(TestParameters param, Log xxx)
{
// collect interesting information from the ComplexTestCase
// ....
}
*/
// set methods
public void setReferenceType(String _sType)
{
// special casse, null is not allowed, set to default.
if (_sType == null)
{
m_sReferenceType = "OOo";
}
else
{
m_sReferenceType = _sType;
}
}
public void setTargetFrameName(String _sTargetFrameName) {m_sTargetFrameName = _sTargetFrameName;}
public void setPrinterName(String _sName) {m_sPrinterName = _sName;}
public void setHidden() { m_bHidden = true;}
public void setViewable() {m_bHidden = false;}
public void setDefaultXMLFormatApp(String _sNameOfApp) {m_sDefaultXMLFormatApplication = _sNameOfApp;}
// get methods
public XMultiServiceFactory getMultiServiceFactory()
{
XMultiServiceFactory xMSF = (XMultiServiceFactory)m_aCurrentParams.getMSF();
// check if MultiServiceFactory is given
if (getReferenceType().toLowerCase().equals("pdf") ||
getReferenceType().toLowerCase().equals("ooo"))
{
if (xMSF == null)
{
GlobalLogWriter.get().println("ERROR! MultiServiceFactory not given.");
}
}
return xMSF;
}
public String getReferenceType() {return m_sReferenceType;}
public String getTargetFrameName() {return m_sTargetFrameName;}
public String getPrinterName() {return m_sPrinterName;}
public boolean isHidden() {return m_bHidden;}
public String getDefaultXMLFormatApp() {return m_sDefaultXMLFormatApplication;}
/**
* @return true, if subdirectories should run through
*/
public boolean includeSubDirectories() {return m_bIncludeSubdirectories;}
/**
* @return the number of pages to be print
*/
public int getMaxPages() {return m_nMaxPages;}
/**
* @return as string, which pages should be print, e.g. '1-4;6' here, page 1 to 4 and page 6.
*/
public String getOnlyPages()
{
if (m_sOnlyPage == null)
{
return "";
}
return m_sOnlyPage;
}
/**
* @return true, if there should not print all pages at all, use getMaxPages() and or getOnlyPages() to get which pages to print
*/
public boolean printAllPages()
{
if ( (getMaxPages() > 0) ||
(getOnlyPages().length() != 0))
{
return false;
}
return true;
}
/**
* @return integer value, which contain resolution in DPI.
*/
public int getResolutionInDPI() {return m_nResolutionInDPI;}
public static void checkIfMSWindowsConformPath(String _sPath)
{
if (_sPath != null && _sPath.length() > 1)
{
if (_sPath.charAt(1) == ':')
{
if (_sPath.charAt(2) != '\\')
{
GlobalLogWriter.get().println("This is not a Microsoft Windows conform path: '" + _sPath + "' please fix.");
System.exit(1);
}
}
}
}
/**
* @return the INPUT_PATH out of the TestParameters
*/
public String getInputPath()
{
String sInputPath;
sInputPath = (String)m_aCurrentParams.get(PropertyName.DOC_COMPARATOR_INPUT_PATH);
checkIfMSWindowsConformPath(sInputPath);
return sInputPath;
}
/**
* @return the OUTPUT_PATH out of the TestParameters
*/
public String getOutputPath()
{
String sOutputPath;
sOutputPath = (String)m_aCurrentParams.get(PropertyName.DOC_COMPARATOR_OUTPUT_PATH);
checkIfMSWindowsConformPath(sOutputPath);
return sOutputPath;
}
/**
* @return the REFERENCE_PATH out of the TestParameters
*/
public String getReferencePath()
{
String sReferencePath;
sReferencePath = (String)m_aCurrentParams.get(PropertyName.DOC_COMPARATOR_REFERENCE_PATH);
checkIfMSWindowsConformPath(sReferencePath);
return sReferencePath;
}
/**
* @return the DIFF_PATH out of the TestParameters
*/
public String getDiffPath()
{
String sDiffPath;
sDiffPath = (String)m_aCurrentParams.get(PropertyName.DOC_COMPARATOR_DIFF_PATH);
checkIfMSWindowsConformPath(sDiffPath);
return sDiffPath;
}
public boolean getOverwrite()
{
boolean bOverwrite = m_aCurrentParams.getBool( PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE);
return bOverwrite;
}
public String getReferenceInputPath()
{
String sReferenceInputPath;
sReferenceInputPath = (String)m_aCurrentParams.get(PropertyName.DOC_COMPARATOR_REFERENCE_INPUT_PATH);
return sReferenceInputPath;
}
/**
* Helper function to get the buildid of the current used OpenOffice.org
* out of the AppExecutionCommand the build ID
*/
public String getBuildID()
{
String sAPP = (String)m_aCurrentParams.get(util.PropertyName.APP_EXECUTION_COMMAND);
// return getBuildID(sAPP);
// TODO: here we need the getBuildID(string) method
String sBuildID = convwatch.BuildID.getBuildID(sAPP);
return sBuildID;
}
public boolean shouldOfficeStart()
{
String sNoOffice = (String)m_aCurrentParams.get( "NoOffice" );
if (sNoOffice != null)
{
if (sNoOffice.toLowerCase().startsWith("t") || sNoOffice.toLowerCase().startsWith("y"))
{
return false;
}
}
return true;
}
// Handle for Reference Build ID, is set in ConvWatch.createPostscriptStartCheck()
private String m_sRefBuildID;
public void setRefBuildID(String _sRef)
{
m_sRefBuildID = _sRef;
}
public String getRefBuildID()
{
return m_sRefBuildID;
}
public void disallowStore()
{
m_bStoreFile = false;
}
public void allowStore()
{
m_bStoreFile = true;
}
public boolean isStoreAllowed()
{
return m_bStoreFile;
}
public boolean createDefaultReference()
{
return m_bCreateDefaultReference;
}
// get/set for FilterName
// get the right Filtername (internal Name) from
// http://framework.openoffice.org/files/documents/25/897/filter_description.html
String m_sImportFilterName = "";
String m_sExportFilterName = "";
public void setImportFilterName(String _sImportFilterName)
{
m_sImportFilterName = _sImportFilterName;
}
public String getImportFilterName()
{
return m_sImportFilterName;
}
public void setExportFilterName(String _sExportFilterName)
{
m_sExportFilterName = _sExportFilterName;
}
public String getExportFilterName()
{
return m_sExportFilterName;
}
String m_sOfficeProgram = "";
public void setOfficeProgram(String _sName)
{
m_sOfficeProgram = _sName;
}
public String getOfficeProgram()
{
return m_sOfficeProgram;
}
public boolean restartOffice()
{
if (m_bResuseOffice == false)
{
return true;
}
return false;
}
String m_sHTMLOutputPrefix = "";
public String getHTMLOutputPrefix()
{
return m_sHTMLOutputPrefix;
}
TriState m_tWithBorderMove = TriState.UNSET;
// public TriState isBorderMove()
// {
// return m_tWithBorderMove;
// }
public TriState getBorderMove()
{
return m_tWithBorderMove;
}
public void setBorderMove(TriState _tBorderMove)
{
m_tWithBorderMove = _tBorderMove;
}
String m_sDocumentType = "";
public void setDocumentType(String _sName)
{
m_sDocumentType = _sName;
}
public String getDocumentType()
{
return m_sDocumentType;
}
/*
helper class for performance analyser features
*/
PerformanceContainer m_aPerformanceContainer = null;
public PerformanceContainer getPerformance()
{
if (m_aPerformanceContainer == null)
{
m_aPerformanceContainer = new PerformanceContainer();
}
return m_aPerformanceContainer;
}
private String m_aInputFile;
public void setInputFile(String _sInputFile)
{
m_aInputFile = _sInputFile;
}
public String getInputFile()
{
return m_aInputFile;
}
private String m_sDBInfoString;
public String getDBInfoString()
{
if (m_sDBInfoString != null)
{
if (m_sDBInfoString.length() == 0)
{
return null;
}
}
return m_sDBInfoString;
}
public boolean cancelRequest()
{
File aCancelFile = null;
String fs;
fs = System.getProperty("file.separator");
String sTempPath = (String)m_aCurrentParams.get( PropertyName.TEMPPATH );
if (sTempPath != null)
{
String sGDC_Dir = sTempPath;
if (m_sDistinct.length() > 0)
{
sGDC_Dir = sGDC_Dir + fs + m_sDistinct;
}
String sCancelFile = sGDC_Dir + fs + "cancel_compare.txt";
aCancelFile = new File(sCancelFile);
if (aCancelFile.exists())
{
GlobalLogWriter.get().println("ATTENTION: Found file: '" + sCancelFile + "'.");
GlobalLogWriter.get().println("User has canceled the program flow.");
return true;
}
}
return false;
}
}
/*
public class MSGraphicalTestArguments extends GraphicalTestArguments
{
MSGraphicalTestArguments()
{
setReferenceType("msoffice");
}
}
public class OOoGraphicalTestArguments extends GraphicalTestArguments
{
OOoGraphicalTestArguments(XMultiServiceFactory _aFactory)
{
setMultiServiceFactory(_aFactory);
}
}
*/