package nl.uva.sc.encoders.testrig;
import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.antlr.v4.runtime.misc.TestRig;
/**
* GUI for {@link TestRig}
*
* @author Pim Tegelaar
*/
public class TestRigGui extends JFrame implements ActionListener {
private static final String TMPFILE_TXT = "tmpfile.txt";
private static final long serialVersionUID = 1L;
private TextField grammarNameText = new TextField();
private TextField startNameText = new TextField();
private TextArea inputArea = new TextArea();
private TextField encodingText = new TextField("");
private TextField psFileText = new TextField("");
private Button button = new Button("Rig her up!");
private JCheckBox treeCb = new JCheckBox("tree");
private JCheckBox guiCb = new JCheckBox("gui");
private JCheckBox tokensCb = new JCheckBox("tokens");
private JCheckBox traceCb = new JCheckBox("trace");
private JCheckBox sllCb = new JCheckBox("SLL");
private JCheckBox diagnosticsCb = new JCheckBox("diagnostics");
private final String grammarName;
private final String startName;
private final String inputLocation;
public static void main(String[] args) throws Exception {
String grammarName = "nl.uva.sc.encoders.qls.EncodersQLS";
String startName = "stylesheet";
String inputLocation = "qls/stylesheet.qls";
if (args.length == 3) {
grammarName = args[0];
startName = args[1];
inputLocation = args[2];
}
TestRigGui testRigGui = new TestRigGui(grammarName, startName, inputLocation);
testRigGui.setUpGui();
}
public TestRigGui(String grammarName, String startName, String inputLocation) throws HeadlessException {
super("TestRigGui");
this.grammarName = grammarName;
this.startName = startName;
this.inputLocation = inputLocation;
}
private void setUpGui() throws IOException, URISyntaxException {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(550, 400));
setLocationRelativeTo(null);
GridBagLayout gridLayout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
setLayout(gridLayout);
grammarNameText.setText(grammarName);
startNameText.setText(startName);
add(new Label("Lexer"), 0, 0);
add(grammarNameText, 1, 0);
add(new Label("Startname"), 0, 1);
add(startNameText, 1, 1);
add(new Label("Input"), 0, 2);
add(inputArea, 1, 2);
add(new Label("Encoding"), 0, 3);
add(encodingText, 1, 3);
add(new Label("PS file"), 0, 4);
add(psFileText, 1, 4);
JPanel panel = new JPanel();
panel.add(treeCb);
panel.add(guiCb);
panel.add(tokensCb);
panel.add(traceCb);
panel.add(sllCb);
panel.add(diagnosticsCb);
add(panel, 1, 5);
add(button, 1, 6);
guiCb.setSelected(true);
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource(inputLocation);
byte[] bytes = Files.readAllBytes(Paths.get(resource.toURI()));
inputArea.setText(new String(bytes));
button.addActionListener(this);
pack();
setVisible(true);
}
public void add(Component comp, int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = x;
c.gridy = y;
add(comp, c);
}
@Override
public void actionPerformed(ActionEvent ae) {
String text = inputArea.getText();
File tmpFile = new File(TMPFILE_TXT);
FileWriter writer;
try {
writer = new FileWriter(tmpFile);
writer.write(text);
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
TestRig testRig = new TestRig(getArguments().toArray(new String[] {}));
testRig.process();
tmpFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
private List<String> getArguments() {
List<String> argList = new ArrayList<String>(Arrays.asList(grammarNameText.getText(), startNameText.getText(), TMPFILE_TXT));
if (treeCb.isSelected()) {
argList.add("-tree");
}
if (guiCb.isSelected()) {
argList.add("-gui");
}
if (tokensCb.isSelected()) {
argList.add("-tokens");
}
if (traceCb.isSelected()) {
argList.add("-trace");
}
if (sllCb.isSelected()) {
argList.add("-SLL");
}
if (diagnosticsCb.isSelected()) {
argList.add("-(diagnostics");
}
String encoding = encodingText.getText();
if (!encoding.isEmpty()) {
argList.add("-encoding");
argList.add(encoding);
}
String psFile = psFileText.getText();
if (!psFile.isEmpty()) {
argList.add("-ps");
argList.add(psFile);
}
return argList;
}
}