package com.xceptance.xlt.common.util.action.execution;
import java.text.MessageFormat;
import java.util.HashSet;
import java.util.Set;
import com.xceptance.xlt.api.util.XltLogger;
import com.xceptance.xlt.api.util.XltProperties;
import com.xceptance.xlt.common.util.NoCodingPropAdmin;
import com.xceptance.xlt.common.util.ParameterUtils;
/**
* Builder <br>
* Creates a {@link URLActionDataExecutionableFactory}, depending on the {@link #mode}.
*
* @author matthias mitterreiter
*/
public class URLActionDataExecutionbleFactoryBuilder
{
/**
* mode of execution
*/
private String mode;
private NoCodingPropAdmin propAdmin;
public static final String MODE_DOM = "dom";
public static final String MODE_LIGHT = "light";
public static final Set<String> PERMITTEDMODES = new HashSet<String>();
static
{
PERMITTEDMODES.add(MODE_DOM);
PERMITTEDMODES.add(MODE_LIGHT);
}
/**
* @param properties
* {@link XltProperties}
* @param mode
* {@link mode}
*/
public URLActionDataExecutionbleFactoryBuilder(final NoCodingPropAdmin propAdmin, final String mode)
{
setMode(mode);
setPropertiesAdmin(propAdmin);
XltLogger.runTimeLogger.debug("Creating new Instance");
}
/**
* builds a {@link URLActionDataExecutionableFactory} depending on the {@link #mode}, set in the Constructor.
*
* @return {@link URLActionDataExecutionableFactory}
*/
public URLActionDataExecutionableFactory buildFactory()
{
final URLActionDataExecutionableFactory factory = produceFactory();
return factory;
}
private void setPropertiesAdmin(final NoCodingPropAdmin propAdmin)
{
ParameterUtils.isNotNull(propAdmin, "NoCodingPropAdmin");
this.propAdmin = propAdmin;
}
private void setMode(final String mode)
{
if (isPermittedMode(mode))
{
this.mode = mode;
}
else
{
throw new IllegalArgumentException(MessageFormat.format("Running mode : \"{0}\" is not supported!", mode));
}
}
private URLActionDataExecutionableFactory produceFactory()
{
final URLActionDataExecutionableFactory resultFactory;
if (this.mode.equals(MODE_DOM))
{
resultFactory = createHtmlPageActionFactory();
}
else if (this.mode.equals(MODE_LIGHT))
{
resultFactory = createLightWeightPageActionFactory();
}
else
{
throw new IllegalArgumentException("THIS WILL NEVER HAPPEN :D");
}
return resultFactory;
}
private HtmlPageActionFactory createHtmlPageActionFactory()
{
return new HtmlPageActionFactory(this.propAdmin);
}
private LightWeightPageActionFactory createLightWeightPageActionFactory()
{
return new LightWeightPageActionFactory(this.propAdmin);
}
private boolean isPermittedMode(final String item)
{
return PERMITTEDMODES.contains(item);
}
public String getMode() {
return mode;
}
public NoCodingPropAdmin getPropAdmin() {
return propAdmin;
}
}