package com.ejie.ab61.adaptadores.transformer;

import java.io.IOException;

import com.ejie.t65.jaxb.beans.fsd.DocumentDocument;
import com.ejie.t65.jaxb.beans.fsd.T65DocumentType;

import weblogic.utils.encoders.BASE64Decoder;

/**
 * <p>
 * Titulo: Y41bDokusiTransformer
 * </p>
 * <p>
 * Descripcion: Contiene metodos para devolver el resultado en las llamadas a
 * los WebServices de Dokusi
 * </p>
 * <p>
 * Copyright: Copyright (c) 2013
 * </p>
 * <p>
 * Empresa: Bilbomatica
 * </p>
 * 
 *  
 * @version 1.0
 */
public final class T65BDokusiTransformer {

	/**
	 * Constructor
	 */
	private T65BDokusiTransformer() {
		super();
	}

	/**
	 * Transforma un xml resultado de la llamada al metodo de descargar
	 * documento de dokusi en un objeto Documento de nuestro modelo de negocio.
	 * 
	 * @param xml
	 *            ListaIdsDocumentosDocumentum
	 * 
	 * @return String
	 * 
	 * @throws Exception
	 *             Exception
	 */
	public static String transformDescargarDocumentoDokusi(String xml) throws Exception {

		DocumentDocument documentDocument = DocumentDocument.Factory.parse(xml);
		T65DocumentType t65BDocumentType = documentDocument.getDocument();

		return T65BDokusiTransformer.decodeToString(new String(t65BDocumentType.getContent().getContent()));

	}

	/**
	 * Transforma un xml resultado de la llamada al metodo de descargar
	 * documento de dokusi en un objeto Documento de nuestro modelo de negocio.
	 * 
	 * @param xml
	 *            ListaIdsDocumentosDocumentum
	 * 
	 * @return Documento documento
	 * 
	 * @throws Exception
	 *             Exception
	 */
	/*
	 * public static List<String> transformDocumentoDokusiPifID(String xml)
	 * throws Exception { List<String> documentoDokusi = new
	 * ArrayList<String>();
	 * 
	 * Document documentDocument = DocumentFormatsDocument.Factory.parse(xml);
	 * T65DocumentType t65BDocumentType = documentDocument.ggetDocument();
	 * String pifID = t65BDocumentType.getContent().getPifId();
	 * documentoDokusi.add(pifID); String extension =
	 * t65BDocumentType.getContent().getFormat().getExtension();
	 * documentoDokusi.add(extension);
	 * 
	 * return documentoDokusi;
	 * 
	 * }
	 */

	/**
	 * 
	 * @param encData
	 *            String
	 * 
	 * @return String
	 * 
	 * @throws Exception
	 *             Exception
	 */
	public static String decodeToString(String encData) throws Exception {
		String decoded = null;
		try {
			decoded = new String(T65BDokusiTransformer.decode(encData));
		} catch (Exception e) {

			throw new Exception("Y27bUtilsWS.decodeToString", e);
		}
		return decoded;
	}

	/**
	 * Decodifica una cadena de caracteres que se encuentra codificada en
	 * formato Base64
	 * 
	 * @param encData
	 *            Datos a decodificar
	 * 
	 * @return byte[] Bytes con los datos decodificados
	 * 
	 * @throws Exception
	 *             Exception
	 */
	public static byte[] decode(String encData) throws Exception {
		byte[] decData = null;
		BASE64Decoder decoder;
		decoder = new BASE64Decoder();
		try {
			decData = decoder.decodeBuffer(encData);
		} catch (IOException e) {

			throw e;
		}
		return decData;
	}

}
