001package jmri.jmrit.symbolicprog; 002 003import java.awt.event.ActionEvent; 004import java.io.File; 005import java.io.FileOutputStream; 006import java.io.IOException; 007import java.io.OutputStreamWriter; 008import java.nio.charset.StandardCharsets; 009import javax.swing.AbstractAction; 010import javax.swing.JFileChooser; 011 012import jmri.jmrit.symbolicprog.tabbedframe.PaneProgFrame; 013 014import org.apache.commons.csv.CSVFormat; 015import org.apache.commons.csv.CSVPrinter; 016 017import org.slf4j.Logger; 018import org.slf4j.LoggerFactory; 019 020/** 021 * Action to export the Function labels to a Comma Separated Variable (CSV) data file. 022 * 023 * @author Bob Jacobsen Copyright (C) 2003, 2026 024 */ 025public class CsvFunctionExportAction extends AbstractAction { 026 027 public CsvFunctionExportAction(String actionName, PaneProgFrame parent) { 028 super(actionName); 029 this.parent = parent; 030 } 031 032 JFileChooser fileChooser; 033 PaneProgFrame parent; 034 035 @Override 036 public void actionPerformed(ActionEvent e) { 037 038 if (fileChooser == null) { 039 fileChooser = new jmri.util.swing.JmriJFileChooser(); 040 } 041 042 int retVal = fileChooser.showSaveDialog(parent); 043 044 if (retVal == JFileChooser.APPROVE_OPTION) { 045 File file = fileChooser.getSelectedFile(); 046 if (log.isDebugEnabled()) { 047 log.debug("start to export to CSV file {}", file); 048 } 049 050 try (CSVPrinter str = new CSVPrinter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8), CSVFormat.DEFAULT)) { 051 str.printRecord("Number", "Label"); 052 var labels = parent.getFnLabelPane().getLabels(); 053 for (int i = 0; i < labels.size(); i++) { 054 String label = labels.get(i); 055 str.printRecord(i, label); 056 } 057 str.flush(); 058 } catch (IOException ex) { 059 log.error("Error writing file", ex); 060 } 061 } 062 } 063 064 private static final Logger log = LoggerFactory.getLogger(CsvFunctionExportAction.class); 065}