/*- * Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart * * This file is part of CityDoctor2. * * CityDoctor2 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CityDoctor2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with CityDoctor2. If not, see . */ package de.hft.stuttgart.citydoctor2.check; import java.io.Serializable; import java.util.Objects; import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; /** * Abstract container class for all errors. If your check creates a new error, * implement a new class from this one. This class has entry points for * reporting, healing and general access, which will need to be implemented to * properly function. * * @author Matthias Betz * */ public abstract class CheckError implements Serializable { private static final long serialVersionUID = -4428235366383090704L; private ErrorType type; private ErrorId id; private GmlElement feature; /** * Necessary information for every error type needs to be provided in this * constructor. * * @param id the error id (not null) * @param type the error type (not null) * @param feature element in which the error occurred */ public CheckError(ErrorId id, ErrorType type, GmlElement feature) { Objects.requireNonNull(id, "id may not be null"); Objects.requireNonNull(type, "type may not be null"); this.type = type; this.id = id; this.feature = feature; } /** * Getter for the error type * * @return the error type */ public ErrorType getType() { return type; } /** * Getter for the error id * * @return the error id */ public ErrorId getErrorId() { return id; } /** * The gml feature in which the error occured * * @return the gml feature */ public GmlElement getFeature() { return feature; } /** * A general visitor will have a look at this error. Visitor pattern. * * @param errorVisitor the visitor, call {@link ErrorVisitor#visit(CheckError)}) * on this. */ public abstract void accept(ErrorVisitor errorVisitor); /** * Visitor pattern for the healing methods. Call * {@link HealingMethod#visit(CheckError, ModificationListener)} in the * implementation and return the boolean. * * @param method the healing method visitor * @param l a modification listener when a healing method changes something * @return true if the healing method changed something in the model */ public abstract boolean accept(HealingMethod method, ModificationListener l); /** * This method functions as interface to various reporting places. The * implementor of the error decides which information is written into the report * or shown on the GUI. * * @param report */ public abstract void report(ErrorReport report); }