Ticket #8255: 8255.patch

File 8255.patch, 7.4 KB (added by simon04, 11 years ago)
  • data/defaultpresets.xml

    diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
    index d798bac..a8d6251 100755
    a b role: type to specify possible roles in relations  
    8888  requisite: optional/required (default is "optional")
    8989  count: how often can the role occur (if not given unlimited number is assumed)
    9090  type: the data types - way,node,relation,closedway (separated by comma)
     91  member_expression: an expression (cf. search dialog) for objects of this role
    9192
    9293 presets: For external files <presets> should have following attributes:
    9394   author: the author of the preset
    Note that for a match, at least one positive and no negative is required.  
    24462447                <combo key="colour" text="Color (HTML name or hexadecimal code)" values_context="color" values="black,brown,green,red,blue,gray,white,#CD853F" />
    24472448            </optional>
    24482449            <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 -->
    24502451            </roles>
    24512452        </item>
    24522453        <item name="Stop Area" type="relation" icon="presets/interpolation.png">
    Note that for a match, at least one positive and no negative is required.  
    24632464                <text key="network" text="Network"/>
    24642465            </optional>
    24652466            <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"/>
    24692470            </roles>
    24702471        </item>
    24712472        <separator/>
    Note that for a match, at least one positive and no negative is required.  
    59055906            <key key="type" value="associatedStreet" />
    59065907            <text key="name" text="Street name" />
    59075908            <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 &quot;addr:street&quot;" />
     5910                <role key="house" text="house" requisite="required" type="node,way,closedway,relation" member_expression="&quot;addr:housenumber&quot;" />
    59105911            </roles>
    59115912        </item>
    59125913        <item name="Street" type="relation">
    Note that for a match, at least one positive and no negative is required.  
    59625963                <text key="wikipedia" text="Wikipedia" />
    59635964            </optional>
    59645965            <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"/>
    59685969                <role key="spring" text="spring of waterway" requisite="optional" type="node" />
    59695970            </roles>
    59705971        </item>
  • data/tagging-preset.xsd

    diff --git a/data/tagging-preset.xsd b/data/tagging-preset.xsd
    index 72f84e4..6473e28 100644
    a b  
    231231                <attribute name="requisite" type="tns:role_requisite" />
    232232                <attribute name="type" type="string" />
    233233                <attribute name="count" type="integer" />
     234        <attribute name="member_expression" type="string" />
    234235        </complexType>
    235236
    236237        <simpleType name="role_requisite">
  • src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    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  
    10931093        public String text;
    10941094        public String text_context;
    10951095        public String locale_text;
     1096        public Match memberExpression;
    10961097
    10971098        public boolean required = false;
    10981099        public long count = 0;
    public class TaggingPreset extends AbstractAction implements MapView.LayerChange  
    11081109                throw new SAXException(tr("Unknown requisite: {0}", str));
    11091110        }
    11101111
     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
    11111120        /* return either argument, the highest possible value or the lowest
    11121121           allowed value */
    11131122        public long getValidCount(long c)
    public class TaggingPreset extends AbstractAction implements MapView.LayerChange  
    15711580        return false;
    15721581    }
    15731582
     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
    15741598    public void actionPerformed(ActionEvent e) {
    15751599        if (Main.main == null) return;
    15761600        if (Main.main.getCurrentDataSet() == null) return;
    public class TaggingPreset extends AbstractAction implements MapView.LayerChange  
    15891613            for(Tag t : getChangedTags()) {
    15901614                r.put(t.getKey(), t.getValue());
    15911615            }
    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);
    15941619                r.addMember(rm);
    15951620                members.add(rm);
    15961621            }