// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.turnlanes.model; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; public final class Issue { public enum Severity { INFO, WARN, ERROR; } public abstract static class QuickFix { public static final QuickFix NONE = new QuickFix(tr("None")) { @Override public boolean perform() { throw new UnsupportedOperationException("Don't call perform on Issue.QuickFix.NONE."); } }; private final String description; public QuickFix(String description) { this.description = description; } public String getDescription() { return description; } public abstract boolean perform(); } private final Severity severity; private final Relation relation; private final List<OsmPrimitive> primitives; private final String description; private final QuickFix quickFix; private Issue(Severity severity, Relation relation, List<? extends OsmPrimitive> primitives, String description, QuickFix quickFix) { this.relation = relation; this.primitives = Collections.unmodifiableList(new ArrayList<>(primitives)); this.severity = severity; this.description = description; this.quickFix = quickFix; } public static Issue newError(Relation relation, List<? extends OsmPrimitive> primitives, String description, QuickFix quickFix) { return new Issue(Severity.ERROR, relation, primitives, description, quickFix); } public static Issue newError(Relation relation, List<? extends OsmPrimitive> primitives, String description) { return newError(relation, primitives, description, QuickFix.NONE); } public static Issue newError(Relation relation, OsmPrimitive primitive, String description) { return newError(relation, Arrays.asList(primitive), description, QuickFix.NONE); } public static Issue newError(Relation relation, String description) { return newError(relation, Collections.<OsmPrimitive>emptyList(), description, QuickFix.NONE); } public static Issue newWarning(List<OsmPrimitive> primitives, String description) { return new Issue(Severity.WARN, null, primitives, description, QuickFix.NONE); } public Severity getSeverity() { return severity; } public String getDescription() { return description; } public Relation getRelation() { return relation; } public List<OsmPrimitive> getPrimitives() { return primitives; } public QuickFix getQuickFix() { return quickFix; } }