Ticket #9327: 9327v2.patch
| File 9327v2.patch, 27.8 KB (added by , 12 years ago) |
|---|
-
data/defaultpresets.xml
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml index 2d4cb19..8dae8f3 100755
a b the tags of an OSM object fit into this preset. 146 146 - keyvalue: positive if key and value matches, negative otherwise 147 147 Note that for a match, at least one positive and no negative is required. 148 148 --> 149 <chunk id="highway_base"> 150 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 151 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 152 <text key="maxspeed" text="Max. speed (km/h)" /> 153 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 154 </chunk> 155 <chunk id="barrier"> 156 <optional text="Allowed traffic:"> 157 <check key="foot" text="Foot" default="on" /> 158 <check key="bicycle" text="Bicycle" default="on" /> 159 <check key="horse" text="Horse" default="off" /> 160 <check key="motorcycle" text="Motorcycle" default="off" /> 161 <check key="motorcar" text="Motorcar" default="off" /> 162 </optional> 163 </chunk> 149 164 <group name="Highways" icon="presets/way_secondary.png"> 150 165 <group name="Streets" icon="presets/way_secondary.png"> 151 166 <item name="Motorway" icon="presets/motorway.png" type="way"> … … Note that for a match, at least one positive and no negative is required. 165 180 <text key="ref" text="Reference" /> 166 181 <optional> 167 182 <text key="name" text="Name" /> 168 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 169 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 170 <text key="maxspeed" text="Max. speed (km/h)" /> 171 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 183 <reference ref="highway_base" /> 172 184 <checkgroup columns="4"> 173 185 <check key="oneway" text="Oneway" default="on" /> 174 186 <check key="bridge" text="Bridge" default="off" /> … … Note that for a match, at least one positive and no negative is required. 193 205 <label text="Edit Motorway Link" /> 194 206 <key key="highway" value="motorway_link" /> 195 207 <optional> 196 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 197 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 198 <text key="maxspeed" text="Max. speed (km/h)" /> 199 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 208 <reference ref="highway_base" /> 200 209 <checkgroup columns="4"> 201 210 <check key="oneway" text="Oneway" default="on" /> 202 211 <check key="bridge" text="Bridge" /> … … Note that for a match, at least one positive and no negative is required. 224 233 <text key="ref" text="Reference" /> 225 234 <optional> 226 235 <text key="name" text="Name" /> 227 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 228 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 229 <text key="maxspeed" text="Max. speed (km/h)" /> 230 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 236 <reference ref="highway_base" /> 231 237 <checkgroup columns="4"> 232 238 <check key="oneway" text="Oneway" default="on" /> 233 239 <check key="motorroad" text="Motorroad" default="on" /> … … Note that for a match, at least one positive and no negative is required. 253 259 <key key="highway" value="trunk_link" /> 254 260 <text key="ref" text="Reference" /> 255 261 <optional> 256 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 257 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 258 <text key="maxspeed" text="Max. speed (km/h)" /> 259 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 262 <reference ref="highway_base" /> 260 263 <checkgroup columns="4"> 261 264 <check key="oneway" text="Oneway" default="on" /> 262 265 <check key="motorroad" text="Motorroad" default="on" /> … … Note that for a match, at least one positive and no negative is required. 286 289 <text key="ref" text="Reference" /> 287 290 <optional> 288 291 <text key="name" text="Name" /> 289 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 290 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 291 <text key="maxspeed" text="Max. speed (km/h)" /> 292 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 292 <reference ref="highway_base" /> 293 293 <check key="oneway" text="Oneway" default="off" /> 294 294 <check key="motorroad" text="Motorroad" default="off" /> 295 295 <check key="bridge" text="Bridge" default="off" /> … … Note that for a match, at least one positive and no negative is required. 311 311 <label text="Edit Primary Link" /> 312 312 <key key="highway" value="primary_link" /> 313 313 <optional> 314 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 315 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 316 <text key="maxspeed" text="Max. speed (km/h)" /> 317 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 314 <reference ref="highway_base" /> 318 315 <check key="oneway" text="Oneway" default="off" /> 319 316 <check key="motorroad" text="Motorroad" default="off" /> 320 317 <check key="bridge" text="Bridge" default="off" /> … … Note that for a match, at least one positive and no negative is required. 342 339 <text key="ref" text="Reference" /> 343 340 <optional> 344 341 <text key="name" text="Name" /> 345 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 346 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 347 <text key="maxspeed" text="Max. speed (km/h)" /> 348 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 342 <reference ref="highway_base" /> 349 343 <check key="oneway" text="Oneway" default="off" /> 350 344 <check key="bridge" text="Bridge" default="off" /> 351 345 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 366 360 <label text="Edit Secondary Link" /> 367 361 <key key="highway" value="secondary_link" /> 368 362 <optional> 369 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 370 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 371 <text key="maxspeed" text="Max. speed (km/h)" /> 372 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 363 <reference ref="highway_base" /> 373 364 <check key="oneway" text="Oneway" default="off" /> 374 365 <check key="bridge" text="Bridge" default="off" /> 375 366 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 397 388 <text key="ref" text="Reference" /> 398 389 <optional> 399 390 <text key="name" text="Name" /> 400 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 401 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 402 <text key="maxspeed" text="Max. speed (km/h)" /> 403 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 391 <reference ref="highway_base" /> 404 392 <check key="oneway" text="Oneway" default="off" /> 405 393 <check key="bridge" text="Bridge" default="off" /> 406 394 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 421 409 <label text="Edit Tertiary Link" /> 422 410 <key key="highway" value="tertiary_link" /> 423 411 <optional> 424 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 425 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 426 <text key="maxspeed" text="Max. speed (km/h)" /> 427 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 412 <reference ref="highway_base" /> 428 413 <check key="oneway" text="Oneway" default="off" /> 429 414 <check key="bridge" text="Bridge" default="off" /> 430 415 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 449 434 <optional> 450 435 <text key="name" text="Name" /> 451 436 <text key="ref" text="Reference" /> 452 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 453 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 454 <text key="maxspeed" text="Max. speed (km/h)" /> 455 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 437 <reference ref="highway_base" /> 456 438 <check key="oneway" text="Oneway" default="off" /> 457 439 <check key="bridge" text="Bridge" default="off" /> 458 440 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 479 461 <key key="highway" value="residential" /> 480 462 <text key="name" text="Name" /> 481 463 <optional> 482 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 483 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 484 <text key="maxspeed" text="Max. speed (km/h)" /> 485 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 464 <reference ref="highway_base" /> 486 465 <check key="oneway" text="Oneway" default="off" /> 487 466 <check key="bridge" text="Bridge" default="off" /> 488 467 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 591 570 <combo key="service" text="Service way type" values="alley,driveway,parking_aisle,drive-through" /> 592 571 <optional> 593 572 <text key="name" text="Name" /> 594 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 595 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 596 <text key="maxspeed" text="Max. speed (km/h)" /> 597 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 573 <reference ref="highway_base" /> 598 574 <check key="oneway" text="Oneway" default="off" /> 599 575 <check key="bridge" text="Bridge" default="off" /> 600 576 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 637 613 <key key="highway" value="road" /> 638 614 <optional> 639 615 <text key="name" text="Name" /> 640 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 641 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 642 <text key="maxspeed" text="Max. speed (km/h)" /> 643 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 616 <reference ref="highway_base" /> 644 617 <check key="oneway" text="Oneway" default="off" /> 645 618 <check key="bridge" text="Bridge" default="off" /> 646 619 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 663 636 <key key="highway" value="construction" /> 664 637 <optional> 665 638 <text key="name" text="Name" /> 666 <combo key="layer" text="Layer" values="5,4,3,2,1,0,-1,-2,-3,-4,-5" length="3" /> 667 <combo key="lanes" text="Lanes" values="1,2,3,4,5" length="3" /> 668 <text key="maxspeed" text="Max. speed (km/h)" /> 669 <combo key="surface" text="Surface" values="paved,unpaved,asphalt,concrete,metal,wood,paving_stones,cobblestone,gravel,pebblestone,compacted,grass_paver,grass,sand,ground" /> 639 <reference ref="highway_base" /> 670 640 <check key="oneway" text="Oneway" default="off" /> 671 641 <check key="bridge" text="Bridge" default="off" /> 672 642 <check key="tunnel" text="Tunnel" default="off" /> … … Note that for a match, at least one positive and no negative is required. 1447 1417 ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=entrance" /> 1448 1418 <label text="Edit Entrance (barrier opening)" /> 1449 1419 <key key="barrier" value="entrance" /> 1450 <optional text="Allowed traffic:"> 1451 <check key="foot" text="Foot" default="on" /> 1452 <check key="bicycle" text="Bicycle" default="on" /> 1453 <check key="horse" text="Horse" default="off" /> 1454 <check key="motorcycle" text="Motorcycle" default="off" /> 1455 <check key="motorcar" text="Motorcar" default="off" /> 1456 </optional> 1420 <reference ref="barrier" /> 1457 1421 <optional> 1458 1422 <text key="maxwidth" text="Max. width (meters)" length="7" /> 1459 1423 </optional> … … Note that for a match, at least one positive and no negative is required. 1468 1432 ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=gate" /> 1469 1433 <label text="Edit Gate" /> 1470 1434 <key key="barrier" value="gate" /> 1471 <optional text="Allowed traffic:"> 1472 <check key="foot" text="Foot" default="on" /> 1473 <check key="bicycle" text="Bicycle" default="on" /> 1474 <check key="horse" text="Horse" default="off" /> 1475 <check key="motorcycle" text="Motorcycle" default="off" /> 1476 <check key="motorcar" text="Motorcar" default="off" /> 1477 </optional> 1435 <reference ref="barrier" /> 1478 1436 <optional> 1479 1437 <text key="maxwidth" text="Max. width (meters)" length="7" /> 1480 1438 </optional> … … Note that for a match, at least one positive and no negative is required. 1488 1446 ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=lift_gate" /> 1489 1447 <label text="Edit Lift Gate" /> 1490 1448 <key key="barrier" value="lift_gate" /> 1491 <optional text="Allowed traffic:"> 1492 <check key="foot" text="Foot" default="on" /> 1493 <check key="bicycle" text="Bicycle" default="on" /> 1494 <check key="horse" text="Horse" default="off" /> 1495 <check key="motorcycle" text="Motorcycle" default="off" /> 1496 <check key="motorcar" text="Motorcar" default="off" /> 1497 </optional> 1449 <reference ref="barrier" /> 1498 1450 <optional> 1499 1451 <text key="maxwidth" text="Max. width (meters)" length="7" /> 1500 1452 </optional> … … Note that for a match, at least one positive and no negative is required. 1502 1454 <item name="Hampshire Gate" icon="presets/empty.png" type="node"> 1503 1455 <label text="Edit Hampshire Gate" /> 1504 1456 <key key="barrier" value="hampshire_gate" /> 1505 <optional text="Allowed traffic:"> 1506 <check key="foot" text="Foot" default="on" /> 1507 <check key="bicycle" text="Bicycle" default="on" /> 1508 <check key="horse" text="Horse" default="off" /> 1509 <check key="motorcycle" text="Motorcycle" default="off" /> 1510 <check key="motorcar" text="Motorcar" default="off" /> 1511 </optional> 1457 <reference ref="barrier" /> 1512 1458 <optional> 1513 1459 <text key="maxwidth" text="Max. width (meters)" length="7" /> 1514 1460 </optional> … … Note that for a match, at least one positive and no negative is required. 1516 1462 <item name="Bump Gate" icon="presets/empty.png" type="node"> 1517 1463 <label text="Edit Bump Gate" /> 1518 1464 <key key="barrier" value="bump_gate" /> 1519 <optional text="Allowed traffic:"> 1520 <check key="foot" text="Foot" default="on" /> 1521 <check key="bicycle" text="Bicycle" default="on" /> 1522 <check key="horse" text="Horse" default="off" /> 1523 <check key="motorcycle" text="Motorcycle" default="off" /> 1524 <check key="motorcar" text="Motorcar" default="off" /> 1525 </optional> 1465 <reference ref="barrier" /> 1526 1466 <optional> 1527 1467 <text key="maxwidth" text="Max. width (meters)" length="7" /> 1528 1468 </optional> … … Note that for a match, at least one positive and no negative is required. 1544 1484 pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=chain" /> 1545 1485 <label text="Edit Chain" /> 1546 1486 <key key="barrier" value="chain" /> 1547 <optional text="Allowed traffic:"> 1548 <check key="foot" text="Foot" default="on" /> 1549 <check key="bicycle" text="Bicycle" default="on" /> 1550 <check key="horse" text="Horse" default="off" /> 1551 <check key="motorcycle" text="Motorcycle" default="off" /> 1552 <check key="motorcar" text="Motorcar" default="off" /> 1553 </optional> 1487 <reference ref="barrier" /> 1554 1488 <optional> 1555 1489 <text key="maxwidth" text="Max. width (meters)" length="7" /> 1556 1490 </optional> … … Note that for a match, at least one positive and no negative is required. 1584 1518 <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=sally_port" /> 1585 1519 <label text="Edit Sally Port" /> 1586 1520 <key key="barrier" value="sally_port" /> 1587 <optional text="Allowed traffic:"> 1588 <check key="foot" text="Foot" default="on" /> 1589 <check key="bicycle" text="Bicycle" default="on" /> 1590 <check key="horse" text="Horse" default="off" /> 1591 <check key="motorcycle" text="Motorcycle" default="off" /> 1592 <check key="motorcar" text="Motorcar" default="off" /> 1593 </optional> 1521 <reference ref="barrier" /> 1594 1522 <optional> 1595 1523 <text key="maxheight" text="Max. height (meters)" length="7" /> 1596 1524 <text key="maxwidth" text="Max. width (meters)" length="7" /> … … Note that for a match, at least one positive and no negative is required. 1605 1533 fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:tunnel" 1606 1534 it.href="http://wiki.openstreetmap.org/wiki/IT:Key:tunnel" 1607 1535 ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:tunnel" 1608 pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt -br:Key:tunnel"1536 pt_BR.href="http://wiki.openstreetmap.org/wiki/PtsetMinimumSize-br:Key:tunnel" 1609 1537 ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:tunnel" 1610 1538 uk.href="http://wiki.openstreetmap.org/wiki/Uk:Key:tunnel" /> 1611 1539 <label text="Edit Tunnel" /> -
data/tagging-preset.xsd
diff --git a/data/tagging-preset.xsd b/data/tagging-preset.xsd index 1ec6353..b7b23cb 100644
a b 8 8 errors, elements have specified prohibited attributes --> 9 9 10 10 <element name="annotations" type="tns:root" /> 11 <element name="presets" type="tns:root" /> 11 <element name="presets" type="tns:root"> 12 <unique name="chunk_id"> 13 <selector xpath=".//tns:chunk"/> 14 <field xpath="@id"/> 15 </unique> 16 <keyref name="chunk_ref" refer="tns:chunk_id"> 17 <selector xpath=".//tns:reference"/> 18 <field xpath="@ref"/> 19 </keyref> 20 </element> 12 21 13 22 <complexType name="root"> 14 23 <complexContent> … … 27 36 <complexType name="group-parent"> 28 37 <sequence> 29 38 <choice minOccurs="1" maxOccurs="unbounded"> 39 <element name="chunk" type="tns:chunk"/> 30 40 <element name="group" type="tns:group" /> 31 41 <element name="item" type="tns:item" /> 32 42 <element name="separator" type="tns:separator" /> … … 74 84 <attribute name="text_context" type="string" /> 75 85 </complexType> 76 86 87 <complexType name="chunk"> 88 <sequence> 89 <choice minOccurs="1" maxOccurs="unbounded"> 90 <group ref="tns:optional_elements" /> 91 <element name="key" type="tns:key" /> 92 <element name="optional" type="tns:optional" minOccurs="0" /> 93 </choice> 94 </sequence> 95 <attribute name="id" type="ID" use="required" /> 96 </complexType> 97 98 <complexType name="reference"> 99 <attribute name="ref" type="IDREF" use="required" /> 100 </complexType> 101 77 102 <group name="optional_elements"> 78 103 <choice> 79 104 <element name="label" type="tns:label" /> … … 85 110 <element name="checkgroup" type="tns:checkgroup" /> 86 111 <element name="check" type="tns:check" /> 87 112 <element name="item_separator" type="tns:separator" /> 113 <element name="reference" type="tns:reference" /> 88 114 </choice> 89 115 </group> 90 116 -
src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java index 0efe5fe..87dbb03 100644
a b import java.io.InputStream; 10 10 import java.io.InputStreamReader; 11 11 import java.io.Reader; 12 12 import java.io.UnsupportedEncodingException; 13 import java.util.ArrayList; 14 import java.util.Arrays; 13 15 import java.util.Collection; 16 import java.util.HashMap; 17 import java.util.Iterator; 14 18 import java.util.LinkedList; 15 19 import java.util.List; 20 import java.util.Map; 16 21 17 22 import javax.swing.JOptionPane; 18 23 … … public final class TaggingPresetReader { 45 50 46 51 return sources; 47 52 } 53 54 /** 55 * Holds a reference to a chunk of items/objects. 56 */ 57 public static class Chunk { 58 public String id; 59 } 60 61 /** 62 * Holds a reference to an earlier item/object. 63 */ 64 public static class Reference { 65 public String ref; 66 } 48 67 49 68 public static List<TaggingPreset> readAll(Reader in, boolean validate) throws SAXException { 50 69 XmlObjectParser parser = new XmlObjectParser(); … … public final class TaggingPresetReader { 65 84 parser.map("key", TaggingPresetItems.Key.class); 66 85 parser.map("list_entry", TaggingPresetItems.PresetListEntry.class); 67 86 parser.map("item_separator", TaggingPresetItems.ItemSeparator.class); 68 87 parser.mapBoth("chunk", Chunk.class); 88 parser.map("reference", Reference.class); 89 69 90 LinkedList<TaggingPreset> all = new LinkedList<TaggingPreset>(); 70 91 TaggingPresetMenu lastmenu = null; 71 92 TaggingPresetItems.Roles lastrole = null; 72 93 final List<TaggingPresetItems.Check> checks = new LinkedList<TaggingPresetItems.Check>(); 73 94 List<TaggingPresetItems.PresetListEntry> listEntries = new LinkedList<TaggingPresetItems.PresetListEntry>(); 95 final Map<String, List<Object>> byId = new HashMap<String, List<Object>>(); 96 String lastId = null; 97 Iterator<Object> lastIdIterator = null; 74 98 75 99 if (validate) { 76 100 parser.startWithValidation(in, Main.JOSM_WEBSITE+"/tagging-preset-1.0", "resource://data/tagging-preset.xsd"); … … public final class TaggingPresetReader { 78 102 parser.start(in); 79 103 } 80 104 while (parser.hasNext()) { 81 Object o = parser.next(); 105 final Object o; 106 if (lastIdIterator != null && lastIdIterator.hasNext()) { 107 // obtain elements from lastIdIterator with higher priority 108 o = lastIdIterator.next(); 109 } else { 110 o = parser.next(); 111 } 112 if (o instanceof Chunk) { 113 if (((Chunk) o).id.equals(lastId)) { 114 // reset last id on end of object, don't process further 115 lastId = null; 116 ((Chunk) o).id = null; 117 continue; 118 } else if (lastId == null) { 119 // if preset item contains an id, store a mapping for later usage 120 lastId = ((Chunk) o).id; 121 byId.put(lastId, new ArrayList<Object>()); 122 continue; 123 } else { 124 throw new IllegalStateException("Cannot deal with nested id objects (lastId was expected to be null)"); 125 } 126 } else if (lastId != null) { 127 // add object to mapping for later usage 128 byId.get(lastId).add(o); 129 continue; 130 } 131 if (o instanceof Reference) { 132 // if o is a reference, obtain the corresponding objects from the mapping, 133 // and iterate over those before consuming the next element from parser. 134 final String ref = ((Reference) o).ref; 135 if (byId.get(ref) == null) { 136 throw new SAXException(tr("Reference {0} is being used before it was defined", ref)); 137 } 138 lastIdIterator = byId.get(ref).iterator(); 139 continue; 140 } 82 141 if (!(o instanceof TaggingPresetItem) && !checks.isEmpty()) { 83 142 all.getLast().data.addAll(checks); 84 143 checks.clear();
