Ignore:
Timestamp:
2020-01-13T21:45:29+01:00 (5 years ago)
Author:
simon04
Message:

JOSM/comfort0: 2020 compatibility

Location:
applications/editors/josm/plugins/comfort0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/OsmToLevel0L.java

    r35282 r35289  
    11package net.simon04.comfort0;
    22
    3 import java.util.Collections;
    4 import java.util.List;
     3import java.util.Collection;
    54
    65import org.openstreetmap.josm.data.coor.LatLon;
    7 import org.openstreetmap.josm.data.osm.AbstractPrimitive;
    8 import org.openstreetmap.josm.data.osm.Changeset;
     6import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
     7import org.openstreetmap.josm.data.osm.KeyValueVisitor;
    98import org.openstreetmap.josm.data.osm.Node;
    109import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    1211import org.openstreetmap.josm.data.osm.Relation;
    1312import org.openstreetmap.josm.data.osm.RelationMember;
     13import org.openstreetmap.josm.data.osm.Tagged;
    1414import org.openstreetmap.josm.data.osm.Way;
    15 import org.openstreetmap.josm.data.osm.visitor.Visitor;
    16 import org.openstreetmap.josm.gui.DefaultNameFormatter;
     15import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
    1716
    18 public class OsmToLevel0L implements Visitor, AbstractPrimitive.KeyValueVisitor {
     17/**
     18 * Implements a conversion from {@link OsmPrimitive} to <a href="https://wiki.openstreetmap.org/wiki/Level0L">Level0L</a>.
     19 */
     20public class OsmToLevel0L implements OsmPrimitiveVisitor, KeyValueVisitor {
    1921
    2022    private final StringBuilder sb = new StringBuilder();
    2123
    22     public void visit(List<OsmPrimitive> primitives) {
    23         Collections.sort(primitives, new OsmPrimitiveComparator());
    24         for (OsmPrimitive primitive : primitives) {
    25             primitive.accept(this);
    26         }
     24    public void visit(Collection<OsmPrimitive> primitives) {
     25        primitives.stream()
     26                .sorted(OsmPrimitiveComparator.orderingWaysRelationsNodes().thenComparing(OsmPrimitiveComparator.comparingUniqueId()))
     27                .forEachOrdered(p -> p.accept(this));
    2728    }
    2829
     
    5657                    sb.append("rel ");
    5758                    break;
     59                default:
     60                    break;
    5861            }
    5962            sb.append(member.getUniqueId()).append(" ");
     
    6669        sb.append("\n");
    6770        sb.append(p.getType().getAPIName()).append(" ").append(p.getUniqueId());
    68         if (p instanceof Node && ((Node) p).isLatLonKnown()) {
    69             final LatLon coor = ((Node) p).getCoor();
    70             sb.append(": ").append(coor.lat()).append(", ").append(coor.lon());
     71        if (p instanceof Node) {
     72            final LatLon latLon = ((Node) p).getCoor();
     73            if (latLon != null) {
     74                sb.append(": ").append(latLon.lat()).append(", ").append(latLon.lon());
     75            }
    7176        }
    7277        appendDisplayName(p);
     
    7984
    8085    @Override
    81     public void visit(Changeset cs) {
    82     }
    83 
    84     @Override
    85     public void visitKeyValue(AbstractPrimitive primitive, String key, String value) {
     86    public void visitKeyValue(Tagged primitive, String key, String value) {
    8687        if (key.contains("#") || key.contains("=")) {
    8788            throw new UnsupportedOperationException("# and = are not supported in keys");
  • applications/editors/josm/plugins/comfort0/test/unit/net/simon04/comfort0/OsmToLevel0LTest.java

    r35282 r35289  
    55
    66import java.io.InputStream;
    7 import java.util.ArrayList;
    87
     8import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
    99import org.junit.Before;
     10import org.junit.Rule;
    1011import org.junit.Test;
    11 import org.openstreetmap.josm.Main;
     12import org.openstreetmap.josm.data.Preferences;
    1213import org.openstreetmap.josm.data.coor.LatLon;
    1314import org.openstreetmap.josm.data.osm.DataSet;
    1415import org.openstreetmap.josm.data.osm.Node;
    1516import org.openstreetmap.josm.io.OsmReader;
     17import org.openstreetmap.josm.testutils.JOSMTestRules;
    1618
    1719public class OsmToLevel0LTest {
    1820
     21    /**
     22     * Setup rule
     23     */
     24    @Rule
     25    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
     26    public JOSMTestRules test = new JOSMTestRules().preferences();
     27
    1928    @Before
    2029    public void setUp() throws Exception {
    21         Main.initApplicationPreferences();
     30        Preferences.main().putBoolean("osm-primitives.showcoor", true);
    2231    }
    2332
     
    3847        // from https://wiki.openstreetmap.org/wiki/OSM_XML#OSM_XML_file_format
    3948        // compare to https://wiki.openstreetmap.org/wiki/Level0L#Examples
    40         try (InputStream in = getClass().getResource("/example.osm").openStream()) {
     49        try (InputStream in = getClass().getClassLoader().getResource("example.osm").openStream()) {
    4150            final DataSet dataSet = OsmReader.parseDataSet(in, null);
    4251            final OsmToLevel0L converter = new OsmToLevel0L();
    43             converter.visit(new ArrayList<>(dataSet.allPrimitives()));
     52            converter.visit(dataSet.allPrimitives());
    4453            assertThat(converter.toString(), is("" +
     54                    "way 4579143 #\u200Eincomplete\n" +
     55                    "\n" +
    4556                    "way 26659127 #\u200EPastower Straße\u200E (3 nodes)\n" +
    4657                    "  highway = unclassified\n" +
     
    4960                    "  n298884289 #incomplete\n" +
    5061                    "  n261728686 #261728686 \u200E(54.0906309, 12.2441924)\n" +
    51                     "\n" +
    52                     "way 4579143 #\u200Eincomplete\n" +
    5362                    "\n" +
    5463                    "relation 56688 #route (\"Küstenbus Linie 123\", 4 members, incomplete)\n" +
     
    6473                    "  nd 249673494  #incomplete\n" +
    6574                    "\n" +
    66                     "node 1831881213: 54.0900666, 12.2539381 #Neu Broderstorf \u200E(54.0900666, 12.2539381)\n" +
    67                     "  name = Neu Broderstorf\n" +
    68                     "  traffic_sign = city_limit\n" +
     75                    "node 249673494 #incomplete\n" +
    6976                    "\n" +
    70                     "node 249673494 #incomplete\n" +
     77                    "node 261728686: 54.0906309, 12.2441924 #261728686 \u200E(54.0906309, 12.2441924)\n" +
    7178                    "\n" +
    7279                    "node 292403538 #incomplete\n" +
     
    7481                    "node 294942404 #incomplete\n" +
    7582                    "\n" +
    76                     "node 364933006 #incomplete\n" +
     83                    "node 298884269: 54.0901746, 12.2482632 #298884269 \u200E(54.0901746, 12.2482632)\n" +
     84                    "\n" +
     85                    "node 298884272: 54.0901447, 12.2516513 #298884272 \u200E(54.0901447, 12.2516513)\n" +
    7786                    "\n" +
    7887                    "node 298884289 #incomplete\n" +
    7988                    "\n" +
    80                     "node 261728686: 54.0906309, 12.2441924 #261728686 \u200E(54.0906309, 12.2441924)\n" +
     89                    "node 364933006 #incomplete\n" +
    8190                    "\n" +
    82                     "node 298884269: 54.0901746, 12.2482632 #298884269 \u200E(54.0901746, 12.2482632)\n" +
    83                     "\n" +
    84                     "node 298884272: 54.0901447, 12.2516513 #298884272 \u200E(54.0901447, 12.2516513)"));
     91                    "node 1831881213: 54.0900666, 12.2539381 #Neu Broderstorf \u200E(54.0900666, 12.2539381)\n" +
     92                    "  name = Neu Broderstorf\n" +
     93                    "  traffic_sign = city_limit"));
    8594        }
    8695    }
Note: See TracChangeset for help on using the changeset viewer.