X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FGigiApiException.java;h=0d600b973f3284fa17fe8861e51398148b9aa448;hb=8d81c554173aadd24901c3b430850f4da0bd0c9a;hp=56d7f9addbdcbee58520a7d5c3dea8e90338fd2a;hpb=5725fc461f2f5d3d767a9d2d445eff96857287a5;p=gigi.git diff --git a/src/org/cacert/gigi/GigiApiException.java b/src/org/cacert/gigi/GigiApiException.java index 56d7f9ad..0d600b97 100644 --- a/src/org/cacert/gigi/GigiApiException.java +++ b/src/org/cacert/gigi/GigiApiException.java @@ -1,32 +1,113 @@ package org.cacert.gigi; import java.io.PrintWriter; +import java.io.StringWriter; import java.sql.SQLException; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Locale; + +import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Outputable; +import org.cacert.gigi.output.template.TranslateCommand; public class GigiApiException extends Exception { - SQLException e; - String message; - - public GigiApiException(SQLException e) { - this.e = e; - } - - public GigiApiException(String message) { - this.message = message; - } - - public boolean isInternalError() { - return e != null; - } - - public void format(PrintWriter out, Language language) { - if (isInternalError()) { - e.printStackTrace(); - out.println(language.getTranslation("An internal error ouccured.")); - } else { - out.println(language.getTranslation(message)); - } - - } + + private static final Language PLAIN_LANGUAGE = Language.getInstance(Locale.ENGLISH); + + private static final long serialVersionUID = -164928670180852588L; + + private SQLException e; + + private LinkedList messages = new LinkedList<>(); + + public GigiApiException(SQLException e) { + super(e); + this.e = e; + } + + public GigiApiException(String message) { + super(message); + messages.add(new TranslateCommand(message)); + } + + public GigiApiException() { + + } + + public GigiApiException(Outputable out) { + messages.add(out); + } + + public void mergeInto(GigiApiException e2) { + messages.addAll(e2.messages); + if (e == null) { + e = e2.e; + } + } + + public boolean isInternalError() { + return e != null; + } + + public void format(PrintWriter out, Language language) { + out.println("
"); + if (isInternalError()) { + e.printStackTrace(); + out.print("
"); + out.println(language.getTranslation("An internal error occurred.")); + out.println("
"); + } + HashMap map = new HashMap<>(); + for (Outputable message : messages) { + map.clear(); + + out.print("
"); + message.output(out, language, map); + out.println("
"); + } + out.println("
"); + + } + + public void formatPlain(PrintWriter out) { + if (isInternalError()) { + out.println(PLAIN_LANGUAGE.getTranslation("An internal error occurred.")); + } + HashMap map = new HashMap<>(); + for (Outputable message : messages) { + if (message instanceof TranslateCommand) { + String m = ((TranslateCommand) message).getRaw(); + // Skip HTML Entities + out.println(PLAIN_LANGUAGE.getTranslation(m)); + } else { + map.clear(); + message.output(out, PLAIN_LANGUAGE, map); + out.println(); + } + } + } + + public boolean isEmpty() { + return e == null && messages.size() == 0; + } + + @Override + public String getMessage() { + if (messages.size() != 0) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + + HashMap map = new HashMap<>(); + for (Outputable message : messages) { + map.clear(); + message.output(pw, PLAIN_LANGUAGE, map); + } + pw.flush(); + + return sw.toString(); + } + return ""; + } }