diff options
| author | wbauer <wbauer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2008-11-03 11:11:30 +0000 | 
|---|---|---|
| committer | wbauer <wbauer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2008-11-03 11:11:30 +0000 | 
| commit | 16b188bae57cfc10c94a0e251a815ab35345e113 (patch) | |
| tree | c839c830a0152318117df5779365eb40bcca4a2a /smccSTAL/src/main | |
| parent | 9829de9c9b19dcca15676aaf9737195cc059a66c (diff) | |
| download | mocca-16b188bae57cfc10c94a0e251a815ab35345e113.tar.gz mocca-16b188bae57cfc10c94a0e251a815ab35345e113.tar.bz2 mocca-16b188bae57cfc10c94a0e251a815ab35345e113.zip | |
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@139 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'smccSTAL/src/main')
| -rw-r--r-- | smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/AbstractSMCCSTAL.java | 127 | 
1 files changed, 73 insertions, 54 deletions
| diff --git a/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/AbstractSMCCSTAL.java b/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/AbstractSMCCSTAL.java index cf524737..f310dd42 100644 --- a/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/AbstractSMCCSTAL.java +++ b/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/AbstractSMCCSTAL.java @@ -18,22 +18,22 @@ package at.gv.egiz.bku.smccstal;  import java.util.ArrayList;  import java.util.HashMap; +import java.util.HashSet;  import java.util.List;  import java.util.Locale;  import java.util.Map; +import java.util.Set;  import org.apache.commons.logging.Log;  import org.apache.commons.logging.LogFactory;  import at.gv.egiz.bku.gui.BKUGUIFacade;  import at.gv.egiz.smcc.SignatureCard; -import at.gv.egiz.smcc.util.SMCCHelper;  import at.gv.egiz.stal.ErrorResponse;  import at.gv.egiz.stal.InfoboxReadRequest;  import at.gv.egiz.stal.STAL;  import at.gv.egiz.stal.STALRequest;  import at.gv.egiz.stal.STALResponse; -import at.gv.egiz.stal.SignRequest;  public abstract class AbstractSMCCSTAL implements STAL {    private static Log log = LogFactory.getLog(AbstractSMCCSTAL.class); @@ -45,9 +45,11 @@ public abstract class AbstractSMCCSTAL implements STAL {    protected Map<String, SMCCSTALRequestHandler> handlerMap = new HashMap<String, SMCCSTALRequestHandler>();    protected int maxRetries = DEFAULT_MAX_RETRIES; +  protected Set<Integer> unrecoverableErrors = new HashSet<Integer>();    protected AbstractSMCCSTAL() {      addRequestHandler(InfoboxReadRequest.class, new InfoBoxReadRequestHandler()); +    unrecoverableErrors.add(6001);    }    /** @@ -59,66 +61,76 @@ public abstract class AbstractSMCCSTAL implements STAL {    protected abstract BKUGUIFacade getGUI(); +  private STALResponse getRespone(STALRequest request) { +    log.info("Processing: " + request.getClass()); +    int retryCounter = 0; +    while (retryCounter < maxRetries) { +      log.info("Retry #" + retryCounter + " of " + maxRetries); +      SMCCSTALRequestHandler handler = null; +      handler = handlerMap.get(request.getClass().getSimpleName()); +      if (handler != null) { +        if (handler.requireCard()) { +          if (waitForCard()) { +            return new ErrorResponse(6001); +          } +        } +        try { +          handler.init(signatureCard, getGUI()); +          STALResponse response = handler.handleRequest(request); +          if (response != null) { +            if (response instanceof ErrorResponse) { +              log.info("Got an error response"); +              ErrorResponse err = (ErrorResponse) response; +              if (unrecoverableErrors.contains(err.getErrorCode())) { +                return response; +              } +              if ((++retryCounter < maxRetries) && (handler.requireCard())) { +                signatureCard.disconnect(true); +                signatureCard = null; +              } else { +                log.info("Exceeded max retries, returning error " +                    + err.getErrorMessage()); +                return response; +              } +            } else { +              return response; +            } +          } else { +            log.info("Got null response from handler, assuming quit"); +            return null; +          } +        } catch (Exception e) { +          log.info("Error while handling STAL request:" + e); +          if (++retryCounter < maxRetries) { +            signatureCard.disconnect(true); +            signatureCard = null; +          } else { +            log.info("Exceeded max retries, returning error."); +            return new ErrorResponse(6000); +          } +        } +      } else { +        log.error("Cannot find a handler for STAL request: " + request); +        return new ErrorResponse(); +      } +    } +    return new ErrorResponse(6000); +  } +    @Override    public List<STALResponse> handleRequest(List<STALRequest> requestList) {      log.debug("Got request list containing " + requestList.size()          + " STAL requests");      List<STALResponse> responseList = new ArrayList<STALResponse>(requestList          .size()); -      for (STALRequest request : requestList) {        log.info("Processing: " + request.getClass()); -      int retryCounter = 0; -      while (retryCounter < maxRetries) { -        log.info("Number of retries: " + retryCounter); -        SMCCSTALRequestHandler handler = null; -        handler = handlerMap.get(request.getClass().getSimpleName()); -        if (handler != null) { -          if (handler.requireCard()) { -            if (waitForCard()) { -              responseList.add(new ErrorResponse(6001)); -              break; -            } -          } -          try { -            handler.init(signatureCard, getGUI()); -            STALResponse response = handler.handleRequest(request); -            if (response != null) { -              if (response instanceof ErrorResponse) { -                log.info("Got an error response"); -                ErrorResponse err = (ErrorResponse) response; -                if (err.getErrorCode() == 6001) { -                  retryCounter = Integer.MAX_VALUE - 1; -                } -                if (++retryCounter < maxRetries) { -                  log.info("Retrying"); -                  signatureCard.disconnect(true); -                  signatureCard = null; -                } else { -                  responseList.add(response); -                } -              } else { -                responseList.add(response); -                retryCounter = Integer.MAX_VALUE; -                break; -              } -            } else { -              log.info("Got null response from handler, assuming quit"); -              retryCounter = Integer.MAX_VALUE; -            } -          } catch (Exception e) { -            log.info("Error while handling STAL request:" + e); -            if (++retryCounter < maxRetries) { -              log.info("Retrying"); -              signatureCard.disconnect(true); -              signatureCard = null; -            } else { -              responseList.add(new ErrorResponse(6000)); -            } -          } -        } else { -          log.error("Cannot find a handler for STAL request: " + request); -          responseList.add(new ErrorResponse()); +      STALResponse response = getRespone(request); +      if (response != null) { +        responseList.add(response); +        if (response instanceof ErrorResponse) { +          log.info("Got an error response, don't process remaining requests"); +          break;          }        }      } @@ -148,4 +160,11 @@ public abstract class AbstractSMCCSTAL implements STAL {      this.maxRetries = maxRetries;    } +  public Set<Integer> getUnrecoverableErrors() { +    return unrecoverableErrors; +  } + +  public void setUnrecoverableErrors(Set<Integer> unrecoverableErrors) { +    this.unrecoverableErrors = unrecoverableErrors; +  }  } | 
