===== Applet Source =====
==== 2. Running the Applet ====
After the preparaton steps explained in [[en:esya:applet:applet-kodlari:giris|Introduction]], "main.jsp" is opened. This page is the mainpage for the web interface and does not include any graphical component. This method is used in order to prevent the applet from getting affected by the page refreshes. Other pages are embedded in this page as ''iframe''.
After "main.jsp" is opened and the applet is loaded successfully, an HTML form appears. Applet opens sessions to the card readers and finds the certificates. Then it fills these certificates into the HTML form by using javascript..
Besides, a session variable to be signed at server is embedded into the HTML.
The code for reading the certificates from the cards and filling them into the HTML form is as follows:
scManager = SmartCardManager.getInstance();
scManager.listCertificatesOfTerminals();
loginFormCerts = loginFormCerts.concat("");
for(ECertificate cert : scManager.mSignatureCerts) {
String certName = cert.getSubject().getCommonNameAttribute();
String certSerialHex = cert.getSerialNumberHex();
loginFormCerts = loginFormCerts.concat("");
}
The certificates are read from the smartcard in the smartcard class.
cardIndex = -1;
int certNo = -1;
for (String terminal : mTerminals) {
cardIndex++;
try {
boolean APDUSupport;
try {
APDUSupport = APDUSmartCard.isSupported(terminal);
} catch (NoClassDefFoundError ex) {
logger.error("APDU smartcard cannot be created. Probably AkisCIF.jar is missing");
APDUSupport = false;
}
logger.debug("Smartcard index:" + cardIndex);
if (useAPDU == true && APDUSupport) {
logger.debug("APDU Smartcard will be created");
APDUSmartCard asc = new APDUSmartCard();
CardTerminal ct = TerminalFactory.getDefault().terminals().getTerminal(terminal);
asc.openSession(ct);
smartCards.add(asc);
} else {
logger.debug("PKCS11 Smartcard will be created");
Pair slotAndCardType = SmartOp.getSlotAndCardType(terminal);
P11SmartCard p11SmartCard = new P11SmartCard(slotAndCardType.getObject2());
smartCards.add(p11SmartCard);
smartCards.get(cardIndex).openSession(slotAndCardType.getObject1());
}
// take the certs of a terminal
List certsOfATerminal = getCertificates(cardIndex);
// for each cert, save to hashmap which cert belongs to which terminal
for (ECertificate certificate : certsOfATerminal) {
certNo++;
mSCManager.certTerminalMap.put(certNo, terminal);
}
mSignatureCerts.addAll(certsOfATerminal);
}
catch (Exception e) {
logger.error("Error in listing certificates of terminals", e);
}
}