blob: f70671a61ca127b8de43e48a3178559bed57a5d9 [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.
*/
/*
* $Id$
*/
package org.apache.qetest;
import java.util.Properties;
/**
* Factory constructor for various qetest-related objects.
*
* Currently only supports finding an appropriate instance
* of a file-based CheckService.
*
* @author Shane_Curcuru@lotus.com
* @version $Id$
*/
public abstract class QetestFactory
{
/** Constant denoting a default CheckService for Files. */
public static final String TYPE_FILES = "QetestFactory.FILECHECK";
/** Default TYPE_FILES implementation class. */
public static final String DEFAULT_TYPE_FILES = "org.apache.qetest.xsl.XHTFileCheckService";
/**
* Get a new CheckService of a specified type.
*
* Currently only supports the TYPE_FILES or your own FQCN.
*
* @param type FQCN or constant type of CheckService needed
* @return CheckService of the appropriate type; or a fallback
* type if not found and a fallback is available.
*/
public static CheckService newCheckService(Logger logger, String type)
{
CheckService service = null;
if (null == type)
{
logger.logMsg(Logger.ERRORMSG, "Warning: no type specified for newCheckService!");
return null;
}
else if (TYPE_FILES.equals(type))
{
// Return our default impl
Class fClazz = QetestUtils.testClassForName(DEFAULT_TYPE_FILES, null, null);
if (null == fClazz)
{
logger.logMsg(Logger.ERRORMSG, "Warning: no default fileChecker is available: " + DEFAULT_TYPE_FILES);
return null; //@todo should we throw exception instead?
}
try
{
service = (CheckService)fClazz.newInstance();
//logger.logMsg(Logger.TRACEMSG, TYPE_FILES + " is " + service);
}
catch (Exception e)
{
logger.logThrowable(Logger.ERRORMSG, e, "newCheckService(" + TYPE_FILES + ") threw");
}
return service;
}
else // Assume a classname of your impl
{
// Return our default impl
Class fClazz = QetestUtils.testClassForName(type, QetestUtils.defaultPackages, null);
if (null == fClazz)
{
logger.logMsg(Logger.ERRORMSG, "Warning: no fileChecker is available of type: " + type);
return null; //@todo should we throw exception instead?
}
try
{
service = (CheckService)fClazz.newInstance();
logger.logMsg(Logger.TRACEMSG, TYPE_FILES + " is " + service);
}
catch (Exception e)
{
logger.logThrowable(Logger.ERRORMSG, e, "newCheckService(" + TYPE_FILES + ") threw");
}
return service;
}
}
/**
* Get a new Reporter with some defaults.
*
* Will attempt to initialize the appropriate Reporter
* depending on the options passed in; if all else fails, will
* return at least a ConsoleLogger.
*
* @param options to create Reporter from
* @return appropriate Reporter instance, or a default one.
*/
public static Reporter newReporter(Properties options)
{
Reporter reporter = null;
if (null == options)
{
// Return a default Reporter
reporter = new Reporter(null);
reporter.addDefaultLogger(); // add default logger automatically
return reporter;
}
// Setup appropriate defaults for the Reporter
// Ensure we have an XMLFileLogger if we have a logName
String logF = options.getProperty(Logger.OPT_LOGFILE);
if ((logF != null) && (!logF.equals("")))
{
// We should ensure there's an XMLFileReporter
String r = options.getProperty(Reporter.OPT_LOGGERS);
if (r == null)
{
// Create the property if needed...
options.put(Reporter.OPT_LOGGERS,
"org.apache.qetest.XMLFileLogger");
}
else if (r.indexOf("XMLFileLogger") <= 0)
{
// ...otherwise append to existing list
options.put(Reporter.OPT_LOGGERS,
r + Reporter.LOGGER_SEPARATOR
+ "org.apache.qetest.XMLFileLogger");
}
}
// Ensure we have a ConsoleLogger unless asked not to
// @todo improve and document this feature
String noDefault = options.getProperty("noDefaultReporter");
if (noDefault == null)
{
// We should ensure there's an XMLFileReporter
String r = options.getProperty(Reporter.OPT_LOGGERS);
if (r == null)
{
options.put(Reporter.OPT_LOGGERS,
"org.apache.qetest.ConsoleLogger");
}
else if (r.indexOf("ConsoleLogger") <= 0)
{
options.put(Reporter.OPT_LOGGERS,
r + Reporter.LOGGER_SEPARATOR
+ "org.apache.qetest.ConsoleLogger");
}
}
// Pass our options directly to the reporter
// so it can use the same values in initialization
// A Reporter will auto-initialize from the values
// in the properties block
reporter = new Reporter(options);
return reporter;
}
/**
* Get a new Logger with some defaults.
*
* Currently a redirect to call (Logger)newReporter(options).
*
* @param options to create Logger from
* @return appropriate Logger instance, or a default one.
*/
public static Logger newLogger(Properties options)
{
return (Logger)newReporter(options);
}
/** Prevent instantiation - private constructor. */
private QetestFactory() { /* no-op */ }
} // end of class CheckService