// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.data.validation.tests;
import static org.openstreetmap.josm.tools.I18n.marktr;
import static org.openstreetmap.josm.tools.I18n.tr;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.data.validation.Severity;
import org.openstreetmap.josm.data.validation.Test;
import org.openstreetmap.josm.data.validation.TestError;
import org.openstreetmap.josm.gui.progress.ProgressMonitor;
/**
* Checks for untagged ways
*
* @since 8320
*/
public class LongSegment extends Test {
/** Long segment error */
protected static final int LONG_SEGMENT = 3501;
/** Maximum segment length for this test */
protected int maxlength;
/**
* Constructor
*/
public LongSegment() {
super(tr("Long segments"),
tr("This tests for long way segments, which are usually errors."));
}
@Override
public void visit(Way w) {
if (w.hasTag("route", "ferry")) {
return;
}
Double length = w.getLongestSegmentLength();
if (length > maxlength) {
length /= 1000.0;
errors.add(TestError.builder(this, Severity.WARNING, LONG_SEGMENT)
.message(tr("Long segments"), marktr("Very long segment of {0} kilometers"), length.intValue())
.primitives(w)
.build());
}
}
@Override
public void startTest(ProgressMonitor monitor) {
super.startTest(monitor);
maxlength = Main.pref.getInteger("validator.maximum.segment.length", 15_000);
}
@Override
public boolean isPrimitiveUsable(OsmPrimitive p) {
return p.isUsable() && p instanceof Way && ((Way) p).getNodesCount() > 1; // test only Ways with at least 2 nodes
}
}