001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.io.importexport;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.io.File;
007import java.io.IOException;
008import java.io.OutputStream;
009import java.nio.file.Files;
010
011import org.openstreetmap.josm.actions.ExtensionFileFilter;
012import org.openstreetmap.josm.gui.MainApplication;
013import org.openstreetmap.josm.gui.layer.Layer;
014import org.openstreetmap.josm.gui.layer.OsmDataLayer;
015import org.openstreetmap.josm.gui.layer.ValidatorLayer;
016import org.openstreetmap.josm.io.ValidatorErrorWriter;
017import org.openstreetmap.josm.tools.Logging;
018
019/**
020 * Exporter to write validator errors to an XML file.
021 * @since 12667
022 */
023public class ValidatorErrorExporter extends FileExporter {
024
025    /** File extension filter for .xml files */
026    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
027            "xml", "xml", tr("Validation Error Files") + " (*.xml)");
028
029    /** Create a new validator error exporter with the default .xml file filter */
030    public ValidatorErrorExporter() {
031        super(FILE_FILTER);
032    }
033
034    @Override
035    public boolean acceptFile(File pathname, Layer layer) {
036        if (!(layer instanceof ValidatorLayer))
037            return false;
038        return super.acceptFile(pathname, layer);
039    }
040
041    @Override
042    public void exportData(File file, Layer layer) throws IOException {
043        OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
044        if (layer instanceof ValidatorLayer && editLayer != null) {
045            Logging.info("exporting validation errors to file: " + file);
046            try (OutputStream os = Files.newOutputStream(file.toPath());
047                 ValidatorErrorWriter writer = new ValidatorErrorWriter(os)) {
048                writer.write(editLayer.validationErrors);
049            }
050        }
051    }
052}