ingo@686: package de.intevation.flys.artifacts.model;
ingo@686: 
ingo@686: import org.w3c.dom.Document;
ingo@686: import org.w3c.dom.Element;
ingo@686: 
ingo@686: import java.util.List;
ingo@686: import java.util.ArrayList;
ingo@686: 
ingo@686: import java.io.Serializable;
ingo@686: 
sascha@710: import de.intevation.artifacts.CallMeta;
sascha@710: 
ingo@686: public class Calculation
ingo@686: implements   Serializable
ingo@686: {
sascha@742:     public static class Problem
ingo@686:     implements          Serializable
ingo@686:     {
ingo@686:         protected Double km;
ingo@686:         protected String msg;
ingo@686: 
ingo@686:         public Problem() {
ingo@686:         }
ingo@686: 
ingo@686:         public Problem(String msg) {
ingo@686:             this.msg = msg;
ingo@686:         }
ingo@686: 
ingo@686:         public Problem(double km, String msg) {
ingo@686:             this.km  = km;
ingo@686:             this.msg = msg;
ingo@686:         }
ingo@686: 
sascha@710:         public Element toXML(Document document, CallMeta meta) {
sascha@710:             // TODO: i18n
ingo@686:             Element problem = document.createElement("problem");
ingo@686:             if (km != null) {
ingo@686:                 problem.setAttribute("km", String.valueOf(km));
ingo@686:             }
ingo@686:             problem.setTextContent(msg);
ingo@686:             return problem;
ingo@686:         }
ingo@686:     } // class Problem
ingo@686: 
ingo@686:     protected List<Problem> problems;
ingo@686: 
ingo@686:     public Calculation() {
ingo@686:     }
ingo@686: 
sascha@709:     public Calculation(String msg) {
sascha@709:         addProblem(msg);
sascha@709:     }
sascha@709: 
ingo@686:     protected List<Problem> checkProblems() {
ingo@686:         if (problems == null) {
ingo@686:             problems = new ArrayList<Problem>();
ingo@686:         }
ingo@686:         return problems;
ingo@686:     }
ingo@686: 
ingo@686:     public void addProblem(String msg) {
ingo@686:         checkProblems().add(new Problem(msg));
ingo@686:     }
ingo@686: 
ingo@686:     public void addProblem(double km, String msg) {
ingo@686:         checkProblems().add(new Problem(km, msg));
ingo@686:     }
ingo@686: 
ingo@686:     public boolean hasProblems() {
ingo@686:         return problems != null && !problems.isEmpty();
ingo@686:     }
ingo@686: 
ingo@686:     public int numProblems() {
ingo@686:         return problems != null ? problems.size() : 0;
ingo@686:     }
ingo@686: 
ingo@686:     public List<Problem> getProblems() {
ingo@686:         return problems;
ingo@686:     }
ingo@686: 
sascha@710:     public void toXML(Document document, CallMeta meta) {
ingo@686: 
ingo@686:         Element root = document.createElement("problems");
ingo@686: 
ingo@686:         if (hasProblems()) {
ingo@686:             for (Problem problem: problems) {
sascha@710:                 root.appendChild(problem.toXML(document, meta));
ingo@686:             }
ingo@686:         }
ingo@686: 
ingo@686:         document.appendChild(root);
ingo@686:     }
ingo@686: }
ingo@686: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :