All Downloads are FREE. Search and download functionalities are using the official Maven repository.

es.gob.afirma.cert.signvalidation.SignValiderFactory Maven / Gradle / Ivy

/* Copyright (C) 2011 [Gobierno de Espana]
 * This file is part of "Cliente @Firma".
 * "Cliente @Firma" is free software; you can redistribute it and/or modify it under the terms of:
 *   - the GNU General Public License as published by the Free Software Foundation;
 *     either version 2 of the License, or (at your option) any later version.
 *   - or The European Software License; either version 1.1 or (at your option) any later version.
 * You may contact the copyright holder at: [email protected]
 */

package es.gob.afirma.cert.signvalidation;

import java.util.logging.Logger;

/** Factoría para la creación de los validadores de firma.
 * @author Sergio Martínez Rico. */
public final class SignValiderFactory {

	/* Listado de los validadores de firma soportados y los identificadores de formato de firma asociados. */
	private static final String SIGNER_VLIDER_CLASS_BINARY 	= "es.gob.afirma.cert.signvalidation.ValidateBinarySignature"; //$NON-NLS-1$
	private static final String SIGNER_VALIDER_CLASS_PDF   	= "es.gob.afirma.cert.signvalidation.ValidatePdfSignature"; //$NON-NLS-1$
	private static final String SIGNER_VALIDER_CLASS_XML	= "es.gob.afirma.cert.signvalidation.ValidateXMLSignature"; //$NON-NLS-1$

	private SignValiderFactory() {
		// No permitimos la instanciacion externa
	}

	/** Obtiene un validador de firmas para el tipo de dato proporcionado.
	 * @param data Firma a validar.
	 * @return Validador adecuado o null si no hay ninguno para ese tipo de dato.
	 * @throws IllegalArgumentException Si la firma proporcionada es nula o vacía. */
	public static SignValider getSignValider(final byte[] data) throws IllegalArgumentException {
		if (data == null || data.length < 1) {
			throw new IllegalArgumentException("No se han indicado datos de firma"); //$NON-NLS-1$
		}
		final String validerClassName;
		if (DataAnalizerUtil.isPDF(data)) {
			validerClassName = SIGNER_VALIDER_CLASS_PDF;
        }
        else if (DataAnalizerUtil.isFacturae(data)) { // Factura electronica
        	validerClassName = SIGNER_VALIDER_CLASS_XML;
        }
        else if (DataAnalizerUtil.isXML(data)) {
        	validerClassName = SIGNER_VALIDER_CLASS_XML;
        }
        else if(DataAnalizerUtil.isOOXML(data)) {
        	Logger.getLogger("es.gob.afirma").warning( //$NON-NLS-1$
    			"No hay un validador para OOXML" //$NON-NLS-1$
			);
        	return null;
        }
        else if(DataAnalizerUtil.isODF(data)) {
        	Logger.getLogger("es.gob.afirma").warning( //$NON-NLS-1$
    			"No hay un validador para ODF" //$NON-NLS-1$
			);
        	return null;
        }
        else  {
        	validerClassName = SIGNER_VLIDER_CLASS_BINARY;
        }
		try {
        	return (SignValider) Class.forName(validerClassName).getDeclaredConstructor().newInstance();
		}
		catch (final Exception e) {
			Logger.getLogger("es.gob.afirma").severe( //$NON-NLS-1$
				"No se ha podido instanciar el validador '" + validerClassName + "': " + e //$NON-NLS-1$ //$NON-NLS-2$
			);
			return null;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy