package za.co.taulite.openapi.openapiparser;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.builder.SpringApplicationBuilder;
|
|
import javax.swing.*;
|
import javax.swing.filechooser.FileFilter;
|
import javax.swing.filechooser.FileSystemView;
|
import java.awt.*;
|
import java.io.File;
|
import java.io.IOException;
|
import java.net.MalformedURLException;
|
import java.nio.file.Files;
|
import java.nio.file.Paths;
|
import java.nio.file.StandardOpenOption;
|
import java.util.Arrays;
|
|
@SpringBootApplication
|
public class SwingApp extends JFrame {
|
|
@Autowired
|
private Converter converter;
|
|
public SwingApp() {
|
super("OpenAPI2CSV - Theo se Tool");
|
|
setLayout(new FlowLayout());
|
|
var lblInputFile = new JLabel("Pick a file ... File -> Open");
|
add(lblInputFile);
|
|
var menuBar = new JMenuBar();
|
var fileMenu = new JMenu("File");
|
var openMenu = new JMenuItem("Open");
|
openMenu.addActionListener(e -> {
|
var fc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
fc.setDialogTitle("OpenAPI Descriptor");
|
fc.setFileFilter(new FileFilter() {
|
@Override
|
public boolean accept(File file) {
|
return file.isDirectory() || file.getName().endsWith(".yaml");
|
}
|
|
@Override
|
public String getDescription() {
|
return "OpenApi YAML";
|
}
|
});
|
if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
|
var inputFile = fc.getSelectedFile();
|
if (!inputFile.isDirectory()) {
|
try {
|
var url = inputFile.toURI().toURL();
|
lblInputFile.setText(inputFile.getAbsolutePath());
|
if (converter.isOpenApiDescriptor(url)) {
|
var fco = new JFileChooser(inputFile.getParentFile());
|
fco.setDialogTitle("Choose output directory");
|
fco.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
fco.setAcceptAllFileFilterUsed(false);
|
if (fco.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
|
var outputDir = fco.getSelectedFile();
|
var domainCsvFile = String.format("%s.domain.csv", inputFile.getName());
|
var domainCsvFilePath = Paths.get(outputDir.getAbsolutePath(), domainCsvFile);
|
var domainCsv = converter.domainToCsv(url);
|
|
var domainHtml = csvToHtml(domainCsv);
|
var domainHtmlFile = String.format("%s.domain.html", inputFile.getName());
|
var domainHtmlFilePath = Paths.get(outputDir.getAbsolutePath(), domainHtmlFile);
|
try {
|
Files.writeString(domainCsvFilePath, domainCsv, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
|
Files.writeString(domainHtmlFilePath, domainHtml, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
|
} catch (IOException ex) {
|
lblInputFile.setText(ex.getMessage());
|
}
|
|
var operationsCsvFile = String.format("%s.operations.csv", inputFile.getName());
|
var operationsCsvFilePath = Paths.get(outputDir.getAbsolutePath(), operationsCsvFile);
|
var operationsCsv = converter.operationsToCsv(url);
|
|
var operationsHtml = csvToHtml(operationsCsv);
|
var operationsHtmlFile = String.format("%s.operations.html", inputFile.getName());
|
var operationsHtmlFilePath = Paths.get(outputDir.getAbsolutePath(), operationsHtmlFile);
|
try {
|
Files.writeString(operationsCsvFilePath, operationsCsv, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
|
Files.writeString(operationsHtmlFilePath, operationsHtml, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
|
} catch (IOException ex) {
|
lblInputFile.setText(ex.getMessage());
|
}
|
|
lblInputFile.setText(String.format("Output generated: %s", outputDir.getAbsolutePath()));
|
}
|
} else {
|
lblInputFile.setText("Invalid file");
|
}
|
} catch (MalformedURLException ex) {
|
lblInputFile.setText(ex.getMessage());
|
}
|
} else {
|
lblInputFile.setText("Please select valid file");
|
}
|
}
|
});
|
|
var exitMenu = new JMenuItem("Exit");
|
exitMenu.addActionListener((event) -> System.exit(0));
|
|
fileMenu.add(openMenu);
|
fileMenu.add(exitMenu);
|
menuBar.add(fileMenu);
|
|
setJMenuBar(menuBar);
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
setSize(800, 600);
|
setLocationRelativeTo(null);
|
}
|
|
private String csvToHtml(String csv) {
|
var builder = new StringBuilder();
|
builder.append("<html>\n");
|
builder.append("<table border=\"1\">\n");
|
Arrays.stream(csv.split("\n")).forEach(l -> {
|
builder.append("\t<tr>\n");
|
Arrays.stream(l.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")).forEach(c -> {
|
builder.append("\t\t<td>")
|
.append(c)
|
.append("</td>\n");
|
});
|
builder.append("\t</tr>\n");
|
});
|
builder.append("</table>\n");
|
builder.append("</html>");
|
return builder.toString();
|
}
|
|
public static void main(String[] args) {
|
|
var ctx = new SpringApplicationBuilder(SwingApp.class)
|
.headless(false).run(args);
|
|
EventQueue.invokeLater(() -> {
|
|
var ex = ctx.getBean(SwingApp.class);
|
ex.setVisible(true);
|
});
|
}
|
}
|