diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index d798bac..a8d6251 100755
|
a
|
b
|
role: type to specify possible roles in relations
|
| 88 | 88 | requisite: optional/required (default is "optional") |
| 89 | 89 | count: how often can the role occur (if not given unlimited number is assumed) |
| 90 | 90 | type: the data types - way,node,relation,closedway (separated by comma) |
| | 91 | member_expression: an expression (cf. search dialog) for objects of this role |
| 91 | 92 | |
| 92 | 93 | presets: For external files <presets> should have following attributes: |
| 93 | 94 | author: the author of the preset |
| … |
… |
Note that for a match, at least one positive and no negative is required.
|
| 2446 | 2447 | <combo key="colour" text="Color (HTML name or hexadecimal code)" values_context="color" values="black,brown,green,red,blue,gray,white,#CD853F" /> |
| 2447 | 2448 | </optional> |
| 2448 | 2449 | <roles> |
| 2449 | | <role key="" text="route variant/direction (at least 2)" requisite="required" type="relation"/> <!-- FIXME: at least 2 members are required --> |
| | 2450 | <role key="" text="route variant/direction (at least 2)" requisite="required" type="relation" member_expression="type=route"/> <!-- FIXME: at least 2 members are required --> |
| 2450 | 2451 | </roles> |
| 2451 | 2452 | </item> |
| 2452 | 2453 | <item name="Stop Area" type="relation" icon="presets/interpolation.png"> |
| … |
… |
Note that for a match, at least one positive and no negative is required.
|
| 2463 | 2464 | <text key="network" text="Network"/> |
| 2464 | 2465 | </optional> |
| 2465 | 2466 | <roles> |
| 2466 | | <role key="stop" text="Stop Position" requisite="optional" type="node"/> |
| 2467 | | <role key="platform" text="Platform" requisite="optional" type="node,way,closedway"/> |
| 2468 | | <role key="" text="Station or amenities" requisite="optional" type="node,way,closedway"/> |
| | 2467 | <role key="stop" text="Stop Position" requisite="optional" type="node" member_expression="public_transport=stop_position"/> |
| | 2468 | <role key="platform" text="Platform" requisite="optional" type="node,way,closedway" member_expression="public_transport=platform"/> |
| | 2469 | <role key="" text="Station or amenities" requisite="optional" type="node,way,closedway" member_expression="amenity|public_transport=station"/> |
| 2469 | 2470 | </roles> |
| 2470 | 2471 | </item> |
| 2471 | 2472 | <separator/> |
| … |
… |
Note that for a match, at least one positive and no negative is required.
|
| 5905 | 5906 | <key key="type" value="associatedStreet" /> |
| 5906 | 5907 | <text key="name" text="Street name" /> |
| 5907 | 5908 | <roles> |
| 5908 | | <role key="street" text="street" requisite="required" type="way" /> |
| 5909 | | <role key="house" text="house" requisite="required" type="node,way,closedway,relation" /> |
| | 5909 | <role key="street" text="street" requisite="required" type="way" member_expression="highway "addr:street"" /> |
| | 5910 | <role key="house" text="house" requisite="required" type="node,way,closedway,relation" member_expression=""addr:housenumber"" /> |
| 5910 | 5911 | </roles> |
| 5911 | 5912 | </item> |
| 5912 | 5913 | <item name="Street" type="relation"> |
| … |
… |
Note that for a match, at least one positive and no negative is required.
|
| 5962 | 5963 | <text key="wikipedia" text="Wikipedia" /> |
| 5963 | 5964 | </optional> |
| 5964 | 5965 | <roles> |
| 5965 | | <role key="" text="waterways (no riverbank)" requisite="optional" type="way" /> |
| 5966 | | <role key="main_stream" text="waterways (no riverbank)" requisite="optional" type="way" /> |
| 5967 | | <role key="side_stream" text="branch waterways (no riverbank)" requisite="optional" type="way" /> |
| | 5966 | <role key="" text="waterways (no riverbank)" requisite="optional" type="way" member_expression="waterway -waterway:riverbank" /> |
| | 5967 | <role key="main_stream" text="waterways (no riverbank)" requisite="optional" type="way" member_expression="waterway -waterway:riverbank" /> |
| | 5968 | <role key="side_stream" text="branch waterways (no riverbank)" requisite="optional" type="way" member_expression="waterway -waterway:riverbank"/> |
| 5968 | 5969 | <role key="spring" text="spring of waterway" requisite="optional" type="node" /> |
| 5969 | 5970 | </roles> |
| 5970 | 5971 | </item> |
diff --git a/data/tagging-preset.xsd b/data/tagging-preset.xsd
index 72f84e4..6473e28 100644
|
a
|
b
|
|
| 231 | 231 | <attribute name="requisite" type="tns:role_requisite" /> |
| 232 | 232 | <attribute name="type" type="string" /> |
| 233 | 233 | <attribute name="count" type="integer" /> |
| | 234 | <attribute name="member_expression" type="string" /> |
| 234 | 235 | </complexType> |
| 235 | 236 | |
| 236 | 237 | <simpleType name="role_requisite"> |
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
index a68b4c6..c3435de 100644
|
a
|
b
|
public class TaggingPreset extends AbstractAction implements MapView.LayerChange
|
| 1093 | 1093 | public String text; |
| 1094 | 1094 | public String text_context; |
| 1095 | 1095 | public String locale_text; |
| | 1096 | public Match memberExpression; |
| 1096 | 1097 | |
| 1097 | 1098 | public boolean required = false; |
| 1098 | 1099 | public long count = 0; |
| … |
… |
public class TaggingPreset extends AbstractAction implements MapView.LayerChange
|
| 1108 | 1109 | throw new SAXException(tr("Unknown requisite: {0}", str)); |
| 1109 | 1110 | } |
| 1110 | 1111 | |
| | 1112 | public void setMember_expression(String member_expression) throws SAXException { |
| | 1113 | try { |
| | 1114 | this.memberExpression = SearchCompiler.compile(member_expression, true, true); |
| | 1115 | } catch (SearchCompiler.ParseError ex) { |
| | 1116 | throw new SAXException(tr("Illegal member expression: {0}", ex.getMessage()), ex); |
| | 1117 | } |
| | 1118 | } |
| | 1119 | |
| 1111 | 1120 | /* return either argument, the highest possible value or the lowest |
| 1112 | 1121 | allowed value */ |
| 1113 | 1122 | public long getValidCount(long c) |
| … |
… |
public class TaggingPreset extends AbstractAction implements MapView.LayerChange
|
| 1571 | 1580 | return false; |
| 1572 | 1581 | } |
| 1573 | 1582 | |
| | 1583 | public String suggestRoleForOsmPrimitive(OsmPrimitive osm) { |
| | 1584 | final List<Role> roles = new ArrayList<Role>(); |
| | 1585 | for (Item i : data) { |
| | 1586 | if (i instanceof Roles) { |
| | 1587 | roles.addAll(((Roles) i).roles); |
| | 1588 | } |
| | 1589 | } |
| | 1590 | for (Role i : roles) { |
| | 1591 | if (i.memberExpression != null && i.memberExpression.match(osm)) { |
| | 1592 | return i.key; |
| | 1593 | } |
| | 1594 | } |
| | 1595 | return null; |
| | 1596 | } |
| | 1597 | |
| 1574 | 1598 | public void actionPerformed(ActionEvent e) { |
| 1575 | 1599 | if (Main.main == null) return; |
| 1576 | 1600 | if (Main.main.getCurrentDataSet() == null) return; |
| … |
… |
public class TaggingPreset extends AbstractAction implements MapView.LayerChange
|
| 1589 | 1613 | for(Tag t : getChangedTags()) { |
| 1590 | 1614 | r.put(t.getKey(), t.getValue()); |
| 1591 | 1615 | } |
| 1592 | | for(OsmPrimitive osm : Main.main.getCurrentDataSet().getSelected()) { |
| 1593 | | RelationMember rm = new RelationMember("", osm); |
| | 1616 | for (OsmPrimitive osm : Main.main.getCurrentDataSet().getSelected()) { |
| | 1617 | String role = suggestRoleForOsmPrimitive(osm); |
| | 1618 | RelationMember rm = new RelationMember(role == null ? "" : role, osm); |
| 1594 | 1619 | r.addMember(rm); |
| 1595 | 1620 | members.add(rm); |
| 1596 | 1621 | } |