Ignore:
Timestamp:
2010-01-15T21:42:20+01:00 (15 years ago)
Author:
jttt
Message:

Cache route information when dataset didn't changed

Location:
applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/PathBuilder.java

    r17380 r19532  
    1414public class PathBuilder {
    1515
    16         private Map<Way, BitSet> wayRoutes = new HashMap<Way, BitSet>();
     16        private Map<Way, BitSet> wayRoutes = new HashMap<Way, BitSet>();
     17        private Collection<ConvertedWay> convertedWays;
    1718
    1819        public void addWay(Way way, RouteDefinition route) {
     
    3031
    3132        public Collection<ConvertedWay> getConvertedWays() {
    32                 Map<WayEnd, ConvertedWay> ways = new HashMap<WayEnd, ConvertedWay>();
     33                if (convertedWays == null) {
     34                        Map<WayEnd, ConvertedWay> ways = new HashMap<WayEnd, ConvertedWay>();
    3335
    34                 for (Entry<Way, BitSet> wayEntry:wayRoutes.entrySet()) {
    35                         ConvertedWay way = new ConvertedWay(wayEntry.getValue(), wayEntry.getKey());
     36                        for (Entry<Way, BitSet> wayEntry:wayRoutes.entrySet()) {
     37                                ConvertedWay way = new ConvertedWay(wayEntry.getValue(), wayEntry.getKey());
    3638
    37                         ConvertedWay wayBefore = ways.get(way.getStart());
    38                         ConvertedWay wayAfter = ways.get(way.getStop());
     39                                ConvertedWay wayBefore = ways.get(way.getStart());
     40                                ConvertedWay wayAfter = ways.get(way.getStop());
    3941
    40                         if (wayBefore != null) {
    41                                 removeWay(ways, wayBefore);
    42                                 way.connect(wayBefore);
    43                         }
     42                                if (wayBefore != null) {
     43                                        removeWay(ways, wayBefore);
     44                                        way.connect(wayBefore);
     45                                }
    4446
    45                         if (wayAfter != null) {
    46                                 removeWay(ways, wayAfter);
    47                                 way.connect(wayAfter);
     47                                if (wayAfter != null) {
     48                                        removeWay(ways, wayAfter);
     49                                        way.connect(wayAfter);
     50                                }
     51
     52                                ways.put(way.getStart(), way);
     53                                ways.put(way.getStop(), way);
    4854                        }
    4955
    50                         ways.put(way.getStart(), way);
    51                         ways.put(way.getStop(), way);
     56                        Set<ConvertedWay> uniqueWays = new HashSet<ConvertedWay>();
     57                        uniqueWays.addAll(ways.values());
     58                        convertedWays = uniqueWays;
    5259                }
    53 
    54                 Set<ConvertedWay> uniqueWays = new HashSet<ConvertedWay>();
    55                 uniqueWays.addAll(ways.values());
    56                 return uniqueWays;
     60                return convertedWays;
    5761        }
    5862
     
    6367
    6468        public void clear() {
     69                convertedWays = null;
    6570                wayRoutes.clear();
    6671        }
  • applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RouteLayer.java

    r18597 r19532  
    1616import org.openstreetmap.josm.data.osm.RelationMember;
    1717import org.openstreetmap.josm.data.osm.Way;
     18import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
     19import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
     20import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
     21import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
    1822import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    1923import org.openstreetmap.josm.gui.MapView;
     
    2731import org.openstreetmap.josm.tools.ImageProvider;
    2832
    29 public class RouteLayer extends Layer {
     33public class RouteLayer extends Layer implements DataSetListenerAdapter.Listener {
    3034
    3135        private final PathPainter pathPainter;
    3236        private final PathBuilder pathBuilder = new PathBuilder();
    3337        private final List<RouteDefinition> routes = new ArrayList<RouteDefinition>();
     38        private volatile boolean datasetChanged = true;
    3439
    3540        public RouteLayer(RoutesXMLLayer xmlLayer) {
     
    5358                        pathPainter = new NarrowLinePainter(this);
    5459                }
     60
     61                DatasetEventManager.getInstance().addDatasetListener(new DataSetListenerAdapter(this), FireMode.IMMEDIATELY);
    5562        }
    5663
     
    103110                }
    104111
    105                 pathBuilder.clear();
     112                if (datasetChanged) {
     113                        datasetChanged = false;
     114                        pathBuilder.clear();
    106115
    107                 for (Relation relation:dataset.getRelations()) {
    108                         for (RouteDefinition route:routes) {
    109                                 if (route.matches(relation)) {
    110                                         addRelation(relation, route);
     116                        for (Relation relation:dataset.getRelations()) {
     117                                for (RouteDefinition route:routes) {
     118                                        if (route.matches(relation)) {
     119                                                addRelation(relation, route);
     120                                        }
    111121                                }
    112122                        }
    113                 }
    114123
    115                 for (Way way:dataset.getWays()) {
    116                         for (RouteDefinition route:routes) {
    117                                 if (route.matches(way)) {
    118                                         pathBuilder.addWay(way, route);
     124                        for (Way way:dataset.getWays()) {
     125                                for (RouteDefinition route:routes) {
     126                                        if (route.matches(way)) {
     127                                                pathBuilder.addWay(way, route);
     128                                        }
    119129                                }
    120130                        }
     
    128138                g.setStroke(stroke);
    129139                g.setColor(color);
     140
    130141        }
    131142
     
    139150        }
    140151
     152        public void processDatasetEvent(AbstractDatasetChangedEvent event) {
     153                datasetChanged = true;
     154        }
     155
    141156}
Note: See TracChangeset for help on using the changeset viewer.