package com.oceaneconsulting.tanaguru.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.tanaguru.entity.parameterization.Parameter;
import org.tanaguru.entity.service.parameterization.ParameterDataService;
import org.apache.commons.lang3.StringUtils;
import com.oceaneconsulting.tanaguru.ws.types.CommonOrder;
/**
* Parameters initialization utilities.
*
* This class defines sets of parameters used in different webservice's
* operations.
*
* @author shamdi at oceaneconsulting dot com
*
*/
public class ParameterUtils {
/**
* Class logger definition
*/
private static final Logger LOGGER = Logger.getLogger(ParameterUtils.class);
public static Map<String, List<Parameter>> parametersMap = null;
public static void initParametersMap(ParameterDataService parameterDataService) {
// create map for parameters identified par parent element code.
if (parametersMap == null) {
// get all parameters
Collection<Parameter> params = parameterDataService.findAll();
parametersMap = new HashMap();
for (Parameter param : params) {
if (param != null && param.getParameterElement() != null && param.getParameterElement().getParameterElementCode() != null) {
if (!parametersMap.containsKey(param.getParameterElement().getParameterElementCode())) {
parametersMap.put(param.getParameterElement().getParameterElementCode(), new ArrayList<Parameter>());
}
param.setDefaultParameterValue(Boolean.FALSE);
parametersMap.get(param.getParameterElement().getParameterElementCode()).add(param);
}
}
}
}
/**
* Common parameters definition with default values.
*
* @return set of parameters needed in audit request.
*/
private static Set<Parameter> commonDefaultParameters() {
Set<Parameter> parameters = new HashSet();
parameters.add(createParameter(ParameterInputs.DATA_TABLE_MARKER, ""));
parameters.add(createParameter(ParameterInputs.PROXY_HOST, ""));
parameters.add(createParameter(ParameterInputs.CONSIDER_COOKIES, "true"));
parameters.add(createParameter(ParameterInputs.ALTERNATIVE_CONTRAST_MECHANISM, "false"));
parameters.add(createParameter(ParameterInputs.INFORMATIVE_IMAGE_MARKER, ""));
parameters.add(createParameter(ParameterInputs.PROXY_PORT, ""));
parameters.add(createParameter(ParameterInputs.PRESENTATION_TABLE_MARKER, ""));
parameters.add(createParameter(ParameterInputs.DECORATIVE_IMAGE_MARKER, ""));
return parameters;
}
/**
* Create parameter based on minimal information.
*
* @param code : parameter element code
* @param value : parameter value
* @return initialized parameter
*/
public static Parameter createParameter(String code, String value) {
Parameter parameter = null;
//Parameter identification
if (parametersMap != null && parametersMap.containsKey(code)) {
List<Parameter> parameters = parametersMap.get(code);
for (Parameter param : parameters) {
if (value.equals(param.getValue())) {//second level identification of parameter
parameter = param;
}
}
if (parameter == null) { //
parameter = parameters.get(0);
}
}
if (parameter != null) {
parameter.setDefaultParameterValue(Boolean.TRUE);
parameter.setValue(value);
}
return parameter;
}
/**
* Page audit parameters definition with default values.
*
* @return set of parameters needed in page audit request.
*/
public static Set<Parameter> getDefaultParametersForPA() {
Set<Parameter> parameters = commonDefaultParameters();
//specific parameters to page audit
parameters.add(createParameter(ParameterInputs.MAX_DOCUMENTS, "1"));
parameters.add(createParameter(ParameterInputs.MAX_DURATION, "86400"));
parameters.add(createParameter(ParameterInputs.EXCLUSION_REGEXP, ""));
parameters.add(createParameter(ParameterInputs.DEPTH, "0"));
return parameters;
}
/**
* Site audit parameters definition with default values.
*
* @return set of parameters needed in site audit request.
*/
public static Set<Parameter> getDefaultParametersForSite() {
Set<Parameter> parameters = commonDefaultParameters();
//specific parameters to page audit
parameters.add(createParameter(ParameterInputs.MAX_DOCUMENTS, "10000"));
parameters.add(createParameter(ParameterInputs.MAX_DURATION, "86400"));
parameters.add(createParameter(ParameterInputs.EXCLUSION_REGEXP, ""));
parameters.add(createParameter(ParameterInputs.DEPTH, "1"));
return parameters;
}
/**
* Scenario audit parameters definition with default values.
*
* @return set of parameters needed in scenario audit request.
*/
public static Set<Parameter> getDefaultParametersForScenario() {
return commonDefaultParameters();
}
public static void initializePAInputOptions(String level, String tblMarker, String prTblMarker, String dcrImgMarker, String infImgMarker, Set<Parameter> parameters) {
if (level != null && !level.isEmpty()) {
parameters.add(ParameterUtils.createParameter(ParameterInputs.LEVEL, level));
}
for (Parameter parameter : parameters) {
if (parameter != null && parameter.getParameterElement() != null && parameter.getParameterElement().getParameterElementCode() != null) {
if (tblMarker != null) {
if (ParameterInputs.DATA_TABLE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(tblMarker);
}
}
if (prTblMarker != null) {
if (ParameterInputs.PRESENTATION_TABLE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(prTblMarker);
}
}
if (dcrImgMarker != null) {
if (ParameterInputs.DECORATIVE_IMAGE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(dcrImgMarker);
}
}
if (infImgMarker != null) {
if (ParameterInputs.INFORMATIVE_IMAGE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(infImgMarker);
}
}
LOGGER.debug(parameter.getParameterElement().getShortLabel() + " = " + parameter.getValue());
}
}
}
public static void initializeInputOptions(CommonOrder commonOrder, Set<Parameter> parameters) {
if (commonOrder.getLevel() != null && !commonOrder.getLevel().isEmpty()) {
parameters.add(ParameterUtils.createParameter(ParameterInputs.LEVEL, commonOrder.getLevel()));
}
for (Parameter parameter : parameters) {
if (parameter != null && parameter.getParameterElement() != null && parameter.getParameterElement().getParameterElementCode() != null) {
if (StringUtils.isNotBlank(commonOrder.getTblMarker())) {
if (ParameterInputs.DATA_TABLE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getTblMarker());
}
}
if (StringUtils.isNotBlank(commonOrder.getPrTblMarker())) {
if (ParameterInputs.PRESENTATION_TABLE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getPrTblMarker());
}
}
if (StringUtils.isNotBlank(commonOrder.getDcrImgMarker())) {
if (ParameterInputs.DECORATIVE_IMAGE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getDcrImgMarker());
}
}
if (StringUtils.isNotBlank(commonOrder.getInfImgMarker())) {
if (ParameterInputs.INFORMATIVE_IMAGE_MARKER.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getInfImgMarker());
}
}
if (StringUtils.isNotBlank(commonOrder.getMaxDocuments())) {
if (ParameterInputs.MAX_DOCUMENTS.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getMaxDocuments());
}
}
if (StringUtils.isNotBlank(commonOrder.getMaxDuration())) {
if (ParameterInputs.MAX_DURATION.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getMaxDuration());
}
}
if (StringUtils.isNotBlank(commonOrder.getExclusionRegExp())) {
if (ParameterInputs.EXCLUSION_REGEXP.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getExclusionRegExp());
}
}
if (StringUtils.isNotBlank(commonOrder.getDepth())) {
if (ParameterInputs.DEPTH.equals(parameter.getParameterElement().getParameterElementCode())) {
parameter.setValue(commonOrder.getDepth());
}
}
LOGGER.debug(parameter.getParameterElement().getShortLabel() + " = " + parameter.getValue());
}
}
}
}