View Javadoc

1   package es.caib.signatura.impl;
2   
3   import java.io.IOException;
4   import java.io.InputStream;
5   import java.security.InvalidAlgorithmParameterException;
6   import java.security.NoSuchAlgorithmException;
7   import java.security.NoSuchProviderException;
8   import java.security.cert.CertStoreException;
9   
10  import es.caib.signatura.api.SMIMEParser;
11  import es.caib.signatura.api.Signature;
12  import es.caib.signatura.api.SignatureDataException;
13  import es.caib.signatura.api.SignatureException;
14  
15  /**
16   * Proxy que da acceso a la implementación del intérprete de smimes.
17   * Guarda internamente una referencia a la implementación del parser de smime en concreto.
18   * Cada vez que se parsea un documento se obtiene una referencia a una nueva implementación del intérprete en concreto para ese documento.
19   * 
20   * @author u91940
21   *
22   */
23  
24  public class SMIMEParserProxy implements SMIMEParser{
25  	/**
26  	 * Referencia a la implementación del intérprete del documento
27  	 */
28  	SMIMEParser impl=null;
29  	
30  	/**
31  	 * Factoria de intérpretes
32  	 */
33  	SMIMEParser smimeFactory=null;
34  	
35  	/**
36  	 * @param smime
37  	 * @throws InstantiationException
38  	 * @throws IllegalAccessException
39  	 * @throws IOException
40  	 * @throws SignatureException
41  	 */
42  	public SMIMEParserProxy(InputStream smime) throws InstantiationException, IllegalAccessException, IOException,SignatureException{		
43  		ClassLoaderFactory loaderFactory=ClassLoaderFactory.getFactory();
44  
45  		try {
46  			smimeFactory=(SMIMEParser)loaderFactory.getMasterClassLoader().loadClass("es.caib.signatura.provider.impl.common.SMIMEImpl").newInstance();
47  			impl=smimeFactory.getInstance(smime);
48  		} catch (SignatureDataException e) {
49  			throw new SignatureException(e.getMessage(),e);
50  		} catch (ClassNotFoundException e) {
51  			throw new SignatureException(e.getMessage(),e);
52  		} 
53  	}
54  
55  
56  	public SMIMEParser getInstance(InputStream smime) throws InstantiationException, IllegalAccessException, IOException, SignatureException{
57  		return new SMIMEParserProxy(smime);
58  	}
59  
60  
61  	public Signature [] getSignatures() {
62  		if(impl!=null)
63  			return impl.getSignatures();
64  		else
65  			return null;
66  	}
67  
68  
69  	public void parse(InputStream mimeIS) throws IOException, InstantiationException, IllegalAccessException, SignatureException {
70  		impl=smimeFactory.getInstance(mimeIS); 	
71  	}
72  
73  	public Object getSignedObject() {
74  		if(impl!=null)
75  			return impl.getSignedObject();
76  		else 
77  			return null;
78  	}
79  	
80  }