package net.conselldemallorca.helium.applet.signatura;
import java.applet.Applet;
import java.io.ByteArrayOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import es.caib.signatura.api.Signer;
import es.caib.signatura.api.SignerFactory;
public class SignaturaCaibApplet extends Applet {
private Signer signer;
private final int MAX_SIZE_STRING = 500000;
/**
* Consulta dels certificats disponibles per a la signatura
*
* @param contentType
* @return
*/
public String[] findCertificats(
String contentType) {
try {
return getSigner().getCertList(contentType);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* Signatura en format PDF s'un document especificat en una url
*
* @param url
* @param certName
* @param password
* @param contentType
* @return
* @throws SignaturaException
*/
public String[] signaturaPdf(
String url,
String certName,
String password,
String contentType) throws SignaturaException {
HttpURLConnection conn;
try {
System.out.println("Recuperar documento: " + url);
conn = (HttpURLConnection)new URL(url).openConnection();
conn.connect();
System.out.println("Recuperar documento: OK");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
getSigner().signPDF(
conn.getInputStream(),
baos,
certName,
password,
contentType,
null,
Signer.PDF_SIGN_POSITION_NONE,
true);
String file = new String(Base64Coder.encode(baos.toByteArray()));
System.out.println("Size baos: " + baos.toByteArray().length);
return split(file, MAX_SIZE_STRING);
} catch (Exception ex) {
ex.printStackTrace();
throw new SignaturaException("No s'ha pogut signar el document", ex);
}
}
private String[] split(String src, int len) {
String[] result = new String[(int)Math.ceil((double)src.length()/(double)len)];
for (int i=0; i<result.length; i++)
result[i] = src.substring(i*len, Math.min(src.length(), (i+1)*len));
System.out.println("Partes del documento: " + result.length);
return result;
}
private Signer getSigner() throws Exception {
if (signer == null) {
SignerFactory sf = new SignerFactory();
return sf.getSigner();
}
return signer;
}
private static final long serialVersionUID = 4044611393629576909L;
}