// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.fixAddresses; import java.util.ArrayList; import java.util.List; import org.openstreetmap.josm.tools.CheckParameterUtil; public class AddressProblem implements IProblem { private List<ISolution> solutions = null; private String description; private ProblemType type; private IOSMEntity source; /** * Instantiates a new problem. * * @param source the source * @param description The problem description. * @param solutions This list of solutions. * @param type the type */ public AddressProblem(IOSMEntity source, String description, List<ISolution> solutions, ProblemType type) { super(); this.source = source; this.description = description; this.solutions = solutions; this.type = type; } /** * Instantiates a new problem with type 'warning'. * * @param source the source * @param description The problem description. * @param solutions This list of solutions. */ public AddressProblem(IOSMEntity source, String description, List<ISolution> solutions) { this(source, description, solutions, ProblemType.Warning); } /** * Instantiates a new problem with type 'warning' and without solutions. * * @param source the source * @param description The problem description. */ public AddressProblem(IOSMEntity source, String description) { this(source, description, null, ProblemType.Warning); } /** * Creates the solution list, if necessary. */ private void lazyCreateSolutions() { if (solutions == null) { solutions = new ArrayList<>(); } } @Override public void addSolution(ISolution solution) { CheckParameterUtil.ensureParameterNotNull(solution, "solution"); lazyCreateSolutions(); solutions.add(solution); } @Override public void applySolution(ISolution solution) { CheckParameterUtil.ensureParameterNotNull(solution, "solution"); solution.solve(); } @Override public void clearSolutions() { if (solutions == null) return; solutions.clear(); } @Override public String getDescription() { return description; } @Override public List<ISolution> getSolutions() { return solutions; } @Override public ProblemType getType() { return type; } @Override public void removeSolution(ISolution solution) { if (solutions == null) throw new RuntimeException("Solution list is null"); if (solutions.size() == 0) throw new RuntimeException("Solution list is empty"); CheckParameterUtil.ensureParameterNotNull(solution, "solution"); solutions.remove(solution); } @Override public IOSMEntity getSource() { return source; } }