Improved file naming

This commit is contained in:
2017-06-12 15:38:51 +02:00
parent 9e6707b08f
commit f94ce2d73c
7 changed files with 131 additions and 79 deletions
-2
View File
@@ -1,2 +0,0 @@
REGEX
(a|b)
-7
View File
@@ -1,7 +0,0 @@
Tabs voor openstaande grafieken, met manier om te sluiten ofzo
File selector voor dot files
Error message
loading bar
regex input
exporteren van plaatje
exporteren van raw data
+16 -6
View File
@@ -92,17 +92,27 @@ public class Graph {
return text;
}
public static synchronized void generateImage(Automata<String> a, String fileName) {
public static synchronized File generateImage(Automata<String> a)
{
return generateImage(a, null);
}
public static synchronized File generateImage(Automata<String> a, String fileName) {
File f;
if (fileName != null) {
f = new File("images/" + fileName + ".png");
} else {
f = new File("images/" + a.hashCode() + ".png");
}
try {
MutableGraph g = Parser.read(Graph.generateImageString(a));
if (fileName != null) {
Graphviz.fromGraph(g).width(Math.max(a.states.size() * 150, 750)).render(Format.PNG).toFile(new File("images/" + fileName + ".png"));
} else {
Graphviz.fromGraph(g).width(Math.max(a.states.size() * 150, 750)).render(Format.PNG).toFile(new File("images/" + a.hashCode() + ".png"));
}
Graphviz.fromGraph(g).width(Math.max(a.states.size() * 150, 750)).render(Format.PNG).toFile(f);
} catch (IOException e) {
e.printStackTrace();
}
return f;
}
}
+21
View File
@@ -0,0 +1,21 @@
package com.imegumii;
/**
* Created by kenny on 12-6-2017.
*/
public class Util {
public static String randomString(int lenght)
{
String s = "";
String all = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for(int i = 0; i < lenght; i++)
{
int rand = (int)(Math.random() * all.length());
s += all.substring(rand, rand+1);
}
return s;
}
}
+82 -45
View File
@@ -10,6 +10,7 @@ import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Point2D;
import java.io.*;
import java.awt.image.BufferedImage;
@@ -43,6 +44,7 @@ public class GraphPanel extends JPanel {
buttonPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.BLACK), BorderFactory.createEmptyBorder(10, 10, 10, 10)));
JButton closeTab = new JButton("Close");
closeTab.setForeground(new Color(200, 100, 100));
closeTab.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@@ -54,27 +56,33 @@ public class GraphPanel extends JPanel {
exportData.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String filename = "raw." + name.toLowerCase() + ".dot";
File file = new File("export/" + filename);
if(file.exists()){
int reply = JOptionPane.showConfirmDialog(null, "The file " + filename + "already exists. Do you want to overwrite it?", "File exists", JOptionPane.YES_NO_OPTION);
if (reply != JOptionPane.YES_OPTION) {
StatusPanel.Instance().setStatus("Cancelled export");
return;
BackgroundWorker.instance().addWorker(new BackgroundWorker.Worker() {
@Override
public void execute() {
String filename = "data." + Util.randomString(5) + ".dot";
File file = new File("export/" + filename);
if(file.exists()){
int reply = JOptionPane.showConfirmDialog(null, "The file " + filename + "already exists. Do you want to overwrite it?", "File exists", JOptionPane.YES_NO_OPTION);
if (reply != JOptionPane.YES_OPTION) {
StatusPanel.Instance().setStatus("Cancelled export");
return;
}
}
PrintWriter w = null;
try {
w = new PrintWriter(file);
w.print(automata.getTransitions());
w.flush();
w.close();
StatusPanel.Instance().setStatus("Success: " + filename);
} catch (FileNotFoundException e1) {
StatusPanel.Instance().setStatus("Something went wrong while exporting the file");
}
}
}
PrintWriter w = null;
try {
w = new PrintWriter(file);
w.print(automata.getTransitions());
w.flush();
w.close();
StatusPanel.Instance().setStatus("Success: " + filename);
} catch (FileNotFoundException e1) {
StatusPanel.Instance().setStatus("Something went wrong while exporting the file");
}
});
}
});
@@ -86,7 +94,7 @@ public class GraphPanel extends JPanel {
BackgroundWorker.instance().addWorker(new BackgroundWorker.Worker() {
@Override
public void execute() {
String filename = "img." + name.toLowerCase() + ".png";
String filename = "img." + Util.randomString(5) + ".png";
File file = new File("export/" + filename);
if(file.exists()){
@@ -108,7 +116,7 @@ public class GraphPanel extends JPanel {
}
});
JButton minimizeButton = new JButton("Minimize graph");
JButton minimizeButton = new JButton("Minimize (Hopcroft)");
minimizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@@ -117,47 +125,75 @@ public class GraphPanel extends JPanel {
public void execute() {
if(automata.type == Importable.Type.NDFA)
{
StatusPanel.Instance().setStatus("Converting to DFA " + name, 20);
StatusPanel.Instance().setStatus("Converting to DFA ", 20);
DFA<String> convert = ((NDFA<String>) automata).toDFA();
StatusPanel.Instance().setStatus("Generating image for DFA " + name, 30);
Graph.generateImage(convert, "cdfa");
TabPanel.Instance().addGraph("DFA: " + name, new File("images/cdfa.png"), convert);
StatusPanel.Instance().setStatus("Minimizing cdfa." + name, 50);
StatusPanel.Instance().setStatus("Generating image for DFA", 30);
File img = Graph.generateImage(convert);
TabPanel.Instance().addGraph(name, img, convert);
StatusPanel.Instance().setStatus("Minimizing DFA", 50);
DFA<String> mini = convert.minimaliseerHopcroft();
StatusPanel.Instance().setStatus("Generating minimized image", 70);
File img2 = Graph.generateImage(mini);
TabPanel.Instance().addGraph(name, img2, mini);
Graph.generateImage(mini, "mcdfa");
TabPanel.Instance().addGraph("DFA: mcdfa." + name, new File("images/mcdfa.png"), mini);
System.out.println(mini.accepteer("fuuuuuuuck"));
System.out.println(mini.accepteer("fuuuuuuuckabba"));
System.out.println(mini.accepteer("fuuuuuuuckabb"));
mini.geefTaalTotLengte(10).getSymbols().forEach(s -> System.out.println("Accepteer " + s + " ? " + mini.accepteer(s)));
StatusPanel.Instance().setStatus("Done", 100);
}
else if(automata.type == Importable.Type.DFA)
{
DFA<String> dfa = (DFA<String>) automata;
StatusPanel.Instance().setStatus("Minimizing dfa." + name, 40);
DFA<String> dfa = (DFA<String>) automata;
DFA<String> mini = dfa.minimaliseerHopcroft();
StatusPanel.Instance().setStatus("Generating minimized image", 60);
Graph.generateImage(mini, "mcdfa");
TabPanel.Instance().addGraph("DFA: mcdfa." + name, new File("images/mcdfa.png"), mini);
File img3 = Graph.generateImage(mini);
TabPanel.Instance().addGraph(name, img3, mini);
StatusPanel.Instance().setStatus("Done", 100);
}
}
});
}
});
JButton minimize2Button = new JButton("Minimize (Bryzowski)");
minimize2Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BackgroundWorker.instance().addWorker(new BackgroundWorker.Worker() {
@Override
public void execute() {
if(automata.type == Importable.Type.NDFA)
{
StatusPanel.Instance().setStatus("Converting to DFA ", 20);
DFA<String> convert = ((NDFA<String>) automata).toDFA();
StatusPanel.Instance().setStatus("Generating image for DFA", 30);
File img = Graph.generateImage(convert);
TabPanel.Instance().addGraph(name, img, convert);
StatusPanel.Instance().setStatus("Minimizing DFA", 50);
DFA<String> mini = convert.minimaliseer();
StatusPanel.Instance().setStatus("Generating minimized image", 70);
File img2 = Graph.generateImage(mini);
TabPanel.Instance().addGraph(name, img2, mini);
StatusPanel.Instance().setStatus("Done", 100);
}
else if(automata.type == Importable.Type.DFA)
{
StatusPanel.Instance().setStatus("Minimizing dfa." + name, 40);
DFA<String> dfa = (DFA<String>) automata;
DFA<String> mini = dfa.minimaliseer();
StatusPanel.Instance().setStatus("Generating minimized image", 60);
File img3 = Graph.generateImage(mini);
TabPanel.Instance().addGraph(name, img3, mini);
StatusPanel.Instance().setStatus("Done", 100);
}
}
});
@@ -165,6 +201,8 @@ public class GraphPanel extends JPanel {
});
buttonPanel.add(Box.createHorizontalGlue());
buttonPanel.add(minimize2Button);
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
buttonPanel.add(minimizeButton);
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
buttonPanel.add(exportImage);
@@ -174,6 +212,5 @@ public class GraphPanel extends JPanel {
buttonPanel.add(closeTab);
this.add(buttonPanel, BorderLayout.SOUTH);
}
}
+9 -18
View File
@@ -51,15 +51,12 @@ public class InputPanel extends JPanel {
@Override
public void execute() {
String regS = text.getText().trim();
String name = "regex1";
text.setText("");
String name = regS;
StatusPanel.Instance().setStatus("Parsing REGEX", 20);
RegExp regex = new RegExp();
regex = regex.naarRegExp(regS);
System.out.println(regex.getTaal(4, 10));
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
@@ -67,9 +64,9 @@ public class InputPanel extends JPanel {
StatusPanel.Instance().setStatus("Generating image for NDFA", 70);
Graph.generateImage(ndfa, name);
File img = Graph.generateImage(ndfa);
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa);
TabPanel.Instance().addGraph(name, img, ndfa);
StatusPanel.Instance().setStatus("Generating taal", 90);
@@ -125,9 +122,9 @@ public class InputPanel extends JPanel {
StatusPanel.Instance().setStatus("Generating image for NDFA", 60);
NDFA<String> ndfa = (NDFA<String>)p;
Graph.generateImage(ndfa, name);
File f = Graph.generateImage(ndfa);
TabPanel.Instance().addGraph("NDFA: " + name, new File("images/" + name + ".png"), ndfa);
TabPanel.Instance().addGraph(name, f, ndfa);
}
if(p.type == Importable.Type.DFA)
@@ -135,9 +132,9 @@ public class InputPanel extends JPanel {
StatusPanel.Instance().setStatus("Generating image for DFA", 60);
DFA<String> dfa = (DFA<String>)p;
Graph.generateImage(dfa, name);
File f = Graph.generateImage(dfa);
TabPanel.Instance().addGraph("DFA: " + name, new File("images/" + name + ".png"), dfa);
TabPanel.Instance().addGraph(name, f, dfa);
}
if(p.type == Importable.Type.REGEX)
@@ -145,19 +142,13 @@ public class InputPanel extends JPanel {
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
RegExp regex = (RegExp) p;
// System.out.println(regex.getTaal(10));
NDFA<String> ndfa = ThompsonConverter.convert(regex);
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
}
StatusPanel.Instance().setStatus("Generating image for NDFA", 70);
Graph.generateImage(ndfa, name);
File f = Graph.generateImage(ndfa);
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa);
TabPanel.Instance().addGraph(name, f, ndfa);
}
StatusPanel.Instance().setStatus("Done", 100);
+3 -1
View File
@@ -28,7 +28,9 @@ public class TabPanel extends JTabbedPane {
public void addGraph(String name, File image, Automata<String> a)
{
this.addTab(name, new GraphPanel(name, image, a));
String n = a.type.toString() + ": " + name;
this.addTab(n, new GraphPanel(name, image, a));
this.setSelectedIndex(this.getTabCount() - 1);
}