Rename binary readers, and separate the button in two.
This commit is contained in:
parent
a4e7a6f708
commit
6cc57631ad
@ -12,7 +12,7 @@ import org.insa.graph.Point;
|
|||||||
import org.insa.graph.RoadInformation;
|
import org.insa.graph.RoadInformation;
|
||||||
import org.insa.graph.RoadInformation.RoadType;
|
import org.insa.graph.RoadInformation.RoadType;
|
||||||
|
|
||||||
public class BinaryGraphReader extends BinaryReader implements GraphReader {
|
public class BinaryGraphReaderInsa2016 extends BinaryReader implements GraphReader {
|
||||||
|
|
||||||
// Map version and magic number targeted for this reader.
|
// Map version and magic number targeted for this reader.
|
||||||
private static final int VERSION = 4;
|
private static final int VERSION = 4;
|
||||||
@ -70,7 +70,7 @@ public class BinaryGraphReader extends BinaryReader implements GraphReader {
|
|||||||
*
|
*
|
||||||
* @param dis
|
* @param dis
|
||||||
*/
|
*/
|
||||||
public BinaryGraphReader(DataInputStream dis) {
|
public BinaryGraphReaderInsa2016(DataInputStream dis) {
|
||||||
super(MAGIC_NUMBER, VERSION, dis);
|
super(MAGIC_NUMBER, VERSION, dis);
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,7 @@ import org.insa.graph.Point;
|
|||||||
import org.insa.graph.RoadInformation;
|
import org.insa.graph.RoadInformation;
|
||||||
import org.insa.graph.RoadInformation.RoadType;
|
import org.insa.graph.RoadInformation.RoadType;
|
||||||
|
|
||||||
public class BinaryGraphReaderV2 extends BinaryReader implements GraphReader {
|
public class BinaryGraphReaderInsa2018 extends BinaryReader implements GraphReader {
|
||||||
|
|
||||||
// Map version and magic number targeted for this reader.
|
// Map version and magic number targeted for this reader.
|
||||||
private static final int VERSION = 5;
|
private static final int VERSION = 5;
|
||||||
@ -70,7 +70,7 @@ public class BinaryGraphReaderV2 extends BinaryReader implements GraphReader {
|
|||||||
*
|
*
|
||||||
* @param dis
|
* @param dis
|
||||||
*/
|
*/
|
||||||
public BinaryGraphReaderV2(DataInputStream dis) {
|
public BinaryGraphReaderInsa2018(DataInputStream dis) {
|
||||||
super(MAGIC_NUMBER, VERSION, dis);
|
super(MAGIC_NUMBER, VERSION, dis);
|
||||||
}
|
}
|
||||||
|
|
@ -58,8 +58,8 @@ import org.insa.algo.weakconnectivity.WeaklyConnectedComponentsAlgorithm;
|
|||||||
import org.insa.algo.weakconnectivity.WeaklyConnectedComponentsData;
|
import org.insa.algo.weakconnectivity.WeaklyConnectedComponentsData;
|
||||||
import org.insa.graph.Graph;
|
import org.insa.graph.Graph;
|
||||||
import org.insa.graph.Path;
|
import org.insa.graph.Path;
|
||||||
import org.insa.graph.io.BinaryGraphReader;
|
import org.insa.graph.io.BinaryGraphReaderInsa2016;
|
||||||
import org.insa.graph.io.BinaryGraphReaderV2;
|
import org.insa.graph.io.BinaryGraphReaderInsa2018;
|
||||||
import org.insa.graph.io.BinaryPathReader;
|
import org.insa.graph.io.BinaryPathReader;
|
||||||
import org.insa.graph.io.BinaryPathWriter;
|
import org.insa.graph.io.BinaryPathWriter;
|
||||||
import org.insa.graph.io.GraphReader;
|
import org.insa.graph.io.GraphReader;
|
||||||
@ -107,9 +107,6 @@ public class MainWindow extends JFrame {
|
|||||||
// Shortest path panel
|
// Shortest path panel
|
||||||
private ShortestPathPanel spPanel;
|
private ShortestPathPanel spPanel;
|
||||||
|
|
||||||
// List of item for the top menus.
|
|
||||||
private JMenuItem openMapItem;
|
|
||||||
|
|
||||||
// List of items that cannot be used without a graph
|
// List of items that cannot be used without a graph
|
||||||
private ArrayList<JMenuItem> graphLockItems = new ArrayList<JMenuItem>();
|
private ArrayList<JMenuItem> graphLockItems = new ArrayList<JMenuItem>();
|
||||||
|
|
||||||
@ -475,32 +472,63 @@ public class MainWindow extends JFrame {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param newClass
|
||||||
|
*/
|
||||||
private void drawGraph(Class<? extends Drawing> newClass) {
|
private void drawGraph(Class<? extends Drawing> newClass) {
|
||||||
drawGraph(newClass, new BasicGraphPalette());
|
drawGraph(newClass, new BasicGraphPalette());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
private void drawGraph() {
|
private void drawGraph() {
|
||||||
drawGraph(null, new BasicGraphPalette());
|
drawGraph(null, new BasicGraphPalette());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadGraph(GraphReader reader) {
|
||||||
|
launchThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
GraphReaderProgressBar progressBar = new GraphReaderProgressBar(MainWindow.this);
|
||||||
|
progressBar.setLocationRelativeTo(mainPanel.getLeftComponent());
|
||||||
|
reader.addObserver(progressBar);
|
||||||
|
try {
|
||||||
|
graph = reader.read();
|
||||||
|
}
|
||||||
|
catch (Exception exception) {
|
||||||
|
JOptionPane.showMessageDialog(MainWindow.this, "Unable to read graph from the selected file.");
|
||||||
|
exception.printStackTrace(System.out);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
notifyNewGraphLoaded();
|
||||||
|
|
||||||
|
graphInfoPanel
|
||||||
|
.setText(String.format("Map ID: %#x, %d nodes", graph.getMapId(), graph.getNodes().size()));
|
||||||
|
drawGraph();
|
||||||
|
|
||||||
|
for (JMenuItem item: graphLockItems) {
|
||||||
|
item.setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
}
|
||||||
|
|
||||||
private JMenuBar createMenuBar() {
|
private JMenuBar createMenuBar() {
|
||||||
|
|
||||||
// Open Map item...
|
// Open Map item...
|
||||||
openMapItem = new JMenuItem("Open Map... ", KeyEvent.VK_O);
|
JMenuItem openMapItem = new JMenuItem("Open Map... ", KeyEvent.VK_O);
|
||||||
openMapItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.ALT_MASK));
|
openMapItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.ALT_MASK));
|
||||||
openMapItem.addActionListener(baf.createBlockingAction(new ActionListener() {
|
openMapItem.addActionListener(baf.createBlockingAction(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
JFileChooser chooser = new JFileChooser();
|
JFileChooser chooser = new JFileChooser();
|
||||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Map & compressed map files", "map",
|
FileNameExtensionFilter filter = new FileNameExtensionFilter("Graph files", "mapgr");
|
||||||
"map2", "mapgr", "map.gz");
|
|
||||||
chooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
|
chooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
|
||||||
chooser.setFileFilter(filter);
|
chooser.setFileFilter(filter);
|
||||||
if (chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) {
|
if (chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) {
|
||||||
launchThread(new Runnable() {
|
graphFilePath = chooser.getSelectedFile().getAbsolutePath();
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
String path = chooser.getSelectedFile().getAbsolutePath();
|
|
||||||
DataInputStream stream;
|
DataInputStream stream;
|
||||||
try {
|
try {
|
||||||
stream = new DataInputStream(
|
stream = new DataInputStream(
|
||||||
@ -510,39 +538,32 @@ public class MainWindow extends JFrame {
|
|||||||
JOptionPane.showMessageDialog(MainWindow.this, "Cannot open the selected file.");
|
JOptionPane.showMessageDialog(MainWindow.this, "Cannot open the selected file.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GraphReader reader;
|
loadGraph(new BinaryGraphReaderInsa2018(stream));
|
||||||
if (path.endsWith(".map2") || path.endsWith("mapgr")) {
|
|
||||||
reader = new BinaryGraphReaderV2(stream);
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
reader = new BinaryGraphReader(stream);
|
|
||||||
}
|
}
|
||||||
GraphReaderProgressBar progressBar = new GraphReaderProgressBar(MainWindow.this);
|
}));
|
||||||
progressBar.setLocationRelativeTo(mainPanel.getLeftComponent());
|
|
||||||
reader.addObserver(progressBar);
|
JMenuItem openOldMapItem = new JMenuItem("Open Map (Old version)... ");
|
||||||
|
openOldMapItem.addActionListener(baf.createBlockingAction(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JFileChooser chooser = new JFileChooser();
|
||||||
|
FileNameExtensionFilter filter = new FileNameExtensionFilter("Map & compressed map files", "map");
|
||||||
|
chooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
|
||||||
|
chooser.setFileFilter(filter);
|
||||||
|
if (chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
graphFilePath = chooser.getSelectedFile().getAbsolutePath();
|
||||||
|
|
||||||
|
DataInputStream stream;
|
||||||
try {
|
try {
|
||||||
graph = reader.read();
|
stream = new DataInputStream(
|
||||||
|
new BufferedInputStream(new FileInputStream(chooser.getSelectedFile())));
|
||||||
}
|
}
|
||||||
catch (Exception exception) {
|
catch (IOException e1) {
|
||||||
JOptionPane.showMessageDialog(MainWindow.this,
|
JOptionPane.showMessageDialog(MainWindow.this, "Cannot open the selected file.");
|
||||||
"Unable to read graph from the selected file.");
|
|
||||||
exception.printStackTrace(System.out);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
notifyNewGraphLoaded();
|
loadGraph(new BinaryGraphReaderInsa2016(stream));
|
||||||
|
|
||||||
// Save file path.
|
|
||||||
graphFilePath = path;
|
|
||||||
|
|
||||||
graphInfoPanel.setText(
|
|
||||||
String.format("Map ID: %#x, %d nodes", graph.getMapId(), graph.getNodes().size()));
|
|
||||||
drawGraph();
|
|
||||||
|
|
||||||
for (JMenuItem item: graphLockItems) {
|
|
||||||
item.setEnabled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@ -551,6 +572,7 @@ public class MainWindow extends JFrame {
|
|||||||
JMenuItem openPathItem = new JMenuItem("Open Path... ", KeyEvent.VK_P);
|
JMenuItem openPathItem = new JMenuItem("Open Path... ", KeyEvent.VK_P);
|
||||||
openPathItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.ALT_MASK));
|
openPathItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.ALT_MASK));
|
||||||
openPathItem.addActionListener(baf.createBlockingAction(new ActionListener() {
|
openPathItem.addActionListener(baf.createBlockingAction(new ActionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
JFileChooser chooser = new JFileChooser();
|
JFileChooser chooser = new JFileChooser();
|
||||||
@ -599,6 +621,7 @@ public class MainWindow extends JFrame {
|
|||||||
// Build the first menu.
|
// Build the first menu.
|
||||||
JMenu fileMenu = new JMenu("File");
|
JMenu fileMenu = new JMenu("File");
|
||||||
fileMenu.add(openMapItem);
|
fileMenu.add(openMapItem);
|
||||||
|
fileMenu.add(openOldMapItem); // TODO: Remove this for Students.
|
||||||
fileMenu.add(openPathItem);
|
fileMenu.add(openPathItem);
|
||||||
fileMenu.addSeparator();
|
fileMenu.addSeparator();
|
||||||
fileMenu.add(closeItem);
|
fileMenu.add(closeItem);
|
||||||
|
@ -23,7 +23,7 @@ public class BinaryGraphReaderTest {
|
|||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void initAll() throws IOException {
|
public static void initAll() throws IOException {
|
||||||
BinaryGraphReader reader = new BinaryGraphReader(
|
BinaryGraphReaderInsa2016 reader = new BinaryGraphReaderInsa2016(
|
||||||
new DataInputStream(new BufferedInputStream(new FileInputStream("Maps/midip.map"))));
|
new DataInputStream(new BufferedInputStream(new FileInputStream("Maps/midip.map"))));
|
||||||
midip = reader.read();
|
midip = reader.read();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user