// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.piclayer.actions; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.JosmAction; import org.openstreetmap.josm.plugins.piclayer.layer.PicLayerAbstract; public class SavePictureCalibrationToWorldAction extends JosmAction { // Owner layer of the action PicLayerAbstract m_owner = null; public SavePictureCalibrationToWorldAction(PicLayerAbstract owner) { super(tr("Export World file Calibration..."), null, tr("Saves calibration data to a world file"), null, false); // Remember the owner... m_owner = owner; } @Override public void actionPerformed(ActionEvent arg0) { double[] values = new double[6]; m_owner.saveWorldFile(values); String picFilename = m_owner.getPicLayerName(); String picFilenameNoext = picFilename; String ext = null; int dotPos = picFilename.lastIndexOf("."); if (dotPos > 0) { ext = picFilename.substring(dotPos+1); picFilenameNoext = picFilename.substring(0, dotPos); } String wext; if (ext == null) { wext = picFilenameNoext + ".wld"; } else { switch (ext) { case "jpg": wext = "jgw"; break; case "jpeg": wext = "jpgw"; break; case "png": wext = "pgw"; break; case "bmp": wext = "bpw"; break; case "tif": wext = "tfw"; break; case "tiff": wext = "tifw"; break; default: wext = "wld"; } } // Save dialog final JFileChooser fc = new JFileChooser(); fc.setAcceptAllFileFilterUsed(true); fc.setSelectedFile(new File(picFilenameNoext + "." + wext)); int result = fc.showSaveDialog(Main.parent); if (result == JFileChooser.APPROVE_OPTION) { // Check file extension and force it to be valid File file = fc.getSelectedFile(); String path = file.getAbsolutePath(); if (!path.contains(".")) { // no extension given, add a reasonable one file = new File(path + "." + wext); } try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { for (int i = 0; i < 6; i++) { bw.write(Double.toString(values[i])); if (i<5) { bw.newLine(); } } } catch (IOException e) { // Error e.printStackTrace(); JOptionPane.showMessageDialog(Main.parent, tr("Saving file failed: {0}", e.getMessage()), tr("Problem occurred"), JOptionPane.WARNING_MESSAGE); } } } }