Unable to read graph from the selected file:
" + + exception.getMessage() + "
"); + exception.printStackTrace(System.out); + return; + } + + // In case of.... + progressBar.setVisible(false); + progressBar.dispose(); + progressBar = null; + + String info = graph.getMapId(); + if (graph.getMapName() != null && !graph.getMapName().isEmpty()) { + // The \u200e character is the left-to-right mark, we need to avoid issue with + // name that are right-to-left (e.g. arabic names). + info += " - " + graph.getMapName() + "\u200e"; + } + info += ", " + graph.size() + " nodes, " + graph.getGraphInformation().getArcCount() + + " arcs."; + graphInfoPanel.setText(info); + + drawGraph(); + + notifyNewGraphLoaded(); + + for (JMenuItem item: graphLockItems) { + item.setEnabled(true); + } + } + }, false); + } + + /** + * Show and enable the given AlgorithmPanel (and hide all others). + * + * @param algorithmPanel + */ + private void enableAlgorithmPanel(AlgorithmPanel algorithmPanel) { + int dividerLocation = mainPanel.getDividerLocation(); + for (AlgorithmPanel panel: algoPanels) { + panel.setVisible(panel == algorithmPanel); + } + mainPanel.setDividerLocation(dividerLocation); + } + + private JMenuBar createMenuBar(ActionListener openMapActionListener) { + + // Open Map item... + JMenuItem openMapItem = new JMenuItem("Open Map... ", KeyEvent.VK_O); + openMapItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.ALT_MASK)); + openMapItem.addActionListener(baf.createBlockingAction(openMapActionListener)); + + // Open Path item... + JMenuItem openPathItem = new JMenuItem("Open Path... ", KeyEvent.VK_P); + openPathItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.ALT_MASK)); + openPathItem.addActionListener(baf.createBlockingAction(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = FileUtils.createFileChooser(FolderType.PathInput); + if (chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) { + try (BinaryPathReader reader = new BinaryPathReader(new DataInputStream(new BufferedInputStream( + new FileInputStream(chooser.getSelectedFile()))))){ + Path path = reader.readPath(graph); + pathPanel.addPath(path); + } + catch (MapMismatchException exception) { + JOptionPane.showMessageDialog(MainWindow.this, + "The selected file does not contain a path for the current graph."); + } + catch (IOException e1) { + JOptionPane.showMessageDialog(MainWindow.this, + "Cannot open the selected file."); + } + catch (Exception exception) { + JOptionPane.showMessageDialog(MainWindow.this, + "Unable to read path from the selected file."); + } + } + } + })); + graphLockItems.add(openPathItem); + + // Close item + JMenuItem closeItem = new JMenuItem("Quit", KeyEvent.VK_Q); + closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK)); + closeItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + MainWindow.this.dispatchEvent( + new WindowEvent(MainWindow.this, WindowEvent.WINDOW_CLOSING)); + } + }); + + // Build the first menu. + JMenu fileMenu = new JMenu("File"); + fileMenu.add(openMapItem); + fileMenu.add(openPathItem); + fileMenu.addSeparator(); + fileMenu.add(closeItem); + + // Second menu + JMenuItem drawGraphItem = new JMenuItem("Redraw", KeyEvent.VK_R); + drawGraphItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.ALT_MASK)); + drawGraphItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + drawGraph(BasicDrawing.class, basicPalette); + } + })); + graphLockItems.add(drawGraphItem); + JMenuItem drawGraphBWItem = new JMenuItem("Redraw (B&W)", KeyEvent.VK_B); + drawGraphBWItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.ALT_MASK)); + drawGraphBWItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + drawGraph(BasicDrawing.class, blackAndWhitePalette); + } + })); + graphLockItems.add(drawGraphBWItem); + JMenuItem drawGraphMapsforgeItem = new JMenuItem("Redraw (Map)", KeyEvent.VK_M); + drawGraphMapsforgeItem + .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.ALT_MASK)); + drawGraphMapsforgeItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + drawGraph(MapViewDrawing.class); + } + })); + graphLockItems.add(drawGraphMapsforgeItem); + + JMenu graphMenu = new JMenu("Graph"); + graphMenu.add(drawGraphItem); + graphMenu.add(drawGraphBWItem); + graphMenu.addSeparator(); + graphMenu.add(drawGraphMapsforgeItem); + + // Algo menu + JMenu algoMenu = new JMenu("Algorithms"); + + // Weakly connected components + JMenuItem wccItem = new JMenuItem("Weakly Connected Components"); + wccItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + enableAlgorithmPanel(wccPanel); + } + })); + + // Shortest path + JMenuItem spItem = new JMenuItem("Shortest-Path"); + spItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + enableAlgorithmPanel(spPanel); + } + })); + + // Car pooling + JMenuItem cpItem = new JMenuItem("Car Pooling"); + cpItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + enableAlgorithmPanel(cpPanel); + } + })); + + // Car pooling + JMenuItem psItem = new JMenuItem("Package Switch"); + psItem.addActionListener(baf.createBlockingAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + enableAlgorithmPanel(psPanel); + } + })); + + graphLockItems.add(wccItem); + graphLockItems.add(spItem); + graphLockItems.add(cpItem); + graphLockItems.add(psItem); + + algoMenu.add(wccItem); + algoMenu.addSeparator(); + algoMenu.add(spItem); + algoMenu.add(cpItem); + algoMenu.add(psItem); + + // Create the menu bar. + JMenuBar menuBar = new JMenuBar(); + + menuBar.add(fileMenu); + menuBar.add(graphMenu); + menuBar.add(algoMenu); + + for (JMenuItem item: graphLockItems) { + item.setEnabled(false); + } + + return menuBar; + } + + private JPanel createStatusBar() { + // create the status bar panel and shove it down the bottom of the frame + JPanel statusPanel = new JPanel(); + statusPanel.setBorder( + new CompoundBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.GRAY), + new EmptyBorder(0, 15, 0, 15))); + statusPanel.setPreferredSize(new Dimension(getWidth(), 38)); + statusPanel.setLayout(new BorderLayout()); + + graphInfoPanel = new JLabel(); + graphInfoPanel.setHorizontalAlignment(SwingConstants.LEFT); + statusPanel.add(graphInfoPanel, BorderLayout.WEST); + + JLabel threadInfo = new JLabel("Thread running... "); + JLabel threadTimerLabel = new JLabel("00:00:00"); + JButton threadButton = new JButton("Stop"); + threadButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (currentThread.isRunning()) { + int confirmed = JOptionPane.showConfirmDialog(MainWindow.this, + "Are you sure you want to kill the running thread?", + "Kill Confirmation", JOptionPane.YES_NO_OPTION); + if (confirmed == JOptionPane.YES_OPTION) { + currentThread.interrupt(); + } + } + } + }); + + threadTimer = new Timer(THREAD_TIMER_DELAY, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + long seconds = currentThread.getDuration().getSeconds(); + threadTimerLabel.setText(String.format("%02d:%02d:%02d", seconds / 3600, + seconds / 60 % 60, seconds % 60)); + } + }); + threadTimer.setInitialDelay(0); + + threadPanel = new JPanel(); + threadPanel.add(threadInfo); + threadPanel.add(threadTimerLabel); + threadPanel.add(threadButton); + threadPanel.setVisible(false); + statusPanel.add(threadPanel, BorderLayout.EAST); + + return statusPanel; + } + + public static void main(final String[] args) { + + // Try to set system look and feel. + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } + catch (Exception e) { + } + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + MainWindow w = new MainWindow(); + w.setExtendedState(JFrame.MAXIMIZED_BOTH); + w.setVisible(true); + } + }); + } + +} diff --git a/src/main/org/insa/graphics/NodesInputPanel.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/NodesInputPanel.java similarity index 97% rename from src/main/org/insa/graphics/NodesInputPanel.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/NodesInputPanel.java index f5dc5e9..0c41fe7 100644 --- a/src/main/org/insa/graphics/NodesInputPanel.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/NodesInputPanel.java @@ -1,4 +1,4 @@ -package org.insa.graphics; +package org.insa.graphs.gui; import java.awt.Color; import java.awt.Font; @@ -21,13 +21,13 @@ import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.insa.graph.Graph; -import org.insa.graph.Node; -import org.insa.graph.Point; -import org.insa.graphics.drawing.Drawing; -import org.insa.graphics.drawing.Drawing.AlphaMode; -import org.insa.graphics.drawing.DrawingClickListener; -import org.insa.graphics.drawing.overlays.MarkerOverlay; +import org.insa.graphs.gui.drawing.Drawing; +import org.insa.graphs.gui.drawing.Drawing.AlphaMode; +import org.insa.graphs.gui.drawing.DrawingClickListener; +import org.insa.graphs.gui.drawing.overlays.MarkerOverlay; +import org.insa.graphs.model.Graph; +import org.insa.graphs.model.Node; +import org.insa.graphs.model.Point; public class NodesInputPanel extends JPanel implements DrawingClickListener, DrawingChangeListener, GraphChangeListener { diff --git a/src/main/org/insa/graphics/PathsPanel.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/PathsPanel.java similarity index 95% rename from src/main/org/insa/graphics/PathsPanel.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/PathsPanel.java index 3e687a4..29ea418 100644 --- a/src/main/org/insa/graphics/PathsPanel.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/PathsPanel.java @@ -1,4 +1,4 @@ -package org.insa.graphics; +package org.insa.graphs.gui; import java.awt.Color; import java.awt.Component; @@ -32,14 +32,14 @@ import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.insa.graph.Graph; -import org.insa.graph.Path; -import org.insa.graph.io.BinaryPathWriter; -import org.insa.graphics.drawing.Drawing; -import org.insa.graphics.drawing.overlays.PathOverlay; -import org.insa.graphics.utils.ColorUtils; -import org.insa.graphics.utils.FileUtils; -import org.insa.graphics.utils.FileUtils.FolderType; +import org.insa.graphs.gui.drawing.Drawing; +import org.insa.graphs.gui.drawing.overlays.PathOverlay; +import org.insa.graphs.gui.utils.ColorUtils; +import org.insa.graphs.gui.utils.FileUtils; +import org.insa.graphs.gui.utils.FileUtils.FolderType; +import org.insa.graphs.model.Graph; +import org.insa.graphs.model.Path; +import org.insa.graphs.model.io.BinaryPathWriter; public class PathsPanel extends JPanel implements DrawingChangeListener, GraphChangeListener { @@ -232,9 +232,8 @@ public class PathsPanel extends JPanel implements DrawingChangeListener, GraphCh if (chooser .showSaveDialog(getTopLevelAncestor()) == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); - try { - BinaryPathWriter writer = new BinaryPathWriter(new DataOutputStream( - new BufferedOutputStream(new FileOutputStream(file)))); + try (BinaryPathWriter writer = new BinaryPathWriter(new DataOutputStream( + new BufferedOutputStream(new FileOutputStream(file))))) { writer.writePath(path); } catch (IOException e1) { diff --git a/src/main/org/insa/graphics/RunningAction.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/RunningAction.java similarity index 95% rename from src/main/org/insa/graphics/RunningAction.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/RunningAction.java index a19aa1a..8cca834 100644 --- a/src/main/org/insa/graphics/RunningAction.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/RunningAction.java @@ -1,4 +1,4 @@ -package org.insa.graphics; +package org.insa.graphs.gui; import java.time.Duration; import java.time.Instant; diff --git a/src/main/org/insa/graphics/SolutionPanel.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/SolutionPanel.java similarity index 96% rename from src/main/org/insa/graphics/SolutionPanel.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/SolutionPanel.java index 2d81569..e96bcef 100644 --- a/src/main/org/insa/graphics/SolutionPanel.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/SolutionPanel.java @@ -1,4 +1,4 @@ -package org.insa.graphics; +package org.insa.graphs.gui; import java.awt.Color; import java.awt.Component; @@ -19,12 +19,12 @@ import javax.swing.JPanel; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; -import org.insa.algo.AbstractInputData; -import org.insa.algo.AbstractSolution; -import org.insa.graph.Graph; -import org.insa.graph.Path; -import org.insa.graphics.drawing.Drawing; -import org.insa.graphics.drawing.overlays.PathOverlay; +import org.insa.graphs.algorithm.AbstractInputData; +import org.insa.graphs.algorithm.AbstractSolution; +import org.insa.graphs.gui.drawing.Drawing; +import org.insa.graphs.gui.drawing.overlays.PathOverlay; +import org.insa.graphs.model.Graph; +import org.insa.graphs.model.Path; public class SolutionPanel extends JPanel implements DrawingChangeListener, GraphChangeListener { @@ -122,6 +122,7 @@ public class SolutionPanel extends JPanel implements DrawingChangeListener, Grap /* * (non-Javadoc) + * * @see java.lang.Object#toString() */ public String toString() { diff --git a/src/main/org/insa/graphics/StreamCapturer.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/StreamCapturer.java similarity index 97% rename from src/main/org/insa/graphics/StreamCapturer.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/StreamCapturer.java index d7f47d2..0a7d010 100644 --- a/src/main/org/insa/graphics/StreamCapturer.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/StreamCapturer.java @@ -1,4 +1,4 @@ -package org.insa.graphics; +package org.insa.graphs.gui; import java.io.IOException; import java.io.OutputStream; diff --git a/src/main/org/insa/graphics/ThreadWrapper.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/ThreadWrapper.java similarity index 97% rename from src/main/org/insa/graphics/ThreadWrapper.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/ThreadWrapper.java index e824e22..e5e9cfc 100644 --- a/src/main/org/insa/graphics/ThreadWrapper.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/ThreadWrapper.java @@ -1,4 +1,4 @@ -package org.insa.graphics; +package org.insa.graphs.gui; import java.time.Duration; import java.time.Instant; diff --git a/src/main/org/insa/graphics/drawing/BasicGraphPalette.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/BasicGraphPalette.java similarity index 93% rename from src/main/org/insa/graphics/drawing/BasicGraphPalette.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/BasicGraphPalette.java index ffe47d3..7c7d26e 100644 --- a/src/main/org/insa/graphics/drawing/BasicGraphPalette.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/BasicGraphPalette.java @@ -1,9 +1,9 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; import java.awt.Color; -import org.insa.graph.Arc; -import org.insa.graph.RoadInformation.RoadType; +import org.insa.graphs.model.Arc; +import org.insa.graphs.model.RoadInformation.RoadType; public class BasicGraphPalette implements GraphPalette { diff --git a/src/main/org/insa/graphics/drawing/BlackAndWhiteGraphPalette.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/BlackAndWhiteGraphPalette.java similarity index 86% rename from src/main/org/insa/graphics/drawing/BlackAndWhiteGraphPalette.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/BlackAndWhiteGraphPalette.java index 71d5b50..3141227 100644 --- a/src/main/org/insa/graphics/drawing/BlackAndWhiteGraphPalette.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/BlackAndWhiteGraphPalette.java @@ -1,8 +1,8 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; import java.awt.Color; -import org.insa.graph.Arc; +import org.insa.graphs.model.Arc; public class BlackAndWhiteGraphPalette extends BasicGraphPalette { diff --git a/src/main/org/insa/graphics/drawing/Drawing.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/Drawing.java similarity index 93% rename from src/main/org/insa/graphics/drawing/Drawing.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/Drawing.java index 01cff5f..ee2a018 100644 --- a/src/main/org/insa/graphics/drawing/Drawing.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/Drawing.java @@ -1,13 +1,13 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; import java.awt.Color; -import org.insa.graph.Graph; -import org.insa.graph.Path; -import org.insa.graph.Point; -import org.insa.graphics.drawing.overlays.MarkerOverlay; -import org.insa.graphics.drawing.overlays.PathOverlay; -import org.insa.graphics.drawing.overlays.PointSetOverlay; +import org.insa.graphs.gui.drawing.overlays.MarkerOverlay; +import org.insa.graphs.gui.drawing.overlays.PathOverlay; +import org.insa.graphs.gui.drawing.overlays.PointSetOverlay; +import org.insa.graphs.model.Graph; +import org.insa.graphs.model.Path; +import org.insa.graphs.model.Point; public interface Drawing { diff --git a/src/main/org/insa/graphics/drawing/DrawingClickListener.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/DrawingClickListener.java similarity index 74% rename from src/main/org/insa/graphics/drawing/DrawingClickListener.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/DrawingClickListener.java index 496d841..fddfd9a 100644 --- a/src/main/org/insa/graphics/drawing/DrawingClickListener.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/DrawingClickListener.java @@ -1,14 +1,14 @@ -package org.insa.graphics.drawing; - -import org.insa.graph.Point; - -public interface DrawingClickListener { - - /** - * Event triggered when a click is made on the map. - * - * @param point Position (on the map) of the mouse click. - */ - public void mouseClicked(Point point); - -} +package org.insa.graphs.gui.drawing; + +import org.insa.graphs.model.Point; + +public interface DrawingClickListener { + + /** + * Event triggered when a click is made on the map. + * + * @param point Position (on the map) of the mouse click. + */ + public void mouseClicked(Point point); + +} diff --git a/src/main/org/insa/graphics/drawing/GraphPalette.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/GraphPalette.java similarity index 85% rename from src/main/org/insa/graphics/drawing/GraphPalette.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/GraphPalette.java index 78a2d1e..00af58d 100644 --- a/src/main/org/insa/graphics/drawing/GraphPalette.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/GraphPalette.java @@ -1,8 +1,8 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; import java.awt.Color; -import org.insa.graph.Arc; +import org.insa.graphs.model.Arc; public interface GraphPalette { diff --git a/src/main/org/insa/graphics/drawing/MercatorProjection.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/MercatorProjection.java similarity index 97% rename from src/main/org/insa/graphics/drawing/MercatorProjection.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/MercatorProjection.java index e393507..374c20d 100644 --- a/src/main/org/insa/graphics/drawing/MercatorProjection.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/MercatorProjection.java @@ -1,8 +1,8 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; import java.awt.Dimension; -import org.insa.graph.GraphStatistics.BoundingBox; +import org.insa.graphs.model.GraphStatistics.BoundingBox; public class MercatorProjection implements Projection { diff --git a/src/main/org/insa/graphics/drawing/PlateCarreProjection.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/PlateCarreProjection.java similarity index 95% rename from src/main/org/insa/graphics/drawing/PlateCarreProjection.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/PlateCarreProjection.java index bd3b9dd..0b15490 100644 --- a/src/main/org/insa/graphics/drawing/PlateCarreProjection.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/PlateCarreProjection.java @@ -1,6 +1,6 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; -import org.insa.graph.GraphStatistics.BoundingBox; +import org.insa.graphs.model.GraphStatistics.BoundingBox; public class PlateCarreProjection implements Projection { diff --git a/src/main/org/insa/graphics/drawing/Projection.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/Projection.java similarity index 97% rename from src/main/org/insa/graphics/drawing/Projection.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/Projection.java index 078991a..f05dd9c 100644 --- a/src/main/org/insa/graphics/drawing/Projection.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/Projection.java @@ -1,4 +1,4 @@ -package org.insa.graphics.drawing; +package org.insa.graphs.gui.drawing; public interface Projection { diff --git a/src/main/org/insa/graphics/drawing/components/BasicDrawing.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/components/BasicDrawing.java similarity index 96% rename from src/main/org/insa/graphics/drawing/components/BasicDrawing.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/components/BasicDrawing.java index 200665f..6d51a05 100644 --- a/src/main/org/insa/graphics/drawing/components/BasicDrawing.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/components/BasicDrawing.java @@ -1,4 +1,4 @@ -package org.insa.graphics.drawing.components; +package org.insa.graphs.gui.drawing.components; import java.awt.BasicStroke; import java.awt.Color; @@ -20,24 +20,24 @@ import java.util.List; import javax.swing.JPanel; -import org.insa.graph.Arc; -import org.insa.graph.Graph; -import org.insa.graph.GraphStatistics.BoundingBox; -import org.insa.graph.Node; -import org.insa.graph.Path; -import org.insa.graph.Point; -import org.insa.graphics.drawing.BasicGraphPalette; -import org.insa.graphics.drawing.Drawing; -import org.insa.graphics.drawing.DrawingClickListener; -import org.insa.graphics.drawing.GraphPalette; -import org.insa.graphics.drawing.MercatorProjection; -import org.insa.graphics.drawing.PlateCarreProjection; -import org.insa.graphics.drawing.Projection; -import org.insa.graphics.drawing.overlays.MarkerOverlay; -import org.insa.graphics.drawing.overlays.MarkerUtils; -import org.insa.graphics.drawing.overlays.Overlay; -import org.insa.graphics.drawing.overlays.PathOverlay; -import org.insa.graphics.drawing.overlays.PointSetOverlay; +import org.insa.graphs.gui.drawing.BasicGraphPalette; +import org.insa.graphs.gui.drawing.Drawing; +import org.insa.graphs.gui.drawing.DrawingClickListener; +import org.insa.graphs.gui.drawing.GraphPalette; +import org.insa.graphs.gui.drawing.MercatorProjection; +import org.insa.graphs.gui.drawing.PlateCarreProjection; +import org.insa.graphs.gui.drawing.Projection; +import org.insa.graphs.gui.drawing.overlays.MarkerOverlay; +import org.insa.graphs.gui.drawing.overlays.MarkerUtils; +import org.insa.graphs.gui.drawing.overlays.Overlay; +import org.insa.graphs.gui.drawing.overlays.PathOverlay; +import org.insa.graphs.gui.drawing.overlays.PointSetOverlay; +import org.insa.graphs.model.Arc; +import org.insa.graphs.model.Graph; +import org.insa.graphs.model.Node; +import org.insa.graphs.model.Path; +import org.insa.graphs.model.Point; +import org.insa.graphs.model.GraphStatistics.BoundingBox; /** * diff --git a/src/main/org/insa/graphics/drawing/components/MapViewDrawing.java b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/components/MapViewDrawing.java similarity index 82% rename from src/main/org/insa/graphics/drawing/components/MapViewDrawing.java rename to be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/components/MapViewDrawing.java index d28aa4f..604a6db 100644 --- a/src/main/org/insa/graphics/drawing/components/MapViewDrawing.java +++ b/be-graphes-gui/src/main/java/org/insa/graphs/gui/drawing/components/MapViewDrawing.java @@ -1,465 +1,521 @@ -package org.insa.graphics.drawing.components; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.UUID; - -import org.insa.graph.Arc; -import org.insa.graph.Graph; -import org.insa.graph.Path; -import org.insa.graph.Point; -import org.insa.graphics.drawing.Drawing; -import org.insa.graphics.drawing.DrawingClickListener; -import org.insa.graphics.drawing.GraphPalette; -import org.insa.graphics.drawing.overlays.MarkerAutoScaling; -import org.insa.graphics.drawing.overlays.MarkerOverlay; -import org.insa.graphics.drawing.overlays.MarkerUtils; -import org.insa.graphics.drawing.overlays.Overlay; -import org.insa.graphics.drawing.overlays.PathOverlay; -import org.insa.graphics.drawing.overlays.PointSetOverlay; -import org.insa.graphics.drawing.overlays.PolylineAutoScaling; -import org.mapsforge.core.graphics.GraphicFactory; -import org.mapsforge.core.model.BoundingBox; -import org.mapsforge.core.model.LatLong; -import org.mapsforge.core.model.MapPosition; -import org.mapsforge.core.util.LatLongUtils; -import org.mapsforge.core.util.Parameters; -import org.mapsforge.map.awt.graphics.AwtGraphicFactory; -import org.mapsforge.map.awt.util.AwtUtil; -import org.mapsforge.map.awt.view.MapView; -import org.mapsforge.map.datastore.MapDataStore; -import org.mapsforge.map.layer.Layer; -import org.mapsforge.map.layer.Layers; -import org.mapsforge.map.layer.cache.TileCache; -import org.mapsforge.map.layer.hills.HillsRenderConfig; -import org.mapsforge.map.layer.overlay.Marker; -import org.mapsforge.map.layer.renderer.TileRendererLayer; -import org.mapsforge.map.model.DisplayModel; -import org.mapsforge.map.model.MapViewPosition; -import org.mapsforge.map.model.Model; -import org.mapsforge.map.reader.MapFile; -import org.mapsforge.map.rendertheme.InternalRenderTheme; - -/** - * - */ -public class MapViewDrawing extends MapView implements Drawing { - - /** - * - */ - private static final long serialVersionUID = 8606967833704938092L; - - /** - * Base Overlay for MapViewDrawing overlays. - * - */ - private abstract class MapViewOverlay implements Overlay { - - // Marker associated. - protected Layer[] layers; - - // Current color - protected Color color; - - public MapViewOverlay(Layer[] layers, Color color) { - this.layers = layers; - for (Layer layer: this.layers) { - MapViewDrawing.this.getLayerManager().getLayers().add(layer); - } - this.color = color; - } - - @Override - public void setColor(Color color) { - this.color = color; - } - - @Override - public Color getColor() { - return this.color; - } - - @Override - public void setVisible(boolean visible) { - for (Layer layer: layers) { - layer.setVisible(visible); - } - } - - @Override - public boolean isVisible() { - if (this.layers.length == 0) { - return true; - } - return this.layers[0].isVisible(); - } - - @Override - public void delete() { - Layers mlayers = MapViewDrawing.this.getLayerManager().getLayers(); - for (Layer layer: layers) { - mlayers.remove(layer); - } - } - - @Override - public void redraw() { - MapViewDrawing.this.getLayerManager().redrawLayers(); - } - }; - - /** - * MarkerOverlay for MapViewDrawing. - * - */ - private class MapViewMarkerOverlay extends MapViewOverlay implements MarkerOverlay { - - private final AlphaMode alphaMode; - private Color innerColor; - - public MapViewMarkerOverlay(Marker marker, Color outer, Color innerColor, - AlphaMode alphaMode) { - super(new Layer[] { marker }, outer); - this.innerColor = innerColor; - this.alphaMode = alphaMode; - } - - @Override - public Point getPoint() { - Marker marker = (Marker) super.layers[0]; - return new Point((float) marker.getLatLong().getLongitude(), - (float) marker.getLatLong().getLatitude()); - } - - @Override - public void setColor(Color outer) { - this.innerColor = this.innerColor.equals(this.color) ? outer : this.innerColor; - super.setColor(color); - MarkerAutoScaling marker = (MarkerAutoScaling) super.layers[0]; - marker.setImage(MarkerUtils.getMarkerForColor(color, this.innerColor, this.alphaMode)); - } - - @Override - public void moveTo(Point point) { - MarkerAutoScaling marker = (MarkerAutoScaling) this.layers[0]; - this.delete(); - marker = new MarkerAutoScaling(convertPoint(point), marker.getImage()); - this.layers[0] = marker; - MapViewDrawing.this.getLayerManager().getLayers().add(marker); - } - - }; - - /** - * PathOverlay for MapViewDrawing. - * - */ - private class MapViewPathOverlay extends MapViewOverlay implements PathOverlay { - - public MapViewPathOverlay(PolylineAutoScaling path, MarkerAutoScaling origin, - MarkerAutoScaling destination) { - super(new Layer[] { path, origin, destination }, path.getColor()); - } - - public MapViewPathOverlay(PolylineAutoScaling path) { - super(new Layer[] { path }, path.getColor()); - } - - @Override - public void setColor(Color color) { - super.setColor(color); - ((PolylineAutoScaling) this.layers[0]).setColor(color); - ((MarkerAutoScaling) this.layers[1]) - .setImage(MarkerUtils.getMarkerForColor(color, color, AlphaMode.TRANSPARENT)); - ((MarkerAutoScaling) this.layers[2]) - .setImage(MarkerUtils.getMarkerForColor(color, color, AlphaMode.TRANSPARENT)); - } - - } - - /** - * PointSetOverlay for MapViewDrawing - Not currently implemented. - * - */ - private class MapViewPointSetOverlay extends MapViewOverlay implements PointSetOverlay { - - public MapViewPointSetOverlay() { - super(new Layer[0], Color.BLACK); - } - - @Override - public void setWidth(int width) { - } - - @Override - public void setWidthAndColor(int width, Color color) { - setWidth(width); - setColor(color); - } - - @Override - public void addPoint(Point point) { - } - - @Override - public void addPoint(Point point, int width) { - setWidth(width); - addPoint(point); - } - - @Override - public void addPoint(Point point, Color color) { - setColor(color); - addPoint(point); - } - - @Override - public void addPoint(Point point, int width, Color color) { - setWidth(width); - setColor(color); - addPoint(point); - } - - }; - - // Default path color. - public static final Color DEFAULT_PATH_COLOR = new Color(66, 134, 244); - - // Graphic factory. - private static final GraphicFactory GRAPHIC_FACTORY = AwtGraphicFactory.INSTANCE; - - // Default tile size. - private static final int DEFAULT_TILE_SIZE = 512; - - // List of listeners. - private ArrayListdiff --git a/src/main/org/insa/graph/Node.java b/be-graphes-model/src/main/java/org/insa/graphs/model/Node.java similarity index 99% rename from src/main/org/insa/graph/Node.java rename to be-graphes-model/src/main/java/org/insa/graphs/model/Node.java index cb785e7..37f20b0 100644 --- a/src/main/org/insa/graph/Node.java +++ b/be-graphes-model/src/main/java/org/insa/graphs/model/Node.java @@ -1,4 +1,4 @@ -package org.insa.graph; +package org.insa.graphs.model; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/org/insa/graph/Path.java b/be-graphes-model/src/main/java/org/insa/graphs/model/Path.java similarity index 99% rename from src/main/org/insa/graph/Path.java rename to be-graphes-model/src/main/java/org/insa/graphs/model/Path.java index 72c5845..6ebdb73 100644 --- a/src/main/org/insa/graph/Path.java +++ b/be-graphes-model/src/main/java/org/insa/graphs/model/Path.java @@ -1,4 +1,4 @@ -package org.insa.graph; +package org.insa.graphs.model; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/org/insa/graph/Point.java b/be-graphes-model/src/main/java/org/insa/graphs/model/Point.java similarity index 98% rename from src/main/org/insa/graph/Point.java rename to be-graphes-model/src/main/java/org/insa/graphs/model/Point.java index 509c4f9..82c6f57 100644 --- a/src/main/org/insa/graph/Point.java +++ b/be-graphes-model/src/main/java/org/insa/graphs/model/Point.java @@ -1,4 +1,4 @@ -package org.insa.graph; +package org.insa.graphs.model; /** * Class representing a point (position) on Earth. diff --git a/src/main/org/insa/graph/RoadInformation.java b/be-graphes-model/src/main/java/org/insa/graphs/model/RoadInformation.java similarity index 98% rename from src/main/org/insa/graph/RoadInformation.java rename to be-graphes-model/src/main/java/org/insa/graphs/model/RoadInformation.java index 61aed04..f5fa39c 100644 --- a/src/main/org/insa/graph/RoadInformation.java +++ b/be-graphes-model/src/main/java/org/insa/graphs/model/RoadInformation.java @@ -1,4 +1,4 @@ -package org.insa.graph; +package org.insa.graphs.model; /** *
diff --git a/src/main/org/insa/graph/io/BadFormatException.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BadFormatException.java
similarity index 59%
rename from src/main/org/insa/graph/io/BadFormatException.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BadFormatException.java
index d69b879..184debe 100644
--- a/src/main/org/insa/graph/io/BadFormatException.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BadFormatException.java
@@ -1,4 +1,4 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
import java.io.IOException;
@@ -21,4 +21,13 @@ public class BadFormatException extends IOException {
super();
}
+ /**
+ * Create a new format exception with the given message.
+ *
+ * @param message Message for the exception.
+ */
+ public BadFormatException(String message) {
+ super(message);
+ }
+
}
diff --git a/src/main/org/insa/graph/io/BadMagicNumberException.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BadMagicNumberException.java
similarity index 86%
rename from src/main/org/insa/graph/io/BadMagicNumberException.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BadMagicNumberException.java
index 98209b8..31d9f42 100644
--- a/src/main/org/insa/graph/io/BadMagicNumberException.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BadMagicNumberException.java
@@ -1,4 +1,4 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
/**
* Exception thrown when there is a mismatch between expected and actual magic
@@ -23,7 +23,8 @@ public class BadMagicNumberException extends BadFormatException {
* @param expectedNumber Expected magic number.
*/
public BadMagicNumberException(int actualNumber, int expectedNumber) {
- super();
+ super(String.format("Magic number mismatch, expected %#X, got %#X.", expectedNumber,
+ actualNumber));
this.actualNumber = actualNumber;
this.expectedNumber = expectedNumber;
}
diff --git a/src/main/org/insa/graph/io/BadVersionException.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BadVersionException.java
similarity index 96%
rename from src/main/org/insa/graph/io/BadVersionException.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BadVersionException.java
index a8dead3..892f534 100644
--- a/src/main/org/insa/graph/io/BadVersionException.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BadVersionException.java
@@ -1,4 +1,4 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
/**
* Exception thrown when the version of the file is not at least the expected
diff --git a/src/main/org/insa/graph/io/BinaryGraphReader.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryGraphReader.java
similarity index 95%
rename from src/main/org/insa/graph/io/BinaryGraphReader.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryGraphReader.java
index c132a40..720f54f 100644
--- a/src/main/org/insa/graph/io/BinaryGraphReader.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryGraphReader.java
@@ -1,4 +1,4 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
import java.io.DataInputStream;
import java.io.IOException;
@@ -6,17 +6,17 @@ import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
-import org.insa.graph.AccessRestrictions;
-import org.insa.graph.AccessRestrictions.AccessMode;
-import org.insa.graph.AccessRestrictions.AccessRestriction;
-import org.insa.graph.Arc;
-import org.insa.graph.Graph;
-import org.insa.graph.GraphStatistics;
-import org.insa.graph.GraphStatistics.BoundingBox;
-import org.insa.graph.Node;
-import org.insa.graph.Point;
-import org.insa.graph.RoadInformation;
-import org.insa.graph.RoadInformation.RoadType;
+import org.insa.graphs.model.AccessRestrictions;
+import org.insa.graphs.model.Arc;
+import org.insa.graphs.model.Graph;
+import org.insa.graphs.model.GraphStatistics;
+import org.insa.graphs.model.Node;
+import org.insa.graphs.model.Point;
+import org.insa.graphs.model.RoadInformation;
+import org.insa.graphs.model.AccessRestrictions.AccessMode;
+import org.insa.graphs.model.AccessRestrictions.AccessRestriction;
+import org.insa.graphs.model.GraphStatistics.BoundingBox;
+import org.insa.graphs.model.RoadInformation.RoadType;
/**
* Implementation of {@link GraphReader} to read graph in binary format.
diff --git a/src/main/org/insa/graph/io/BinaryPathReader.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryPathReader.java
similarity index 93%
rename from src/main/org/insa/graph/io/BinaryPathReader.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryPathReader.java
index bb3336f..f3351bd 100644
--- a/src/main/org/insa/graph/io/BinaryPathReader.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryPathReader.java
@@ -1,12 +1,12 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.ArrayList;
-import org.insa.graph.Graph;
-import org.insa.graph.Node;
-import org.insa.graph.Path;
+import org.insa.graphs.model.Graph;
+import org.insa.graphs.model.Node;
+import org.insa.graphs.model.Path;
/**
* Implementation of {@link PathReader} to read paths in binary format.
diff --git a/src/main/org/insa/graph/io/BinaryPathWriter.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryPathWriter.java
similarity index 92%
rename from src/main/org/insa/graph/io/BinaryPathWriter.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryPathWriter.java
index 8883afc..1eb778c 100644
--- a/src/main/org/insa/graph/io/BinaryPathWriter.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryPathWriter.java
@@ -1,11 +1,11 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Arrays;
-import org.insa.graph.Arc;
-import org.insa.graph.Path;
+import org.insa.graphs.model.Arc;
+import org.insa.graphs.model.Path;
/**
* Implementation of {@link PathWriter} to write paths in binary format.
diff --git a/src/main/org/insa/graph/io/BinaryReader.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryReader.java
similarity index 90%
rename from src/main/org/insa/graph/io/BinaryReader.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryReader.java
index 4084359..b654bad 100644
--- a/src/main/org/insa/graph/io/BinaryReader.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryReader.java
@@ -1,5 +1,6 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
+import java.io.Closeable;
import java.io.DataInputStream;
import java.io.IOException;
@@ -7,15 +8,15 @@ import java.io.IOException;
* Base class for writing binary file.
*
*/
-public abstract class BinaryReader {
+public abstract class BinaryReader implements AutoCloseable, Closeable {
// Map version and magic number targeted for this reader.
- private int minVersion;
+ private final int minVersion;
private int curVersion;
- private int magicNumber;
+ private final int magicNumber;
// InputStream
- protected DataInputStream dis;
+ protected final DataInputStream dis;
/**
* Create a new BinaryReader that reads from the given stream and that expected
@@ -31,6 +32,11 @@ public abstract class BinaryReader {
this.dis = dis;
}
+ @Override
+ public void close() throws IOException {
+ this.dis.close();
+ }
+
/**
* Check if the given version is greater than the minimum version, and update
* the current version if it is.
@@ -38,7 +44,7 @@ public abstract class BinaryReader {
* @param version Version to check.
*
* @throws BadVersionException if the given version is not greater than the
- * minimum version.
+ * minimum version.
*/
protected void checkVersionOrThrow(int version) throws BadVersionException {
if (version < this.minVersion) {
diff --git a/src/main/org/insa/graph/io/BinaryWriter.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryWriter.java
similarity index 72%
rename from src/main/org/insa/graph/io/BinaryWriter.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryWriter.java
index a6a263f..34cad06 100644
--- a/src/main/org/insa/graph/io/BinaryWriter.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/BinaryWriter.java
@@ -1,5 +1,6 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
+import java.io.Closeable;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -7,10 +8,10 @@ import java.io.IOException;
* Base class for writing binary file.
*
*/
-public abstract class BinaryWriter {
+public abstract class BinaryWriter implements AutoCloseable, Closeable {
// Output stream.
- protected DataOutputStream dos;
+ protected final DataOutputStream dos;
/**
* Create a new BinaryWriter that writes to the given output stream.
@@ -21,6 +22,11 @@ public abstract class BinaryWriter {
this.dos = dos;
}
+ @Override
+ public void close() throws IOException {
+ this.dos.close();
+ }
+
/**
* Write a 24-bits integer in BigEndian order to the output stream.
*
diff --git a/be-graphes-model/src/main/java/org/insa/graphs/model/io/GraphReader.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/GraphReader.java
new file mode 100644
index 0000000..29ed437
--- /dev/null
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/GraphReader.java
@@ -0,0 +1,39 @@
+package org.insa.graphs.model.io;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import org.insa.graphs.model.Graph;
+
+/**
+ * Base interface for classes that can read graph.
+ *
+ */
+public interface GraphReader extends AutoCloseable, Closeable {
+
+ /**
+ * Add a new observer to this graph reader.
+ *
+ * @param observer Observer to add.
+ */
+ public void addObserver(GraphReaderObserver observer);
+
+ /**
+ * Read a graph an returns it.
+ *
+ * @return The graph read.
+ *
+ * @throws IOException if an exception occurs while reading the graph.
+ *
+ */
+ public Graph read() throws IOException;
+
+ /**
+ * Close this graph reader.
+ *
+ * @throws IOException if an exception occurs while closing the reader.
+ *
+ */
+ public void close() throws IOException;
+
+}
diff --git a/src/main/org/insa/graph/io/GraphReaderObserver.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/GraphReaderObserver.java
similarity index 91%
rename from src/main/org/insa/graph/io/GraphReaderObserver.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/GraphReaderObserver.java
index 3ff65a8..4f25835 100644
--- a/src/main/org/insa/graph/io/GraphReaderObserver.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/GraphReaderObserver.java
@@ -1,8 +1,8 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
-import org.insa.graph.Arc;
-import org.insa.graph.Node;
-import org.insa.graph.RoadInformation;
+import org.insa.graphs.model.Arc;
+import org.insa.graphs.model.Node;
+import org.insa.graphs.model.RoadInformation;
/**
* Base interface that should be implemented by classes that want to observe the
diff --git a/src/main/org/insa/graph/io/MapMismatchException.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/MapMismatchException.java
similarity index 96%
rename from src/main/org/insa/graph/io/MapMismatchException.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/MapMismatchException.java
index fca9f70..fb2de3b 100644
--- a/src/main/org/insa/graph/io/MapMismatchException.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/MapMismatchException.java
@@ -1,4 +1,4 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
import java.io.IOException;
diff --git a/src/main/org/insa/graph/io/PathReader.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/PathReader.java
similarity index 51%
rename from src/main/org/insa/graph/io/PathReader.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/PathReader.java
index b1836b9..e14a5a2 100644
--- a/src/main/org/insa/graph/io/PathReader.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/PathReader.java
@@ -1,15 +1,16 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
+import java.io.Closeable;
import java.io.IOException;
-import org.insa.graph.Graph;
-import org.insa.graph.Path;
+import org.insa.graphs.model.Graph;
+import org.insa.graphs.model.Path;
/**
* Base interface that should be implemented by class used to read paths.
*
*/
-public interface PathReader {
+public interface PathReader extends AutoCloseable, Closeable {
/**
* Read a path of the given graph and returns it.
@@ -22,4 +23,12 @@ public interface PathReader {
*/
public Path readPath(Graph graph) throws IOException;
+ /**
+ * Close this graph reader.
+ *
+ * @throws IOException if an exception occurs while closing the reader.
+ *
+ */
+ public void close() throws IOException;
+
}
diff --git a/src/main/org/insa/graph/io/PathWriter.java b/be-graphes-model/src/main/java/org/insa/graphs/model/io/PathWriter.java
similarity index 50%
rename from src/main/org/insa/graph/io/PathWriter.java
rename to be-graphes-model/src/main/java/org/insa/graphs/model/io/PathWriter.java
index 098fcab..b261763 100644
--- a/src/main/org/insa/graph/io/PathWriter.java
+++ b/be-graphes-model/src/main/java/org/insa/graphs/model/io/PathWriter.java
@@ -1,14 +1,15 @@
-package org.insa.graph.io;
+package org.insa.graphs.model.io;
+import java.io.Closeable;
import java.io.IOException;
-import org.insa.graph.Path;
+import org.insa.graphs.model.Path;
/**
* Base interface that should be implemented by class used to write paths.
*
*/
-public interface PathWriter {
+public interface PathWriter extends AutoCloseable, Closeable {
/**
* Write the given path.
@@ -19,4 +20,12 @@ public interface PathWriter {
*/
public void writePath(Path path) throws IOException;
+ /**
+ * Close this graph reader.
+ *
+ * @throws IOException if an exception occurs while closing the reader.
+ *
+ */
+ public void close() throws IOException;
+
}
diff --git a/src/test/org/insa/graph/GraphTest.java b/be-graphes-model/src/test/java/org/insa/graphes/model/GraphTest.java
similarity index 95%
rename from src/test/org/insa/graph/GraphTest.java
rename to be-graphes-model/src/test/java/org/insa/graphes/model/GraphTest.java
index 3fa3765..f9333b9 100644
--- a/src/test/org/insa/graph/GraphTest.java
+++ b/be-graphes-model/src/test/java/org/insa/graphes/model/GraphTest.java
@@ -1,4 +1,4 @@
-package org.insa.graph;
+package org.insa.graphes.model;
import static org.junit.Assert.assertEquals;
@@ -7,7 +7,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import org.insa.graph.RoadInformation.RoadType;
+import org.insa.graphs.model.Arc;
+import org.insa.graphs.model.Graph;
+import org.insa.graphs.model.Node;
+import org.insa.graphs.model.RoadInformation;
+import org.insa.graphs.model.RoadInformation.RoadType;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/src/test/org/insa/graph/NodeTest.java b/be-graphes-model/src/test/java/org/insa/graphes/model/NodeTest.java
similarity index 93%
rename from src/test/org/insa/graph/NodeTest.java
rename to be-graphes-model/src/test/java/org/insa/graphes/model/NodeTest.java
index 242a43f..057c5d5 100644
--- a/src/test/org/insa/graph/NodeTest.java
+++ b/be-graphes-model/src/test/java/org/insa/graphes/model/NodeTest.java
@@ -1,11 +1,14 @@
-package org.insa.graph;
+package org.insa.graphes.model;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.ArrayList;
-import org.insa.graph.RoadInformation.RoadType;
+import org.insa.graphs.model.Arc;
+import org.insa.graphs.model.Node;
+import org.insa.graphs.model.RoadInformation;
+import org.insa.graphs.model.RoadInformation.RoadType;
import org.junit.Before;
import org.junit.Test;
diff --git a/src/test/org/insa/graph/PathTest.java b/be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java
similarity index 97%
rename from src/test/org/insa/graph/PathTest.java
rename to be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java
index 55dd4fa..fbef0f3 100644
--- a/src/test/org/insa/graph/PathTest.java
+++ b/be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java
@@ -1,4 +1,4 @@
-package org.insa.graph;
+package org.insa.graphes.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -8,7 +8,12 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import org.insa.graph.RoadInformation.RoadType;
+import org.insa.graphs.model.Arc;
+import org.insa.graphs.model.Graph;
+import org.insa.graphs.model.Node;
+import org.insa.graphs.model.Path;
+import org.insa.graphs.model.RoadInformation;
+import org.insa.graphs.model.RoadInformation.RoadType;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/libs/kxml2-2.3.0.jar b/libs/kxml2-2.3.0.jar
deleted file mode 100644
index 6470952..0000000
Binary files a/libs/kxml2-2.3.0.jar and /dev/null differ
diff --git a/libs/mapsforge-core-0.9.1-javadoc.jar b/libs/mapsforge-core-0.9.1-javadoc.jar
deleted file mode 100644
index a2a3d4f..0000000
Binary files a/libs/mapsforge-core-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-core-0.9.1.jar b/libs/mapsforge-core-0.9.1.jar
deleted file mode 100644
index 23125a4..0000000
Binary files a/libs/mapsforge-core-0.9.1.jar and /dev/null differ
diff --git a/libs/mapsforge-map-0.9.1-javadoc.jar b/libs/mapsforge-map-0.9.1-javadoc.jar
deleted file mode 100644
index 5fe05e1..0000000
Binary files a/libs/mapsforge-map-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-map-0.9.1.jar b/libs/mapsforge-map-0.9.1.jar
deleted file mode 100644
index abb4f89..0000000
Binary files a/libs/mapsforge-map-0.9.1.jar and /dev/null differ
diff --git a/libs/mapsforge-map-awt-0.9.1-javadoc.jar b/libs/mapsforge-map-awt-0.9.1-javadoc.jar
deleted file mode 100644
index 5f01eaa..0000000
Binary files a/libs/mapsforge-map-awt-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-map-awt-0.9.1.jar b/libs/mapsforge-map-awt-0.9.1.jar
deleted file mode 100644
index 169c154..0000000
Binary files a/libs/mapsforge-map-awt-0.9.1.jar and /dev/null differ
diff --git a/libs/mapsforge-map-reader-0.9.1-javadoc.jar b/libs/mapsforge-map-reader-0.9.1-javadoc.jar
deleted file mode 100644
index 783bb46..0000000
Binary files a/libs/mapsforge-map-reader-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-map-reader-0.9.1.jar b/libs/mapsforge-map-reader-0.9.1.jar
deleted file mode 100644
index 51ad11d..0000000
Binary files a/libs/mapsforge-map-reader-0.9.1.jar and /dev/null differ
diff --git a/libs/mapsforge-poi-0.9.1-javadoc.jar b/libs/mapsforge-poi-0.9.1-javadoc.jar
deleted file mode 100644
index 0d23e5d..0000000
Binary files a/libs/mapsforge-poi-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-poi-0.9.1.jar b/libs/mapsforge-poi-0.9.1.jar
deleted file mode 100644
index d778de4..0000000
Binary files a/libs/mapsforge-poi-0.9.1.jar and /dev/null differ
diff --git a/libs/mapsforge-poi-awt-0.9.1-javadoc.jar b/libs/mapsforge-poi-awt-0.9.1-javadoc.jar
deleted file mode 100644
index 3c6a872..0000000
Binary files a/libs/mapsforge-poi-awt-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-poi-awt-0.9.1.jar b/libs/mapsforge-poi-awt-0.9.1.jar
deleted file mode 100644
index 14e1b89..0000000
Binary files a/libs/mapsforge-poi-awt-0.9.1.jar and /dev/null differ
diff --git a/libs/mapsforge-themes-0.9.1-javadoc.jar b/libs/mapsforge-themes-0.9.1-javadoc.jar
deleted file mode 100644
index b40c7e5..0000000
Binary files a/libs/mapsforge-themes-0.9.1-javadoc.jar and /dev/null differ
diff --git a/libs/mapsforge-themes-0.9.1.jar b/libs/mapsforge-themes-0.9.1.jar
deleted file mode 100644
index e91f12b..0000000
Binary files a/libs/mapsforge-themes-0.9.1.jar and /dev/null differ
diff --git a/libs/svg-salamander-1.0-javadoc.jar b/libs/svg-salamander-1.0-javadoc.jar
deleted file mode 100644
index e136ad8..0000000
Binary files a/libs/svg-salamander-1.0-javadoc.jar and /dev/null differ
diff --git a/libs/svg-salamander-1.0.jar b/libs/svg-salamander-1.0.jar
deleted file mode 100644
index 200eeb0..0000000
Binary files a/libs/svg-salamander-1.0.jar and /dev/null differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0c02ef4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,48 @@
+
+