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}