Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation.java @ 3318:dbe2f85bf160
merged flys-artifacts/2.8
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:35 +0200 |
parents | 3f24865082da |
children | f46caf95ab7f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation.java Fri Sep 28 12:14:35 2012 +0200 @@ -0,0 +1,155 @@ +package de.intevation.flys.artifacts.model; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; + +import java.io.Serializable; + +import de.intevation.artifacts.CallMeta; + +import de.intevation.flys.artifacts.resources.Resources; + +import de.intevation.flys.utils.Formatter; + +public class Calculation +implements Serializable +{ + public static class Problem + implements Serializable + { + protected Double km; + protected String msg; + protected Object [] args; + + public Problem() { + } + + public Problem(String msg) { + this.msg = msg; + } + + public Problem(String msg, Object [] args) { + this.msg = msg; + this.args = args; + } + + public Problem(double km, String msg) { + this.km = km; + this.msg = msg; + } + + public Problem(double km, String msg, Object [] args) { + this.km = km; + this.msg = msg; + this.args = args; + } + + public Element toXML(Document document, CallMeta meta) { + Element problem = document.createElement("problem"); + if (km != null) { + problem.setAttribute( + "km", + Formatter.getCalculationKm(meta).format(km)); + } + String text = args != null + ? Resources.getMsg(meta, msg, msg, args) + : Resources.getMsg(meta, msg, msg); + problem.setTextContent(text); + return problem; + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof Problem)) { + return false; + } + Problem o = (Problem)other; + return !(!msg.equals(o.msg) + || (km == null && o.km != null) + || (km != null && o.km == null) + || (km != null && !km.equals(o.km)) + || !Arrays.equals(args, o.args)); + } + } // class Problem + + protected List<Problem> problems; + + public Calculation() { + } + + public Calculation(String msg) { + addProblem(msg); + } + + protected List<Problem> checkProblems() { + if (problems == null) { + problems = new ArrayList<Problem>(); + } + return problems; + } + + public void addProblems(Calculation other) { + List<Problem> otherProblems = other.problems; + if (otherProblems != null) { + List<Problem> problems = checkProblems(); + for (Problem problem: otherProblems) { + if (!problems.contains(problem)) { + problems.add(problem); + } + } + } + } + + public void addProblem(Problem problem) { + List<Problem> problems = checkProblems(); + if (!problems.contains(problem)) { + problems.add(problem); + } + } + + public void addProblem(String msg) { + addProblem(new Problem(msg)); + } + + public void addProblem(String msg, Object ... args) { + addProblem(new Problem(msg, args)); + } + + public void addProblem(double km, String msg) { + addProblem(new Problem(km, msg)); + } + + public void addProblem(double km, String msg, Object ... args) { + addProblem(new Problem(km, msg, args)); + } + + public boolean hasProblems() { + return problems != null && !problems.isEmpty(); + } + + public int numProblems() { + return problems != null ? problems.size() : 0; + } + + public List<Problem> getProblems() { + return problems; + } + + public void toXML(Document document, CallMeta meta) { + + Element root = document.createElement("problems"); + + if (hasProblems()) { + for (Problem problem: problems) { + root.appendChild(problem.toXML(document, meta)); + } + } + + document.appendChild(root); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :