Changeset 18130 in osm


Ignore:
Timestamp:
2009-10-13T23:30:54+02:00 (15 years ago)
Author:
tordanik
Message:

introduce GraphEdge properties as a more general solution to store segment lists

Location:
applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/ConnectorEvaluationGroup.java

    r16520 r18130  
    1414 * {@link JunctionEvaluationGroup}s.
    1515 */
    16 class ConnectorEvaluationGroup extends EvaluationGroup {
     16public class ConnectorEvaluationGroup extends EvaluationGroup {
    1717
    1818        private final Set<Segment> segments;
  • applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/GraphEdge.java

    r16520 r18130  
    11package org.openstreetmap.josm.plugins.graphview.core.graph;
    22
     3import java.util.Collection;
    34import java.util.List;
    45
     6import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgePropertyType;
    57import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
    68
     
    1618        GraphNode getTargetNode();
    1719
    18         /** returns the series of segments that are represented by this edge; != null */
    19         List<Segment> getSegments();
    20 
     20        /** returns all property types for which property values are available */
     21        Collection<GraphEdgePropertyType<?>> getAvailableProperties();
     22       
     23        /** TODO */
     24        <V> V getPropertyValue(GraphEdgePropertyType<V> property);
     25       
    2126}
  • applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/JunctionEvaluationGroup.java

    r16520 r18130  
    1313 * group of nodes that will be evaluated independently from other groups
    1414 */
    15 class JunctionEvaluationGroup extends EvaluationGroup {
     15public class JunctionEvaluationGroup extends EvaluationGroup {
    1616
    1717        private final Set<SegmentNode> segmentNodes;
  • applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/TSBasedWayGraph.java

    r16520 r18130  
    1010import java.util.Set;
    1111
     12import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgePropertyType;
     13import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgeSegments;
    1214import org.openstreetmap.josm.plugins.graphview.core.transition.Restriction;
    1315import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
     
    2123public class TSBasedWayGraph implements WayGraph, TransitionStructureObserver {
    2224
     25        private static final GraphEdgePropertyType<?>[] PROPERTY_TYPES =
     26                {GraphEdgeSegments.PROPERTY};
     27                //TODO: -> parameter
     28       
    2329        private static class GraphNodeImpl implements GraphNode {
    2430                private final SegmentNode node;
     
    5965
    6066        private static class GraphEdgeImpl implements GraphEdge {
     67               
    6168                private final GraphNode startNode;
    6269                private final GraphNode targetNode;
    63                 private final List<Segment> segments;
    64                 public GraphEdgeImpl(GraphNode startNode, GraphNode targetNode, List<Segment> segments) {
    65                         assert startNode != null && targetNode != null && segments != null;
     70                private final Map<GraphEdgePropertyType<?>, Object> properties;
     71               
     72                public GraphEdgeImpl(GraphNode startNode, GraphNode targetNode,
     73                                Map<GraphEdgePropertyType<?>, Object> properties) {
     74                        assert startNode != null && targetNode != null && properties != null;
    6675                        this.startNode = startNode;
    6776                        this.targetNode = targetNode;
    68                         this.segments = segments;
    69                 }
     77                        this.properties = properties;
     78                }
     79               
    7080                public GraphNode getStartNode() {
    7181                        return startNode;
     
    7484                        return targetNode;
    7585                }
    76                 public List<Segment> getSegments() {
    77                         return segments;
    78                 }
     86               
     87                public Collection<GraphEdgePropertyType<?>> getAvailableProperties() {
     88                        return properties.keySet();
     89                }
     90                public <V> V getPropertyValue(GraphEdgePropertyType<V> property) {
     91                        V result = (V) properties.get(property);
     92                        return result;
     93                }
     94               
    7995                @Override
    8096                public String toString() {
    8197                        return "(" + startNode + "-->" + targetNode + ")";
    8298                }
     99               
    83100        };
    84101
     
    285302                                                                        segment2GNMap_approaching.get(inboundSegment),
    286303                                                                        segment2GNMap_leaving.get(outboundSegment),
    287                                                                         segmentSequence);
     304                                                                        segmentSequence,
     305                                                                        junctionEG);
    288306
    289307                                                }
     
    323341                                                                                                        startGraphNode,
    324342                                                                                                        targetGraphNode,
    325                                                                                                         segmentSequence);
     343                                                                                                        segmentSequence,
     344                                                                                                        connectorEG);
    326345                                                                                }
    327346
     
    338357                        }
    339358                }
     359
     360        }
     361
     362        private void createGraphEdge(
     363                        GraphNodeImpl startNode, GraphNodeImpl targetNode,
     364                        List<Segment> segments, ConnectorEvaluationGroup evaluationGroup) {
     365
     366                Map<GraphEdgePropertyType<?>, Object> properties =
     367                        new HashMap<GraphEdgePropertyType<?>, Object>(); //TODO: replace HashMap with List-based solution
     368               
     369                for (GraphEdgePropertyType<?> propertyType : PROPERTY_TYPES) {
     370                        Object value = propertyType.evaluate(evaluationGroup, segments, transitionStructure);
     371                        properties.put(propertyType, value);
     372                }
     373               
     374                createGraphEdge(startNode, targetNode, properties);
     375
     376        }
     377
     378        private void createGraphEdge(
     379                        GraphNodeImpl startNode, GraphNodeImpl targetNode,
     380                        List<Segment> segments, JunctionEvaluationGroup evaluationGroup) {
     381
     382                Map<GraphEdgePropertyType<?>, Object> properties =
     383                        new HashMap<GraphEdgePropertyType<?>, Object>(); //TODO: replace HashMap with List-based solution
     384               
     385                for (GraphEdgePropertyType<?> propertyType : PROPERTY_TYPES) {
     386                        Object value = propertyType.evaluate(evaluationGroup, segments, transitionStructure);
     387                        properties.put(propertyType, value);
     388                }
     389               
     390                createGraphEdge(startNode, targetNode, properties);
    340391
    341392        }
     
    345396         * adds it to its nodes' collections and {@link #edges} collection.
    346397         */
    347         private void createGraphEdge(
    348                         GraphNodeImpl startNode, GraphNodeImpl targetNode, List<Segment> segments) {
    349 
    350                 GraphEdge newEdge = new GraphEdgeImpl(startNode, targetNode, segments);
     398        private void createGraphEdge(GraphNodeImpl startNode, GraphNodeImpl targetNode,
     399                        Map<GraphEdgePropertyType<?>, Object> properties) {
     400
     401                GraphEdge newEdge = new GraphEdgeImpl(startNode, targetNode, properties);
    351402
    352403                startNode.addOutgoingEdge(newEdge);
     
    356407
    357408        }
    358 
     409       
    359410        private static boolean isConnectedWithExactly2Nodes(SegmentNode node) {
    360411
  • applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/visualisation/FloatPropertyColorScheme.java

    r16520 r18130  
    1212import org.openstreetmap.josm.plugins.graphview.core.graph.GraphEdge;
    1313import org.openstreetmap.josm.plugins.graphview.core.graph.GraphNode;
     14import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgeSegments;
    1415import org.openstreetmap.josm.plugins.graphview.core.property.RoadPropertyType;
    1516import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
     
    6667                List<Color> segmentColors = new ArrayList<Color>();
    6768
     69               
     70               
    6871                for (GraphEdge edge : node.getInboundEdges()) {
    69                         if (edge.getSegments().size() > 0) {
    70                                 Segment firstSegment = edge.getSegments().get(0);
     72                        List<Segment> edgeSegments = edge.getPropertyValue(GraphEdgeSegments.PROPERTY);
     73                        if (edgeSegments.size() > 0) {
     74                                Segment firstSegment = edgeSegments.get(0);
    7175                                segmentColors.add(getSegmentColor(firstSegment));
    7276                        }
    7377                }
    7478                for (GraphEdge edge : node.getOutboundEdges()) {
    75                         if (edge.getSegments().size() > 0) {
    76                                 Segment lastSegment = edge.getSegments().get(edge.getSegments().size()-1);
     79                        List<Segment> edgeSegments = edge.getPropertyValue(GraphEdgeSegments.PROPERTY);
     80                        if (edgeSegments.size() > 0) {
     81                                Segment lastSegment = edgeSegments.get(edgeSegments.size()-1);
    7782                                segmentColors.add(getSegmentColor(lastSegment));
    7883                        }
  • applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/layer/GraphViewLayer.java

    r16836 r18130  
    1111import java.awt.geom.AffineTransform;
    1212import java.awt.geom.Line2D;
     13import java.util.List;
    1314
    1415import javax.swing.Icon;
     
    3031import org.openstreetmap.josm.plugins.graphview.core.graph.WayGraph;
    3132import org.openstreetmap.josm.plugins.graphview.core.graph.WayGraphObserver;
     33import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgeSegments;
    3234import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
    3335import org.openstreetmap.josm.plugins.graphview.core.transition.SegmentNode;
     
    145147                g2D.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
    146148
    147                 if (e.getSegments().size() > 0) {
    148 
    149                         Segment firstSegment = e.getSegments().get(0);
    150                         Segment lastSegment = e.getSegments().get(e.getSegments().size() - 1);
     149                List<Segment> edgeSegments = e.getPropertyValue(GraphEdgeSegments.PROPERTY);
     150               
     151                if (edgeSegments.size() > 0) {
     152
     153                        Segment firstSegment = edgeSegments.get(0);
     154                        Segment lastSegment = edgeSegments.get(edgeSegments.size() - 1);
    151155
    152156                        //draw segments
    153157
    154                         for (Segment segment : e.getSegments()) {
     158                        for (Segment segment : edgeSegments) {
    155159
    156160                                Color color = Color.WHITE;
     
    191195                        Point p2 = getNodePoint(e.getTargetNode(), mv);
    192196
    193                         if (e.getSegments().size() > 0) {
    194                                 Segment lastSegment = e.getSegments().get(e.getSegments().size() - 1);
     197                        if (edgeSegments.size() > 0) {
     198                                Segment lastSegment = edgeSegments.get(edgeSegments.size() - 1);
    195199                                p1 = getNodePoint(lastSegment.getNode1(), mv);
    196200                        }
Note: See TracChangeset for help on using the changeset viewer.