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

es.gob.afirma.standalone.plugins.AfirmaPlugin Maven / Gradle / Ivy

The newest version!
package es.gob.afirma.standalone.plugins;

import java.lang.reflect.Constructor;
import java.security.cert.Certificate;
import java.util.Properties;

import es.gob.afirma.core.signers.AOSignConstants;

/**
 * Plugin que aporta información adicional a la aplicación.
 */
public abstract class AfirmaPlugin {

	private PluginInfo info = null;

	private SignDataProcessor inlineProcessor = null;

	private ClassLoader classLoader = null;

	/**
	 * Proporciona la información básica de la aplicación.
	 * @return Información del plugin.
	 */
	public final PluginInfo getInfo() {
		return this.info;
	}

	/**
	 * Establece la información básica de la aplicación.
	 * @param info Información del plugin.
	 */
	public final void setInfo(final PluginInfo info) {
		this.info = info;
	}

	/**
	 * Proporciona la información básica de la aplicación.
	 * @return Información del plugin.
	 */
	public final ClassLoader getClassLoader() {
		return this.classLoader;
	}

	/**
	 * Establece el ClassLoader con el que se cargarán las clases del plugin.
	 * @param classLoader ClassLoader con el que se cargarán las clases del plugin.
	 */
	public final void setClassLoader(final ClassLoader classLoader) {
		this.classLoader = classLoader;
	}

	/**
	 * Permite recuperar la configuración establecida en el plugin.
	 * @return Configuración del plugin.
	 */
	public final Properties getConfig() {
		return PluginPreferences.getInstance(this).recoverConfig();
	}

	/**
	 * Construye una instancia del panel de configuración.
	 * @return Panel de configuración construido.
	 * @throws ReflectiveOperationException Cuando ocurre un error al construir el panel.
	 */
	public final ConfigurationPanel buildConfigurationPanel() throws ReflectiveOperationException {

		final String configPanelClass = getInfo().getConfigPanel();
		if (configPanelClass == null) {
			return null;
		}

		ConfigurationPanel panel;
		try {
			final Class panelClass = Class.forName(
					configPanelClass, true, this.getClass().getClassLoader());
			panel = (ConfigurationPanel) panelClass.newInstance();
		} catch (final Exception e) {
			throw new ReflectiveOperationException("No se pudo crear el panel de configuracion", e); //$NON-NLS-1$
		}
		return panel;
	}

	/**
	 * Proceso ejecutado sobre los datos antes de firma.
	 * @param data Datos que se van a firmar.
	 * @param format Formato de firma que se aplicara sobre los datos. Los
	 * posibles formatos de firma se definen en {@link AOSignConstants}.
	 * @return Datos ya procesados que se van a firmar.
	 * @throws PluginControlledException Cuando se produce un error en el procesado
	 * de los datos.
	 */
	@SuppressWarnings("static-method")
	public byte[] preSignProcess(final byte[] data, final String format)
			throws PluginControlledException {
		return data;
	}

	/**
	 * Proceso ejecutado sobre las firmas generadas.
	 * @param signature Firma electrónica generada.
	 * @param format Formato de la firma. Los posibles formatos de firma se
	 * definen en {@link AOSignConstants}.
	 * @param certChain Cadena de certificación usada en al firma.
	 * @return Firma ya posprocesada.
	 * @throws PluginControlledException Cuando se produce un error en el procesado
	 * de la firma.
	 */
	@SuppressWarnings("static-method")
	public byte[] postSignProcess(final byte[] signature, final String format, final Certificate[] certChain)
			throws PluginControlledException {
		return signature;
	}

	/**
	 * Obtiene el procesador para peticiones en linea asociado al plugin.
	 * @param protocolVersion Versión del protocolo declarado por AutoFirma.
	 * @return Procesador de peticiones de firma en línea o {@code null} si el
	 * plugin no lo establece.
	 * @throws PluginControlledException Cuando se produce un error durante la carga del
	 * procesador.
	 */
	public final SignDataProcessor getInlineProcessor(final int protocolVersion) throws PluginControlledException {
		if (this.inlineProcessor == null) {
			final String processorClassName = this.info.getInlineProcessorClassname();
			if (processorClassName != null) {
				try {
					final Class processorClass =
							(Class) Class.forName(processorClassName, true, this.getClass().getClassLoader());

					final Constructor processorConstructor =
							processorClass.getConstructor(Integer.TYPE);

					this.inlineProcessor = processorConstructor.newInstance(protocolVersion);
				}
				catch (final Exception e) {
					throw new PluginControlledException("No se ha podido cargar la clase de procesado en linea", e); //$NON-NLS-1$
				}
			}
		}
		return this.inlineProcessor;
	}

	/**
	 * Proceso ejecutado al instalar el plugin en AutoFirma. Esto sólo se
	 * ejecutará una vez a lo largo de vida del plugin. Este proceso sólo
	 * tendrá permisos de administrador si el usuario ejecutó Autofirma
	 * con estos.
	 * @throws PluginControlledException Cuando ocurre un error durante el proceso.
	 */
	public void install() throws PluginControlledException {
		// Por defecto, no se hace nada
	}

	/**
	 * Proceso ejecutado al desinstalar el plugin de AutoFirma. Este proceso deberí
	 * eliminar cualquier resto o referencia que se haya dejado en el sistema como parte del
	 * proceso de instalación o de firma.
	 * @throws PluginControlledException Cuando ocurre un error durante el proceso.
	 */
	public void uninstall() throws PluginControlledException {
		// Por defecto, no se hace nada
	}

	/**
	 * Método ejecutado al finalizar un proceso de firma completo. En este
	 * proceso pueden, por ejemplo, haberse realizado múltiples firmas como
	 * parte de una operación de firma masiva.
	 * En este método se puede configurar lo necesario para restaurar el
	 * estado del plugin o liberar recursos antes de una nueva operación.
	 * @throws PluginControlledException Cuando falla el proceso de reinicio.
	 */
	public void reset() throws PluginControlledException {
		// No se hace nada
	}

	@Override
	public final boolean equals(final Object obj) {
		if (obj != null && obj instanceof AfirmaPlugin) {
			final PluginInfo myInfo = getInfo();
			final PluginInfo objInfo = ((AfirmaPlugin) obj).getInfo();
			return myInfo.getInternalName().equals(objInfo.getInternalName());
		}
		else if (obj != null && obj instanceof PluginInfo) {
			final PluginInfo myInfo = getInfo();
			final PluginInfo objInfo = (PluginInfo) obj;
			return myInfo.getInternalName().equals(objInfo.getInternalName());
		}
		return super.equals(obj);
	}

	@Override
	public final int hashCode() {
		return super.hashCode();
	}

	@Override
	public final String toString() {
		return this.info != null ? this.info.toString() : super.toString();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy