From: Felix Dörre Date: Thu, 10 Jul 2014 18:16:11 +0000 (+0200) Subject: Use an URL-constructor for templates X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=15284bd894484c5d692b3a84faefcf34bac89bde Use an URL-constructor for templates ... so re-parsing might be possible. --- diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index c49cdcbb..6d6ddb6e 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -1,7 +1,6 @@ package org.cacert.gigi; import java.io.IOException; -import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Calendar; import java.util.HashMap; @@ -61,7 +60,7 @@ public class Gigi extends HttpServlet { pages.put(RegisterPage.PATH, new RegisterPage()); pages.put(MailCertificateAdd.PATH, new MailCertificateAdd()); pages.put(MailOverview.DEFAULT_PATH, new MailOverview("My email addresses")); - baseTemplate = new Template(new InputStreamReader(Gigi.class.getResourceAsStream("Gigi.templ"))); + baseTemplate = new Template(Gigi.class.getResource("Gigi.templ")); m = new Menu("Certificates", "cert", new MenuItem(MailOverview.DEFAULT_PATH, "Emails"), new MenuItem("", "Client Certificates"), new MenuItem("", "Domains"), new MenuItem("", "Server Certificates")); super.init(); diff --git a/src/org/cacert/gigi/output/ClientCSRGenerate.java b/src/org/cacert/gigi/output/ClientCSRGenerate.java index 9398c220..23869f77 100644 --- a/src/org/cacert/gigi/output/ClientCSRGenerate.java +++ b/src/org/cacert/gigi/output/ClientCSRGenerate.java @@ -1,7 +1,6 @@ package org.cacert.gigi.output; import java.io.IOException; -import java.io.InputStreamReader; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; @@ -14,10 +13,8 @@ public class ClientCSRGenerate { static Template normal; static Template IE; static { - normal = new Template(new InputStreamReader( - ClientCSRGenerate.class.getResourceAsStream("ClientCSRGenerate.templ"))); - IE = new Template(new InputStreamReader( - ClientCSRGenerate.class.getResourceAsStream("ClientCSRGenerateIE.templ"))); + normal = new Template(ClientCSRGenerate.class.getResource("ClientCSRGenerate.templ")); + IE = new Template(ClientCSRGenerate.class.getResource("ClientCSRGenerateIE.templ")); } public static void output(HttpServletRequest req, HttpServletResponse resp) { diff --git a/src/org/cacert/gigi/output/Template.java b/src/org/cacert/gigi/output/Template.java index 33720034..c7e90674 100644 --- a/src/org/cacert/gigi/output/Template.java +++ b/src/org/cacert/gigi/output/Template.java @@ -2,8 +2,10 @@ package org.cacert.gigi.output; import java.io.EOFException; import java.io.IOException; +import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.Reader; +import java.net.URL; import java.util.LinkedList; import java.util.Map; @@ -13,41 +15,57 @@ public class Template implements Outputable { String[] contents; Outputable[] vars; + URL source; + + public Template(URL u) { + try { + source = u; + Reader r = new InputStreamReader(u.openStream(), "UTF-8"); + parse(r); + } catch (IOException e) { + throw new Error(e); + } + } + public Template(Reader r) { try { - LinkedList splitted = new LinkedList(); - LinkedList commands = new LinkedList(); - StringBuffer buf = new StringBuffer(); - int ch = r.read(); - outer: while (true) { - while (!endsWith(buf, "")) { - buf.append((char) ch); - ch = r.read(); - if (ch == -1) { - throw new EOFException(); - } + parse(r); + } catch (IOException e) { + throw new Error(e); + } + } + + private void parse(Reader r) throws IOException { + LinkedList splitted = new LinkedList(); + LinkedList commands = new LinkedList(); + StringBuffer buf = new StringBuffer(); + int ch = r.read(); + outer: while (true) { + while (!endsWith(buf, "")) { + buf.append((char) ch); + ch = r.read(); + if (ch == -1) { + throw new EOFException(); + } + } + buf.delete(buf.length() - 2, buf.length()); + commands.add(parseCommand(buf.toString())); + buf.delete(0, buf.length()); } + splitted.add(buf.toString()); + contents = splitted.toArray(new String[splitted.size()]); + vars = commands.toArray(new Outputable[commands.size()]); + r.close(); } private boolean endsWith(StringBuffer buf, String string) { diff --git a/src/org/cacert/gigi/pages/Page.java b/src/org/cacert/gigi/pages/Page.java index b6a30573..5e05fdcd 100644 --- a/src/org/cacert/gigi/pages/Page.java +++ b/src/org/cacert/gigi/pages/Page.java @@ -1,9 +1,7 @@ package org.cacert.gigi.pages; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; +import java.net.URL; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; @@ -22,13 +20,9 @@ public abstract class Page { public Page(String title) { this.title = title; - try { - InputStream resource = getClass().getResourceAsStream(getClass().getSimpleName() + ".templ"); - if (resource != null) { - defaultTemplate = new Template(new InputStreamReader(resource, "UTF-8")); - } - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + URL resource = getClass().getResource(getClass().getSimpleName() + ".templ"); + if (resource != null) { + defaultTemplate = new Template(resource); } } diff --git a/src/org/cacert/gigi/pages/account/ChangeForm.java b/src/org/cacert/gigi/pages/account/ChangeForm.java index f200c323..3d2d45db 100644 --- a/src/org/cacert/gigi/pages/account/ChangeForm.java +++ b/src/org/cacert/gigi/pages/account/ChangeForm.java @@ -1,6 +1,5 @@ package org.cacert.gigi.pages.account; -import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Map; @@ -17,8 +16,7 @@ public class ChangeForm extends Form { private static Template t; static { - t = new Template( - new InputStreamReader(ChangePasswordPage.class.getResourceAsStream("ChangePasswordForm.templ"))); + t = new Template(ChangePasswordPage.class.getResource("ChangePasswordForm.templ")); } @Override diff --git a/src/org/cacert/gigi/pages/main/Signup.java b/src/org/cacert/gigi/pages/main/Signup.java index 04f81149..f5025bf8 100644 --- a/src/org/cacert/gigi/pages/main/Signup.java +++ b/src/org/cacert/gigi/pages/main/Signup.java @@ -1,9 +1,7 @@ package org.cacert.gigi.pages.main; import java.io.IOException; -import java.io.InputStreamReader; import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -34,11 +32,7 @@ public class Signup extends Form { public Signup(HttpServletRequest hsr) { super(hsr); - try { - t = new Template(new InputStreamReader(Signup.class.getResourceAsStream("Signup.templ"), "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } + t = new Template(Signup.class.getResource("Signup.templ")); buildup.setFname(""); buildup.setMname(""); buildup.setLname(""); diff --git a/src/org/cacert/gigi/pages/wot/AssuranceForm.java b/src/org/cacert/gigi/pages/wot/AssuranceForm.java index 7a49ee1b..d1d51116 100644 --- a/src/org/cacert/gigi/pages/wot/AssuranceForm.java +++ b/src/org/cacert/gigi/pages/wot/AssuranceForm.java @@ -1,6 +1,5 @@ package org.cacert.gigi.pages.wot; -import java.io.InputStreamReader; import java.io.PrintWriter; import java.sql.SQLException; import java.text.ParseException; @@ -23,7 +22,7 @@ public class AssuranceForm extends Form { User assuree; static final Template templ; static { - templ = new Template(new InputStreamReader(AssuranceForm.class.getResourceAsStream("AssuranceForm.templ"))); + templ = new Template(AssuranceForm.class.getResource("AssuranceForm.templ")); } public AssuranceForm(HttpServletRequest hsr, int assuree) { diff --git a/src/org/cacert/gigi/pages/wot/AssurePage.java b/src/org/cacert/gigi/pages/wot/AssurePage.java index 9c29044b..f12dfa45 100644 --- a/src/org/cacert/gigi/pages/wot/AssurePage.java +++ b/src/org/cacert/gigi/pages/wot/AssurePage.java @@ -1,7 +1,6 @@ package org.cacert.gigi.pages.wot; import java.io.IOException; -import java.io.InputStreamReader; import java.io.PrintWriter; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -27,7 +26,7 @@ public class AssurePage extends Page { public AssurePage() { super("Assure someone"); - t = new Template(new InputStreamReader(AssuranceForm.class.getResourceAsStream("AssureeSearch.templ"))); + t = new Template(AssuranceForm.class.getResource("AssureeSearch.templ")); }