From d00e012497368a132d8ede7e91095dc63263ec15 Mon Sep 17 00:00:00 2001 From: Holt59 Date: Sat, 24 Feb 2018 21:02:04 +0100 Subject: [PATCH] Enforce immutability via final and unmodifiableList. --- .../WeaklyConnectedComponentsAlgorithm.java | 284 +++++++++--------- src/main/org/insa/graph/Arc.java | 163 +++++----- src/main/org/insa/graph/Graph.java | 108 +++---- src/main/org/insa/graph/Node.java | 120 ++++---- src/main/org/insa/graph/Point.java | 114 +++---- src/main/org/insa/graph/RoadInformation.java | 134 ++++----- .../insa/graphics/drawing/BasicDrawing.java | 12 +- .../drawing/utils/PolylineAutoScaling.java | 4 +- .../insa/graph/io/BinaryGraphReaderTest.java | 63 ++-- 9 files changed, 504 insertions(+), 498 deletions(-) diff --git a/src/main/org/insa/algo/weakconnectivity/WeaklyConnectedComponentsAlgorithm.java b/src/main/org/insa/algo/weakconnectivity/WeaklyConnectedComponentsAlgorithm.java index 2227e2c..061f37d 100644 --- a/src/main/org/insa/algo/weakconnectivity/WeaklyConnectedComponentsAlgorithm.java +++ b/src/main/org/insa/algo/weakconnectivity/WeaklyConnectedComponentsAlgorithm.java @@ -2,9 +2,10 @@ package org.insa.algo.weakconnectivity; import java.util.ArrayList; import java.util.Arrays; -import java.util.LinkedList; -import java.util.Queue; import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; import org.insa.algo.AbstractAlgorithm; import org.insa.algo.AbstractSolution.Status; @@ -12,146 +13,149 @@ import org.insa.graph.Arc; import org.insa.graph.Graph; import org.insa.graph.Node; -public class WeaklyConnectedComponentsAlgorithm extends AbstractAlgorithm{ +public class WeaklyConnectedComponentsAlgorithm extends AbstractAlgorithm { - /** - * - * @param instance - * @param logOutput - */ - public WeaklyConnectedComponentsAlgorithm(WeaklyConnectedComponentsData instance) { - super(instance); - } - - @Override - public WeaklyConnectedComponentsSolution run() { - return (WeaklyConnectedComponentsSolution)super.run(); - } - - @Override - public WeaklyConnectedComponentsData getInstance() { - return (WeaklyConnectedComponentsData)super.getInstance(); - } - - /** - * Notify all observers that the algorithm is entering a new component. - * - * @param curNode Starting node for the component. - */ - protected void notifyStartComponent(Node curNode) { - for (WeaklyConnectedComponentObserver obs: getObservers()) { - obs.notifyStartComponent(curNode); - } - } - - /** - * Notify all observers that a new node has been found for the current component. - * - * @param node New node found for the current component. - */ - protected void notifyNewNodeInComponent(Node node) { - for (WeaklyConnectedComponentObserver obs: getObservers()) { - obs.notifyNewNodeInComponent(node); - } - } - - /** - * Notify all observers that the algorithm has computed a new component. - * - * @param nodes List of nodes in the component. - */ - protected void notifyEndComponent(ArrayList nodes) { - for (WeaklyConnectedComponentObserver obs: getObservers()) { - obs.notifyEndComponent(nodes); - } - } - - /** - * @return An adjacency list for the undirected graph equivalent to the stored graph. - */ - protected ArrayList> createUndirectedGraph() { - int nNodes = getInstance().getGraph().getNodes().size(); - ArrayList> res = new ArrayList>(nNodes); - for (int i = 0; i < nNodes; ++i) { - res.add(new HashSet()); - } - - for (Node node: getInstance().getGraph().getNodes()) { - for (Arc arc: node.getSuccessors()) { - res.get(node.getId()).add(arc.getDestination().getId()); - if (arc.getInfo().isOneWay()) { - res.get(arc.getDestination().getId()).add(node.getId()); - } - } - } - - return res; - } - - /** - * Apply a breadth first search algorithm on the given undirected graph (adjacency list), - * starting at node cur, and marking nodes in marked. - * - * @param marked - * @param cur - * - * @return - */ - protected ArrayList bfs(ArrayList> ugraph, boolean[] marked, int cur) { - ArrayList nodes = getInstance().getGraph().getNodes(); - ArrayList component = new ArrayList(); - - // Using a queue because we are doing a BFS - Queue queue = new LinkedList(); + /** + * + * @param instance + * @param logOutput + */ + public WeaklyConnectedComponentsAlgorithm(WeaklyConnectedComponentsData instance) { + super(instance); + } - // Notify observers about the current component. - notifyStartComponent(nodes.get(cur)); - - // Add original node and loop until the queue is empty. - queue.add(cur); - marked[cur] = true; - while (!queue.isEmpty()) { - Node node = nodes.get(queue.remove()); - component.add(node); - - // Notify observers - notifyNewNodeInComponent(node); - - for (Integer destId: ugraph.get(node.getId())) { - Node dest = nodes.get(destId); - if (!marked[dest.getId()]) { - queue.add(destId); - marked[destId] = true; - } - } - } - - notifyEndComponent(component); - - return component; - } + @Override + public WeaklyConnectedComponentsSolution run() { + return (WeaklyConnectedComponentsSolution) super.run(); + } - @Override - protected WeaklyConnectedComponentsSolution doRun() { - - Graph graph = getInstance().getGraph(); - ArrayList> ugraph = createUndirectedGraph(); - boolean[] marked = new boolean[graph.getNodes().size()]; - Arrays.fill(marked, false); - - ArrayList> components = new ArrayList>(); - - // perform algorithm - int cur = 0; - while (cur < marked.length) { - // Apply BFS - components.add(this.bfs(ugraph, marked, cur)); - - // Find next non-marked - for (; cur < marked.length && marked[cur]; ++cur); - } - - return new WeaklyConnectedComponentsSolution(getInstance(), Status.OPTIMAL, components); - } + @Override + public WeaklyConnectedComponentsData getInstance() { + return (WeaklyConnectedComponentsData) super.getInstance(); + } + + /** + * Notify all observers that the algorithm is entering a new component. + * + * @param curNode Starting node for the component. + */ + protected void notifyStartComponent(Node curNode) { + for (WeaklyConnectedComponentObserver obs: getObservers()) { + obs.notifyStartComponent(curNode); + } + } + + /** + * Notify all observers that a new node has been found for the current + * component. + * + * @param node New node found for the current component. + */ + protected void notifyNewNodeInComponent(Node node) { + for (WeaklyConnectedComponentObserver obs: getObservers()) { + obs.notifyNewNodeInComponent(node); + } + } + + /** + * Notify all observers that the algorithm has computed a new component. + * + * @param nodes List of nodes in the component. + */ + protected void notifyEndComponent(ArrayList nodes) { + for (WeaklyConnectedComponentObserver obs: getObservers()) { + obs.notifyEndComponent(nodes); + } + } + + /** + * @return An adjacency list for the undirected graph equivalent to the stored + * graph. + */ + protected ArrayList> createUndirectedGraph() { + int nNodes = getInstance().getGraph().getNodes().size(); + ArrayList> res = new ArrayList>(nNodes); + for (int i = 0; i < nNodes; ++i) { + res.add(new HashSet()); + } + + for (Node node: getInstance().getGraph().getNodes()) { + for (Arc arc: node.getSuccessors()) { + res.get(node.getId()).add(arc.getDestination().getId()); + if (arc.getInfo().isOneWay()) { + res.get(arc.getDestination().getId()).add(node.getId()); + } + } + } + + return res; + } + + /** + * Apply a breadth first search algorithm on the given undirected graph + * (adjacency list), starting at node cur, and marking nodes in marked. + * + * @param marked + * @param cur + * + * @return + */ + protected ArrayList bfs(ArrayList> ugraph, boolean[] marked, int cur) { + List nodes = getInstance().getGraph().getNodes(); + ArrayList component = new ArrayList(); + + // Using a queue because we are doing a BFS + Queue queue = new LinkedList(); + + // Notify observers about the current component. + notifyStartComponent(nodes.get(cur)); + + // Add original node and loop until the queue is empty. + queue.add(cur); + marked[cur] = true; + while (!queue.isEmpty()) { + Node node = nodes.get(queue.remove()); + component.add(node); + + // Notify observers + notifyNewNodeInComponent(node); + + for (Integer destId: ugraph.get(node.getId())) { + Node dest = nodes.get(destId); + if (!marked[dest.getId()]) { + queue.add(destId); + marked[destId] = true; + } + } + } + + notifyEndComponent(component); + + return component; + } + + @Override + protected WeaklyConnectedComponentsSolution doRun() { + + Graph graph = getInstance().getGraph(); + ArrayList> ugraph = createUndirectedGraph(); + boolean[] marked = new boolean[graph.getNodes().size()]; + Arrays.fill(marked, false); + + ArrayList> components = new ArrayList>(); + + // perform algorithm + int cur = 0; + while (cur < marked.length) { + // Apply BFS + components.add(this.bfs(ugraph, marked, cur)); + + // Find next non-marked + for (; cur < marked.length && marked[cur]; ++cur) + ; + } + + return new WeaklyConnectedComponentsSolution(getInstance(), Status.OPTIMAL, components); + } } diff --git a/src/main/org/insa/graph/Arc.java b/src/main/org/insa/graph/Arc.java index 05fb727..f8fe1a9 100644 --- a/src/main/org/insa/graph/Arc.java +++ b/src/main/org/insa/graph/Arc.java @@ -1,92 +1,95 @@ package org.insa.graph; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class Arc { - - // Destination node. - private Node origin, destination; - // Length of the road (in meters). - private int length; - - // Road information. - RoadInformation info; - - // Segments. - ArrayList points; - - /** - * @param dest - * @param length - * @param roadInformation - * @param points - */ - public Arc(Node origin, Node dest, int length, RoadInformation roadInformation) { - this.origin = origin; - this.destination = dest; - this.length = length; - this.info = roadInformation; - this.points = new ArrayList(); - origin.addSuccessor(this); - } + // Destination node. + private final Node origin, destination; - /** - * @param dest - * @param length - * @param roadInformation - * @param points - */ - public Arc(Node origin, Node dest, int length, RoadInformation roadInformation, ArrayList points) { - this.origin = origin; - this.destination = dest; - this.length = length; - this.info = roadInformation; - this.points = points; - origin.addSuccessor(this); - } - - /** - * @return Origin node of this arc. - */ - public Node getOrigin() { - return origin; - } - - /** - * @return Destination node of this arc. - */ - public Node getDestination() { - return destination; - } + // Length of the road (in meters). + private final int length; - /** - * @return Length of this arc, in meters. - */ - public int getLength() { - return length; - } - - /** - * @return Minimum time required to travel this arc, in seconds. - */ - public double getMinimumTravelTime() { - return getLength() * 3600.0 / (info.getMaximumSpeed() * 1000.0); - } + // Road information. + private final RoadInformation info; - /** - * @return Road information for this arc. - */ - public RoadInformation getInfo() { - return info; - } + // Segments. + private final ArrayList points; - /** - * @return Points representing segments of this arc. This function may return an empty - * ArrayList if the segments are stored in the reversed arc (for two-ways road). - */ - public ArrayList getPoints() { - return points; - } + /** + * @param dest + * @param length + * @param roadInformation + * @param points + */ + public Arc(Node origin, Node dest, int length, RoadInformation roadInformation) { + this.origin = origin; + this.destination = dest; + this.length = length; + this.info = roadInformation; + this.points = new ArrayList(); + origin.addSuccessor(this); + } + + /** + * @param dest + * @param length + * @param roadInformation + * @param points + */ + public Arc(Node origin, Node dest, int length, RoadInformation roadInformation, ArrayList points) { + this.origin = origin; + this.destination = dest; + this.length = length; + this.info = roadInformation; + this.points = points; + origin.addSuccessor(this); + } + + /** + * @return Origin node of this arc. + */ + public Node getOrigin() { + return origin; + } + + /** + * @return Destination node of this arc. + */ + public Node getDestination() { + return destination; + } + + /** + * @return Length of this arc, in meters. + */ + public int getLength() { + return length; + } + + /** + * @return Minimum time required to travel this arc, in seconds. + */ + public double getMinimumTravelTime() { + return getLength() * 3600.0 / (info.getMaximumSpeed() * 1000.0); + } + + /** + * @return Road information for this arc. + */ + public RoadInformation getInfo() { + return info; + } + + /** + * @return Points representing segments of this arc. This function may return an + * empty ArrayList if the segments are stored in the reversed arc (for + * two-ways road). + */ + public List getPoints() { + return Collections.unmodifiableList(points); + } } diff --git a/src/main/org/insa/graph/Graph.java b/src/main/org/insa/graph/Graph.java index df7bf3d..8d25713 100644 --- a/src/main/org/insa/graph/Graph.java +++ b/src/main/org/insa/graph/Graph.java @@ -1,60 +1,66 @@ -package org.insa.graph ; +package org.insa.graph; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class Graph { - // Map identifier. - private int mapId; - - // Nodes of the graph. - private ArrayList nodes; + // Map identifier. + private final int mapId; - /** - * @param mapId - * @param nodes - */ - public Graph(int mapId, ArrayList nodes) { - this.mapId = mapId; - this.nodes = nodes; - } - - /** - * @return Nodes of this graph. - */ - public ArrayList getNodes() { return nodes; } - - /** - * Find the closet node to the given point. - * - * @param point - * - * @return Closest node to the given point. - */ - public Node findClosestNode(Point point) { - Node node = null; - double minDis = Double.POSITIVE_INFINITY; - for (int n = 0 ; n < nodes.size(); ++n) { - double dis = point.distanceTo(nodes.get(n).getPoint()); - if (dis < minDis) { - node = nodes.get(n); - minDis = dis; - } + // Nodes of the graph. + private final ArrayList nodes; + + /** + * @param mapId + * @param nodes + */ + public Graph(int mapId, ArrayList nodes) { + this.mapId = mapId; + this.nodes = nodes; + } + + /** + * @return Nodes of this graph. + */ + public List getNodes() { + return Collections.unmodifiableList(nodes); + } + + /** + * Find the closet node to the given point. + * + * @param point + * + * @return Closest node to the given point. + */ + public Node findClosestNode(Point point) { + Node node = null; + double minDis = Double.POSITIVE_INFINITY; + for (int n = 0; n < nodes.size(); ++n) { + double dis = point.distanceTo(nodes.get(n).getPoint()); + if (dis < minDis) { + node = nodes.get(n); + minDis = dis; + } } - return node; - } - - /** - * @return Map ID of this graph. - */ - public int getMapId() { return mapId; } - - /** - * @return Return the transpose graph of this graph. - */ - public Graph transpose() { - // TODO: - return null; - } + return node; + } + + /** + * @return Map ID of this graph. + */ + public int getMapId() { + return mapId; + } + + /** + * @return Return the transpose graph of this graph. + */ + public Graph transpose() { + // TODO: + return null; + } } diff --git a/src/main/org/insa/graph/Node.java b/src/main/org/insa/graph/Node.java index 9c46437..895442c 100644 --- a/src/main/org/insa/graph/Node.java +++ b/src/main/org/insa/graph/Node.java @@ -1,65 +1,73 @@ package org.insa.graph; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class Node implements Comparable { - // ID of the node. - private int id; - - // Point of this graph. - private Point point; - - // Successors. - private ArrayList successors; - - /** - * Create a new Node corresponding to the given Point with - * an empty list of successors. - * - * @param point - */ - public Node(int id, Point point) { - this.id = id; - this.point = point; - this.successors = new ArrayList(); - } + // ID of the node. + private final int id; - /** - * Add a successor to this node. - * - * @param arc Arc to the successor. - */ - protected void addSuccessor(Arc arc) { - successors.add(arc); - } - - /** - * @return ID of this node. - */ - public int getId() { return id; } - - /** - * @return List of successors of this node. - */ - public ArrayList getSuccessors() { return successors; } - - /** - * @return Point of this node. - */ - public Point getPoint() { return point; } - - @Override - public boolean equals(Object other) { - if (other instanceof Node) { - return getId() == ((Node) other).getId(); - } - return false; - } + // Point of this graph. + private final Point point; + + // Successors. + private final ArrayList successors; + + /** + * Create a new Node corresponding to the given Point with an empty list of + * successors. + * + * @param point + */ + public Node(int id, Point point) { + this.id = id; + this.point = point; + this.successors = new ArrayList(); + } + + /** + * Add a successor to this node. + * + * @param arc Arc to the successor. + */ + protected void addSuccessor(Arc arc) { + successors.add(arc); + } + + /** + * @return ID of this node. + */ + public int getId() { + return id; + } + + /** + * @return List of successors of this node. + */ + public List getSuccessors() { + return Collections.unmodifiableList(successors); + } + + /** + * @return Point of this node. + */ + public Point getPoint() { + return point; + } + + @Override + public boolean equals(Object other) { + if (other instanceof Node) { + return getId() == ((Node) other).getId(); + } + return false; + } + + @Override + public int compareTo(Node other) { + return Integer.compare(getId(), other.getId()); + } - @Override - public int compareTo(Node other) { - return Integer.compare(getId(), other.getId()); - } - } diff --git a/src/main/org/insa/graph/Point.java b/src/main/org/insa/graph/Point.java index 8aa353f..e1301eb 100644 --- a/src/main/org/insa/graph/Point.java +++ b/src/main/org/insa/graph/Point.java @@ -5,62 +5,66 @@ package org.insa.graph; * */ public class Point { - - // Earth radius, in meters; - private static final double EARTH_RADIUS = 6378137.0 ; - - /** - * Compute the distance between the two given points. - * - * @param long1 - * @param lat1 - * @param long2 - * @param lat2 - * @return - */ - public static double distance(Point p1, Point p2) { - double sinLat = Math.sin(Math.toRadians(p1.getLatitude()))*Math.sin(Math.toRadians(p2.getLatitude())); - double cosLat = Math.cos(Math.toRadians(p1.getLatitude()))*Math.cos(Math.toRadians(p2.getLatitude())); - double cosLong = Math.cos(Math.toRadians(p2.getLongitude() - p1.getLongitude())); - return EARTH_RADIUS * Math.acos(sinLat+cosLat*cosLong); - } - // Longitude and latitude of the point. - private double longitude, latitude; - - /** - * - * @param longitude Longitude of the point, in degrees. - * @param latitude Latitude of the point, in degrees. - */ - public Point(double longitude, double latitude) { - this.longitude = longitude; - this.latitude = latitude; - } - - /** - * @return Longitude of this point (in degrees). - */ - public double getLongitude() { return longitude; } - - /** - * @return Latitude of this point (in degrees). - */ - public double getLatitude() { return latitude; } + // Earth radius, in meters; + private static final double EARTH_RADIUS = 6378137.0; - /** - * Compute the distance from this point to the given point - * - * @param target Target point. - * - * @return Distane between this point and the target point, in meters. - */ - public double distanceTo(Point target) { - return distance(this, target); - } + /** + * Compute the distance between the two given points. + * + * @param long1 + * @param lat1 + * @param long2 + * @param lat2 + * @return + */ + public static double distance(Point p1, Point p2) { + double sinLat = Math.sin(Math.toRadians(p1.getLatitude())) * Math.sin(Math.toRadians(p2.getLatitude())); + double cosLat = Math.cos(Math.toRadians(p1.getLatitude())) * Math.cos(Math.toRadians(p2.getLatitude())); + double cosLong = Math.cos(Math.toRadians(p2.getLongitude() - p1.getLongitude())); + return EARTH_RADIUS * Math.acos(sinLat + cosLat * cosLong); + } - @Override - public String toString() { - return String.format("Point(%f, %f)", getLongitude(), getLatitude()); - } + // Longitude and latitude of the point. + private final double longitude, latitude; + + /** + * + * @param longitude Longitude of the point, in degrees. + * @param latitude Latitude of the point, in degrees. + */ + public Point(double longitude, double latitude) { + this.longitude = longitude; + this.latitude = latitude; + } + + /** + * @return Longitude of this point (in degrees). + */ + public double getLongitude() { + return longitude; + } + + /** + * @return Latitude of this point (in degrees). + */ + public double getLatitude() { + return latitude; + } + + /** + * Compute the distance from this point to the given point + * + * @param target Target point. + * + * @return Distane between this point and the target point, in meters. + */ + public double distanceTo(Point target) { + return distance(this, target); + } + + @Override + public String toString() { + return String.format("Point(%f, %f)", getLongitude(), getLatitude()); + } } diff --git a/src/main/org/insa/graph/RoadInformation.java b/src/main/org/insa/graph/RoadInformation.java index 536bd68..580c2ff 100644 --- a/src/main/org/insa/graph/RoadInformation.java +++ b/src/main/org/insa/graph/RoadInformation.java @@ -1,85 +1,75 @@ -package org.insa.graph ; +package org.insa.graph; /** - * Class containing information for road that may be shared - * by multiple arcs. + * Class containing information for road that may be shared by multiple arcs. * */ public class RoadInformation { - - /** - * Road type. - */ - public enum RoadType { - MOTORWAY, - TRUNK, - PRIMARY, - SECONDARY, - MOTORWAY_LINK, - TRUNK_LINK, - PRIMARY_LINK, - SECONDARY_LINK, - TERTIARY, - RESIDENTIAL, - UNCLASSIFIED, - ROAD, - LIVING_STREET, - SERVICE, - ROUNDABOUT, - COASTLINE - } - // Type of the road (see above). - private RoadType type; + /** + * Road type. + */ + public enum RoadType { + MOTORWAY, TRUNK, PRIMARY, SECONDARY, MOTORWAY_LINK, TRUNK_LINK, PRIMARY_LINK, SECONDARY_LINK, TERTIARY, RESIDENTIAL, UNCLASSIFIED, ROAD, LIVING_STREET, SERVICE, ROUNDABOUT, COASTLINE + } - // One way road? - private boolean oneway; + // Type of the road (see above). + private final RoadType type; - // Max speed in kilometers per hour. - private int maxSpeed; + // One way road? + private final boolean oneway; - // Name of the road. - private String name; + // Max speed in kilometers per hour. + private final int maxSpeed; - public RoadInformation(RoadType roadType, boolean isOneWay, int maxSpeed, String name) { - this.type = roadType; - this.oneway = isOneWay; - this.maxSpeed = maxSpeed; - this.name = name; - } - - /** - * @return Type of the road. - */ - public RoadType getType() { return type; } - - /** - * @return true if this is a one-way road. - */ - public boolean isOneWay() { return oneway; } - - /** - * @return Maximum speed for this road (in km/h). - */ - public int getMaximumSpeed() { return maxSpeed; } - - /** - * @return Name of the road. - */ - public String getName() { return name; } + // Name of the road. + private final String name; - @Override - public String toString() { - String typeAsString = "road"; - if (getType() == RoadType.COASTLINE) { - typeAsString = "coast"; - } - if (getType() == RoadType.MOTORWAY) { - typeAsString = "highway"; - } - return typeAsString + " : " + getName() - + " " + (isOneWay() ? " (oneway) " : "") - + maxSpeed + " km/h (max.)"; - } + public RoadInformation(RoadType roadType, boolean isOneWay, int maxSpeed, String name) { + this.type = roadType; + this.oneway = isOneWay; + this.maxSpeed = maxSpeed; + this.name = name; + } + + /** + * @return Type of the road. + */ + public RoadType getType() { + return type; + } + + /** + * @return true if this is a one-way road. + */ + public boolean isOneWay() { + return oneway; + } + + /** + * @return Maximum speed for this road (in km/h). + */ + public int getMaximumSpeed() { + return maxSpeed; + } + + /** + * @return Name of the road. + */ + public String getName() { + return name; + } + + @Override + public String toString() { + String typeAsString = "road"; + if (getType() == RoadType.COASTLINE) { + typeAsString = "coast"; + } + if (getType() == RoadType.MOTORWAY) { + typeAsString = "highway"; + } + return typeAsString + " : " + getName() + " " + (isOneWay() ? " (oneway) " : "") + maxSpeed + " km/h (max.)"; + } } diff --git a/src/main/org/insa/graphics/drawing/BasicDrawing.java b/src/main/org/insa/graphics/drawing/BasicDrawing.java index 57b9c3f..9082908 100644 --- a/src/main/org/insa/graphics/drawing/BasicDrawing.java +++ b/src/main/org/insa/graphics/drawing/BasicDrawing.java @@ -11,9 +11,9 @@ import java.awt.event.MouseListener; import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; -import java.util.ArrayList; import java.util.IdentityHashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import javax.swing.JPanel; @@ -238,14 +238,12 @@ public class BasicDrawing extends JPanel implements Drawing { /** * Draw the given arc. * - * @param arc - * Arc to draw. - * @param palette - * Palette to use to retrieve color and width for arc, or null to use - * current settings. + * @param arc Arc to draw. + * @param palette Palette to use to retrieve color and width for arc, or null to + * use current settings. */ public void drawArc(Arc arc, GraphPalette palette) { - ArrayList pts = arc.getPoints(); + List pts = arc.getPoints(); if (!pts.isEmpty()) { if (palette != null) { setColor(palette.getColorForType(arc.getInfo().getType())); diff --git a/src/main/org/insa/graphics/drawing/utils/PolylineAutoScaling.java b/src/main/org/insa/graphics/drawing/utils/PolylineAutoScaling.java index 1c526e9..262ad94 100644 --- a/src/main/org/insa/graphics/drawing/utils/PolylineAutoScaling.java +++ b/src/main/org/insa/graphics/drawing/utils/PolylineAutoScaling.java @@ -1,7 +1,7 @@ package org.insa.graphics.drawing.utils; import java.awt.Color; -import java.util.ArrayList; +import java.util.List; import org.insa.graph.Point; import org.mapsforge.core.graphics.Canvas; @@ -41,7 +41,7 @@ public class PolylineAutoScaling extends Polyline { /** * @param points */ - public void add(ArrayList points) { + public void add(List points) { for (Point point: points) { add(point); } diff --git a/src/test/org/insa/graph/io/BinaryGraphReaderTest.java b/src/test/org/insa/graph/io/BinaryGraphReaderTest.java index 6b0c676..33e39de 100644 --- a/src/test/org/insa/graph/io/BinaryGraphReaderTest.java +++ b/src/test/org/insa/graph/io/BinaryGraphReaderTest.java @@ -1,60 +1,53 @@ package org.insa.graph.io; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; import java.io.IOException; -import java.util.ArrayList; +import java.util.List; import org.insa.graph.Graph; import org.insa.graph.Node; import org.insa.graph.Point; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; public class BinaryGraphReaderTest { - - // Epsilon for latitude and longitude. - private static final double EPS = 1e-5; - - private static Graph midip; - @BeforeAll + // Epsilon for latitude and longitude. + private static final double EPS = 1e-5; + + private static Graph midip; + + @BeforeAll static void initAll() throws IOException { - BinaryGraphReader reader = new BinaryGraphReader(Openfile.open("midip")); - midip = reader.read(); + BinaryGraphReader reader = new BinaryGraphReader(Openfile.open("midip")); + midip = reader.read(); + } + + void assertPointAt(Point p1, double longitude, double latitude) { + assertEquals(p1.getLongitude(), longitude, EPS); + assertEquals(p1.getLatitude(), latitude, EPS); } - - void assertPointAt(Point p1, double longitude, double latitude) { - assertEquals(p1.getLongitude(), longitude, EPS); - assertEquals(p1.getLatitude(), latitude, EPS); - } @Test void testMidipNodes() { - ArrayList nodes = midip.getNodes(); - - assertEquals(nodes.size(), 150827); - - // Check the locations of some nodes. - assertPointAt(nodes.get(58411).getPoint(), 1.799864, 43.92864); - assertPointAt(nodes.get(133312).getPoint(), 0.539752, 43.317505); - assertPointAt(nodes.get(113688).getPoint(), 1.682739, 44.799774); - assertPointAt(nodes.get(118141).getPoint(), 0.274857, 43.47475); - assertPointAt(nodes.get(146918).getPoint(), 0.116148, 43.811386); + List nodes = midip.getNodes(); + + assertEquals(nodes.size(), 150827); + + // Check the locations of some nodes. + assertPointAt(nodes.get(58411).getPoint(), 1.799864, 43.92864); + assertPointAt(nodes.get(133312).getPoint(), 0.539752, 43.317505); + assertPointAt(nodes.get(113688).getPoint(), 1.682739, 44.799774); + assertPointAt(nodes.get(118141).getPoint(), 0.274857, 43.47475); + assertPointAt(nodes.get(146918).getPoint(), 0.116148, 43.811386); } - + @Test void testMidipArcs() { - // TODO: Check the number of edges. - // TODO: Check information for some edges. + // TODO: Check the number of edges. + // TODO: Check information for some edges. } - + }