// License: GPL. For details, see LICENSE file.
package org.openstreetmap.hot.sds;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.gui.PleaseWaitRunnable;
import org.openstreetmap.josm.gui.widgets.SwingFileChooser;
import org.openstreetmap.josm.io.OsmTransferException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@SuppressWarnings("serial")
public class SdsLoadAction extends SdsDiskAccessAction {
private SeparateDataStorePlugin plugin;
public SdsLoadAction(SeparateDataStorePlugin p) {
super(tr("Load..."), "sds_load", tr("Load separate data store data from a file."), null);
plugin = p;
}
@Override
public void actionPerformed(ActionEvent e) {
SwingFileChooser fc = createAndOpenFileChooser(true, true, null);
if (fc == null)
return;
File[] files = fc.getSelectedFiles();
openFiles(Arrays.asList(files));
}
public void openFiles(List<File> fileList) {
OpenFileTask task = new OpenFileTask(fileList, plugin);
Main.worker.submit(task);
}
public class OpenFileTask extends PleaseWaitRunnable {
private List<File> files;
private boolean canceled;
private SeparateDataStorePlugin plugin;
public OpenFileTask(List<File> files, SeparateDataStorePlugin p) {
super(tr("Loading files"), false /* don't ignore exception */);
this.files = new ArrayList<>(files);
plugin = p;
}
@Override
protected void cancel() {
this.canceled = true;
}
@Override
protected void finish() {
// do nothing
}
@Override
protected void realRun() throws SAXException, IOException, OsmTransferException {
if (files == null || files.isEmpty()) return;
getProgressMonitor().setTicksCount(files.size());
for (File f : files) {
if (canceled) return;
getProgressMonitor().indeterminateSubTask(tr("Opening file ''{0}'' ...", f.getAbsolutePath()));
InputStream fileStream;
try {
fileStream = new FileInputStream(f);
SdsParser p = new SdsParser(getLayerManager().getEditDataSet(), plugin, false);
InputSource inputSource = new InputSource(fileStream);
SAXParserFactory.newInstance().newSAXParser().parse(inputSource, p);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}