// License: GPL. For details, see LICENSE file. package at.dallermassl.josm.plugin.surveyor; import static org.openstreetmap.josm.tools.I18n.tr; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.TimerTask; import javax.swing.JOptionPane; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.io.OsmWriter; import org.openstreetmap.josm.io.OsmWriterFactory; /** * @author cdaller * */ public class AutoSaveEditLayerTimerTask extends TimerTask { private File file; public AutoSaveEditLayerTimerTask(String filename) { file = new File(filename); } @Override public void run() { OsmDataLayer layer = Main.getLayerManager().getEditLayer(); if (layer == null) { return; } try { DataSet dataset = layer.data; // write to temporary file, on success, rename tmp file to target file: File tmpFile = new File(file.getAbsoluteFile()+".tmp"); System.out.println("AutoSaving osm data to file " + file.getAbsolutePath()); synchronized (SurveyorLock.class) { OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(new FileOutputStream(tmpFile)), false, dataset.getVersion()); w.header(); w.writeDataSources(dataset); w.writeContent(dataset); w.footer(); } tmpFile.renameTo(file); System.out.println("AutoSaving finished"); } catch (IOException x) { x.printStackTrace(); JOptionPane.showMessageDialog(Main.parent, tr("Error while exporting {0}: {1}", file.getAbsoluteFile(), x.getMessage()), tr("Error"), JOptionPane.ERROR_MESSAGE); } } }