X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FGigiApiException.java;h=7b3a990938ad0df650ec2b9c5079124f6d7286ee;hp=a79877396061d9134fdbc8e16eb0145a6c923a5b;hb=f0409c63fad3833d4a2d4d8c3fd60f0ab829b299;hpb=fb38a9c8b9d86289213a36bd3d2afddc58ec7d3f diff --git a/src/org/cacert/gigi/GigiApiException.java b/src/org/cacert/gigi/GigiApiException.java index a7987739..7b3a9909 100644 --- a/src/org/cacert/gigi/GigiApiException.java +++ b/src/org/cacert/gigi/GigiApiException.java @@ -1,16 +1,25 @@ 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 { + private static final Language PLAIN_LANGUAGE = Language.getInstance(Locale.ENGLISH); + + private static final long serialVersionUID = -164928670180852588L; + private SQLException e; - private LinkedList messages = new LinkedList<>(); + private LinkedList messages = new LinkedList<>(); public GigiApiException(SQLException e) { super(e); @@ -19,13 +28,17 @@ public class GigiApiException extends Exception { public GigiApiException(String message) { super(message); - messages.add(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) { @@ -38,24 +51,63 @@ public class GigiApiException extends Exception { } public void format(PrintWriter out, Language language) { - out.println("
"); + out.println("
"); if (isInternalError()) { e.printStackTrace(); - out.print("
"); - out.println(language.getTranslation("An internal error ouccured.")); - out.println("
"); + out.print("

"); + out.println(language.getTranslation("An internal error occurred.")); + out.println("

"); } - for (String message : messages) { - out.print("
"); - out.print(language.getTranslation(message)); - 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 ""; + } + }