X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Foutput%2Ftemplate%2FIfStatement.java;h=1b49f3b28f0ae1dad5dfe8526cbd5e347cd9b9e6;hb=3e6fc72fae3a11ad28b602f8ee6b02b91f15ed5e;hp=02687630b8ab84757944ddae45c1103927b92905;hpb=ffab4ac1fae1a58919c7dde59d90c75df096512c;p=gigi.git diff --git a/src/org/cacert/gigi/output/template/IfStatement.java b/src/org/cacert/gigi/output/template/IfStatement.java index 02687630..1b49f3b2 100644 --- a/src/org/cacert/gigi/output/template/IfStatement.java +++ b/src/org/cacert/gigi/output/template/IfStatement.java @@ -1,25 +1,70 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.Map; -import org.cacert.gigi.Language; -import org.cacert.gigi.output.Outputable; - -final class IfStatement implements Outputable { - private final String variable; - private final TemplateBlock body; - - IfStatement(String variable, TemplateBlock body) { - this.variable = variable; - this.body = body; - } - - @Override - public void output(PrintWriter out, Language l, Map vars) { - Object o = vars.get(variable); - if (o instanceof Boolean && o == Boolean.TRUE) { - body.output(out, l, vars); - } - } -} \ No newline at end of file +import org.cacert.gigi.localisation.Language; + +/** + * One ore two {@link Outputable}s that are emitted conditionally if a given + * variable is neither null nor {@link Boolean#FALSE}. + */ +public final class IfStatement implements Translatable { + + private final String variable; + + private final TemplateBlock iftrue; + + private final TemplateBlock iffalse; + + /** + * Creates a new {@link IfStatement} with an empty else-part. + * + * @param variable + * the variable to check. + * @param body + * the body to emit conditionally. + */ + public IfStatement(String variable, TemplateBlock body) { + this.variable = variable; + this.iftrue = body; + this.iffalse = null; + } + + /** + * Creates a new {@link IfStatement} with an else-block. + * + * @param variable + * the variable to check. + * @param iftrue + * the block to emit if the check succeeds. + * @param iffalse + * the block to emit if the check fails. + */ + public IfStatement(String variable, TemplateBlock iftrue, TemplateBlock iffalse) { + this.variable = variable; + this.iftrue = iftrue; + this.iffalse = iffalse; + } + + @Override + public void output(PrintWriter out, Language l, Map vars) { + Object o = vars.get(variable); + + if ( !(o == null || Boolean.FALSE.equals(o))) { + iftrue.output(out, l, vars); + } else if (iffalse != null) { + iffalse.output(out, l, vars); + } + } + + @Override + public void addTranslations(Collection s) { + iftrue.addTranslations(s); + if (iffalse != null) { + iffalse.addTranslations(s); + } + } + +}