package com.ejie.ab61.comun.utilidades.toolkit;

import java.util.List;

import com.ejie.ab61.model.toolkit.Parameter;
import com.ejie.ab61.model.toolkit.Parameters;
import com.ejie.ab61.model.toolkit.MessageUnparser;
import com.ejie.ab61.model.toolkit.ValorComboToolkit;

/**
 *  
 * 
 */
public class ToolkitParameterUtils {

	private static ToolkitParameterUtils instance;

	private static String PARAMETERS_TAB_BEGIN = "<parameters>";
	private static String PARAMETERS_TAB_END = "</parameters>";
	private static String PARAMETERS_XML_DEFINITION = "<\\?xml version=\"1.0\" encoding=\"ISO\\-8859-1\" standalone=\"yes\"\\?>\n";
	private static String PARAMETERS_XML_NAMESPACE = " xmlns=\"com/ejie/r02s/xml\"";

	/**
	 * Constructor privado
	 */
	private ToolkitParameterUtils() {

	};

	/**
	 * @return ToolkitParameterUtils
	 */
	public static ToolkitParameterUtils getInstance() {
		if (ToolkitParameterUtils.instance == null) {
			ToolkitParameterUtils.instance = new ToolkitParameterUtils();
		}
		return ToolkitParameterUtils.instance;
	}

	/**
	 * Construye un objeto de tipo Parameter
	 * 
	 * @param value
	 *            String
	 * @param descEs
	 *            String
	 * @param descEu
	 *            String
	 * @return Parameter
	 */
	public Parameter construirParameter(String value, String descEs, String descEu) {
		Parameter parameter = new Parameter();
		parameter.getValue().add(value);
		parameter.getValue().add(descEs);
		parameter.getValue().add(descEu);
		return parameter;
	}

	/**
	 * Construye un objeto de tipo Parameters a partir de una lista de
	 * ValorComboToolkit
	 * 
	 * @param listaValorComboToolkit
	 *            List<ValorComboToolkit>
	 * @return Parameters
	 */
	public Parameters construirParametersListaValorComboToolkit(List<ValorComboToolkit> listaValorComboToolkit) {

		Parameters parameters = new Parameters();
		for (ValorComboToolkit valorComboToolkitAux : listaValorComboToolkit) {
			Parameter parameter = this.construirParameter(valorComboToolkitAux.getCodigo(),
					valorComboToolkitAux.getDescripcionCas(), valorComboToolkitAux.getDescripcionEus());
			parameters.getParameter().add(parameter);
		}
		return parameters;
	}

	/**
	 * Devuelve un XML con un objeto Parameters vacío
	 * 
	 * @return String
	 */
	public String construirParametersListaVacia() {
		StringBuilder sb = new StringBuilder();
		sb.append(ToolkitParameterUtils.PARAMETERS_TAB_BEGIN);
		sb.append(ToolkitParameterUtils.PARAMETERS_TAB_END);
		return sb.toString();
	}

	/**
	 * Convierte un objeto Parameters a String
	 * 
	 * @param parameters
	 *            Parameters
	 * @return String
	 */
	public String unparseParametersToString(Parameters parameters) {
		String sparameters = "";
		try {
			MessageUnparser<Parameters> unparser = new MessageUnparser<Parameters>();
			sparameters = unparser.parse(parameters);
			sparameters = sparameters.replaceAll(ToolkitParameterUtils.PARAMETERS_XML_DEFINITION, "");
			sparameters = sparameters.replaceAll(ToolkitParameterUtils.PARAMETERS_XML_NAMESPACE, "");
		} catch (Exception ioe) {
			sparameters = ToolkitParameterUtils.getInstance().construirParametersListaVacia();
		}
		return sparameters;
	}
}
