package waypoints; 

import static org.openstreetmap.josm.tools.I18n.tr;

import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;

import javax.swing.JFileChooser;
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.actions.DiskAccessAction;
import org.xml.sax.SAXException;

/**
 * Based on standard JOSM OpenAction 
 * For opening a waypoint file to convert to nodes.
 */
public class WaypointOpenAction extends DiskAccessAction {
	
	/**
	 * Create an open action. The name is "Open a file".
	 */
	public WaypointOpenAction() {
		super(tr("Open waypoints file"), "open", tr("Open a waypoints file."), 
						KeyEvent.VK_W, InputEvent.CTRL_DOWN_MASK);
	}

	public void actionPerformed(ActionEvent e) {
		JFileChooser fc = createAndOpenFileChooser(true, true);
		if (fc == null)
			return;
		File[] files = fc.getSelectedFiles();
		for (int i = files.length; i > 0; --i)
			openFile(files[i-1]);
	}

	/**
	 * Open the given file.
	 */
	public void openFile(File file) {
		String fn = file.getName();
		try {
				DataSet dataSet = 
						WaypointReader.parse(new FileInputStream(file));
				Main.main.addLayer(new OsmDataLayer(dataSet, file.getName(), 
										file));
		} catch (SAXException x) {
			x.printStackTrace();
			JOptionPane.showMessageDialog(Main.parent, 
					tr("Error while parsing {0}",fn)+": "+x.getMessage());
		} catch (IOException x) {
			x.printStackTrace();
			JOptionPane.showMessageDialog(Main.parent, 
					tr("Could not read \"{0}\"",fn)+"\n"+x.getMessage());
		}
	}
}
