summaryrefslogtreecommitdiff
path: root/BKUApplet/src/main
diff options
context:
space:
mode:
authorwbauer <wbauer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>2008-10-10 12:35:07 +0000
committerwbauer <wbauer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>2008-10-10 12:35:07 +0000
commit8852be703a5cacaf271575ccee04bbe27612d16b (patch)
tree151e7edb9f6dba76b9df7f3c17ee09ee6ca9d2ea /BKUApplet/src/main
parentfa8a887f6a31d119661d57aca42a98139ec7a792 (diff)
downloadmocca-8852be703a5cacaf271575ccee04bbe27612d16b.tar.gz
mocca-8852be703a5cacaf271575ccee04bbe27612d16b.tar.bz2
mocca-8852be703a5cacaf271575ccee04bbe27612d16b.zip
Improved Quit Handling for multiple applet instances
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@101 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'BKUApplet/src/main')
-rw-r--r--BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java4
-rw-r--r--BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUWorker.java125
-rw-r--r--BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/MultiInstanceHandler.java49
-rw-r--r--BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/QuitHandler.java37
4 files changed, 160 insertions, 55 deletions
diff --git a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java
index 6a781729..ab38c163 100644
--- a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java
+++ b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java
@@ -30,6 +30,9 @@ import org.apache.commons.logging.LogFactory;
import at.gv.egiz.bku.gui.BKUGUIFacade;
import at.gv.egiz.bku.gui.BKUGUIFactory;
+import at.gv.egiz.bku.smccstal.AbstractSMCCSTAL;
+import at.gv.egiz.stal.QuitRequest;
+
import java.net.URL;
/**
@@ -56,6 +59,7 @@ public class BKUApplet extends JApplet {
public void init() {
log.info("Welcome to MOCCA\n");
log.debug("Called init()");
+ AbstractSMCCSTAL.addRequestHandler(QuitRequest.class, QuitHandler.getInstance());
HttpsURLConnection.setDefaultSSLSocketFactory(InternalSSLSocketFactory.getInstance());
String localeString = getMyAppletParameter(LOCALE_PARAM_KEY);
if (localeString != null) {
diff --git a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUWorker.java b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUWorker.java
index 12eb9d00..fbf74162 100644
--- a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUWorker.java
+++ b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUWorker.java
@@ -48,7 +48,7 @@ import at.gv.egiz.stal.service.types.ResponseType;
import at.gv.egiz.stal.util.STALTranslator;
public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
- ActionListener, SMCCSTALRequestHandler {
+ ActionListener, SMCCSTALRequestHandler {
private static Log log = LogFactory.getLog(BKUWorker.class);
protected BKUGUIFacade gui;
@@ -65,15 +65,15 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
* must not be null
*/
public BKUWorker(BKUGUIFacade gui, BKUApplet parent,
- ResourceBundle errorMessageBundle) {
+ ResourceBundle errorMessageBundle) {
if ((gui == null) || (parent == null) || (errorMessageBundle == null)) {
throw new NullPointerException("Parameter must not be set to null");
}
this.gui = gui;
this.parent = parent;
this.errorMessages = errorMessageBundle;
- addRequestHandler(QuitRequest.class, this);
- // register SignRequestHandler once we have a webservice port
+ QuitHandler.getInstance().registerHandlerInstance(this);
+ // register SignRequestHandler once we have a webservice port
}
/**
@@ -85,7 +85,7 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
protected BKUWorker(BKUGUIFacade gui, ResourceBundle errorMessageBundle) {
this.gui = gui;
this.errorMessages = errorMessageBundle;
- addRequestHandler(QuitRequest.class, this);
+ QuitHandler.getInstance().registerHandlerInstance(this);
}
private STALPortType getSTALPort() throws MalformedURLException {
@@ -111,7 +111,7 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
}
log.debug("Found WSDL url: " + wsdlURL);
QName endpointName = new QName("http://www.egiz.gv.at/wsdl/stal",
- "STALService");
+ "STALService");
STALService stal = new STALService(wsdlURL, endpointName);
return stal.getSTALPort();
}
@@ -126,7 +126,8 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
log.fatal("Failed to call STAL service.", e);
actionCommandList.clear();
actionCommandList.add("ok");
- gui.showErrorDialog(BKUGUIFacade.ERR_SERVICE_UNREACHABLE, new Object[] {e.getMessage()});
+ gui.showErrorDialog(BKUGUIFacade.ERR_SERVICE_UNREACHABLE,
+ new Object[] { e.getMessage() });
try {
waitForAction();
} catch (InterruptedException e1) {
@@ -140,13 +141,16 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
// use the testsession for testing
sessionId = "TestSession";
}
- addRequestHandler(at.gv.egiz.stal.SignRequest.class, new WSSignRequestHandler(sessionId, stalPort));
+ addRequestHandler(at.gv.egiz.stal.SignRequest.class,
+ new WSSignRequestHandler(sessionId, stalPort));
ObjectFactory of = new ObjectFactory();
GetNextRequestResponseType nextRequestResp = stalPort.connect(sessionId);
do {
- List<RequestType> requests = nextRequestResp.getInfoboxReadRequestOrSignRequestOrQuitRequest();
- List<STALRequest> stalRequests = STALTranslator.translateRequests(requests);
+ List<RequestType> requests = nextRequestResp
+ .getInfoboxReadRequestOrSignRequestOrQuitRequest();
+ List<STALRequest> stalRequests = STALTranslator
+ .translateRequests(requests);
if (log.isInfoEnabled()) {
StringBuilder sb = new StringBuilder("Received ");
@@ -190,27 +194,33 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
responses = new ArrayList<ResponseType>(1);
ErrorResponseType err = new ErrorResponseType();
err.setErrorCode(6002);
-// err.setErrorMessage();
+ // err.setErrorMessage();
responses.add(err);
}
if (!finished) {
+ log.info("Not finished yet (BKUWorker: " + this
+ + "), sending responses");
GetNextRequestType nextRequest = of.createGetNextRequestType();
nextRequest.setSessionId(sessionId);
- nextRequest.getInfoboxReadResponseOrSignResponseOrErrorResponse().addAll(responses);
+ nextRequest.getInfoboxReadResponseOrSignResponseOrErrorResponse()
+ .addAll(responses);
nextRequestResp = stalPort.getNextRequest(nextRequest);
}
} while (!finished);
log.info("Done " + Thread.currentThread().getName());
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
- gui.showErrorDialog(BKUGUIFacade.ERR_UNKNOWN, new Object[] {ex.getMessage()});
+ gui.showErrorDialog(BKUGUIFacade.ERR_UNKNOWN, new Object[] { ex
+ .getMessage() });
try {
waitForAction();
} catch (InterruptedException e) {
log.error(e);
}
}
+ signatureCard.disconnect(false);
+ QuitHandler.getInstance().unregisterHandlerInstance(this);
sendRedirect();
}
@@ -222,17 +232,20 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
URL url = null;
if (redirectURL != null) {
try {
- url = new URL(parent.getCodeBase(), redirectURL + ";jsessionid=" + parent.getMyAppletParameter(BKUApplet.SESSION_ID));
+ url = new URL(parent.getCodeBase(), redirectURL + ";jsessionid="
+ + parent.getMyAppletParameter(BKUApplet.SESSION_ID));
} catch (MalformedURLException ex) {
- log.warn("Parameter 'redirectURL': " + redirectURL + " not a valid URL.", ex);
- // gui.showErrorDialog(errorMsg, okListener, actionCommand)
+ log.warn("Parameter 'redirectURL': " + redirectURL
+ + " not a valid URL.", ex);
+ // gui.showErrorDialog(errorMsg, okListener, actionCommand)
}
if (url != null) {
if (redirectTarget == null) {
log.info("Done. Trying to redirect to " + url + " ...");
parent.getAppletContext().showDocument(url);
} else {
- log.info("Done. Trying to redirect to " + url + " (target=" + redirectTarget + ") ...");
+ log.info("Done. Trying to redirect to " + url + " (target="
+ + redirectTarget + ") ...");
parent.getAppletContext().showDocument(url, redirectTarget);
}
}
@@ -276,46 +289,46 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
int oldValue = SMCCHelper.PC_SC_NOT_SUPPORTED; // this is a save default
while ((signatureCard == null) && (!actionPerformed)) {
switch (smccHelper.getResultCode()) {
- case SMCCHelper.PC_SC_NOT_SUPPORTED:
+ case SMCCHelper.PC_SC_NOT_SUPPORTED:
+ actionCommandList.clear();
+ actionCommandList.add("ok");
+ gui.showErrorDialog(BKUGUIFacade.ERR_NO_PCSC, null, this, "ok");
+ try {
+ waitForAction();
+ } catch (InterruptedException e) {
+ log.error(e);
+ }
+ return true;
+ case SMCCHelper.TERMINAL_NOT_PRESENT:
+ actionCommandList.clear();
+ actionCommandList.add("ok");
+ gui.showErrorDialog(BKUGUIFacade.ERR_NO_CARDTERMINAL, null, this, "ok");
+ try {
+ waitForAction();
+ } catch (InterruptedException e) {
+ log.error(e);
+ }
+ return true;
+ case SMCCHelper.CARD_NOT_SUPPORTED:
+ if (oldValue != SMCCHelper.CARD_NOT_SUPPORTED) {
actionCommandList.clear();
- actionCommandList.add("ok");
- gui.showErrorDialog(BKUGUIFacade.ERR_NO_PCSC, null, this, "ok");
- try {
- waitForAction();
- } catch (InterruptedException e) {
- log.error(e);
- }
- return true;
- case SMCCHelper.TERMINAL_NOT_PRESENT:
+ actionCommandList.add("cancel");
+ gui.showCardNotSupportedDialog(this, "cancel");
+ oldValue = SMCCHelper.CARD_NOT_SUPPORTED;
+ }
+ break;
+ case SMCCHelper.NO_CARD:
+ if (oldValue != SMCCHelper.NO_CARD) {
actionCommandList.clear();
- actionCommandList.add("ok");
- gui.showErrorDialog(BKUGUIFacade.ERR_NO_CARDTERMINAL,null,this,"ok");
- try {
- waitForAction();
- } catch (InterruptedException e) {
- log.error(e);
- }
- return true;
- case SMCCHelper.CARD_NOT_SUPPORTED:
- if (oldValue != SMCCHelper.CARD_NOT_SUPPORTED) {
- actionCommandList.clear();
- actionCommandList.add("cancel");
- gui.showCardNotSupportedDialog(this, "cancel");
- oldValue = SMCCHelper.CARD_NOT_SUPPORTED;
- }
- break;
- case SMCCHelper.NO_CARD:
- if (oldValue != SMCCHelper.NO_CARD) {
- actionCommandList.clear();
- actionCommandList.add("cancel");
- gui.showInsertCardDialog(this, "cancel");
- oldValue = SMCCHelper.NO_CARD;
- }
- break;
- case SMCCHelper.CARD_FOUND:
- // gui.showWaitDialog(null);
- signatureCard = smccHelper.getSignatureCard(errorMessages.getLocale());
- return false;
+ actionCommandList.add("cancel");
+ gui.showInsertCardDialog(this, "cancel");
+ oldValue = SMCCHelper.NO_CARD;
+ }
+ break;
+ case SMCCHelper.CARD_FOUND:
+ // gui.showWaitDialog(null);
+ signatureCard = smccHelper.getSignatureCard(errorMessages.getLocale());
+ return false;
}
smccHelper.update(3000);
}
@@ -325,6 +338,7 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
@Override
public STALResponse handleRequest(STALRequest request) {
if (request instanceof QuitRequest) {
+ log.info("Setting state to: finished for BKUWorker " + this);
finished = true;
} else {
log.error("Unexpected request to handle: " + request);
@@ -350,4 +364,5 @@ public class BKUWorker extends AbstractSMCCSTAL implements Runnable,
protected BKUGUIFacade getGUI() {
return gui;
}
+
}
diff --git a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/MultiInstanceHandler.java b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/MultiInstanceHandler.java
new file mode 100644
index 00000000..a07df559
--- /dev/null
+++ b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/MultiInstanceHandler.java
@@ -0,0 +1,49 @@
+package at.gv.egiz.bku.online.applet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.gv.egiz.bku.gui.BKUGUIFacade;
+import at.gv.egiz.bku.smccstal.SMCCSTALRequestHandler;
+import at.gv.egiz.smcc.SignatureCard;
+import at.gv.egiz.stal.QuitRequest;
+import at.gv.egiz.stal.STALRequest;
+import at.gv.egiz.stal.STALResponse;
+
+public abstract class MultiInstanceHandler implements SMCCSTALRequestHandler {
+
+ private static Log log = LogFactory.getLog(MultiInstanceHandler.class);
+
+ protected List<SMCCSTALRequestHandler> handlerList = new ArrayList<SMCCSTALRequestHandler>();
+
+
+
+ protected MultiInstanceHandler() {
+ }
+
+ public void registerHandlerInstance(SMCCSTALRequestHandler handler) {
+ handlerList.add(handler);
+ }
+
+ public void unregisterHandlerInstance(SMCCSTALRequestHandler handler) {
+ handlerList.remove(handler);
+ }
+
+
+ @Override
+ public void init(SignatureCard sc, BKUGUIFacade gui) {
+ }
+
+ @Override
+ public SMCCSTALRequestHandler newInstance() {
+ return this;
+ }
+
+ @Override
+ public boolean requireCard() {
+ return false;
+ }
+}
diff --git a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/QuitHandler.java b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/QuitHandler.java
new file mode 100644
index 00000000..ab07e1a8
--- /dev/null
+++ b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/QuitHandler.java
@@ -0,0 +1,37 @@
+package at.gv.egiz.bku.online.applet;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.gv.egiz.bku.smccstal.SMCCSTALRequestHandler;
+import at.gv.egiz.stal.QuitRequest;
+import at.gv.egiz.stal.STALRequest;
+import at.gv.egiz.stal.STALResponse;
+
+public class QuitHandler extends MultiInstanceHandler {
+
+ private static Log log = LogFactory.getLog(QuitHandler.class);
+
+ private static QuitHandler instance = new QuitHandler();
+
+ private QuitHandler() {
+ }
+
+ public static QuitHandler getInstance() {
+ return instance;
+ }
+
+ @Override
+ public STALResponse handleRequest(STALRequest request) {
+ if (request instanceof QuitRequest) {
+ log.info("Received QuitCommand");
+ for (SMCCSTALRequestHandler handler : handlerList) {
+ handler.handleRequest(request);
+ }
+ } else {
+ log.error("Unexpected request to handle: " + request);
+ }
+ return null;
+ }
+
+}