Ignore:
Timestamp:
2012-12-06T22:54:00+01:00 (11 years ago)
Author:
simon04
Message:

see #8255 - suggest roles when adding objects to a relation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r5606 r5614  
    6767import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    6868import org.openstreetmap.josm.gui.preferences.SourceEntry;
     69import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    6970import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference.PresetPrefHelper;
    7071import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
     
    7677import org.openstreetmap.josm.tools.GBC;
    7778import org.openstreetmap.josm.tools.ImageProvider;
     79import org.openstreetmap.josm.tools.Predicate;
    7880import org.openstreetmap.josm.tools.UrlLabel;
    7981import org.openstreetmap.josm.tools.Utils;
     
    10941096        public String text_context;
    10951097        public String locale_text;
     1098        public Match memberExpression;
    10961099
    10971100        public boolean required = false;
     
    11071110            } else if(!"optional".equals(str))
    11081111                throw new SAXException(tr("Unknown requisite: {0}", str));
     1112        }
     1113
     1114        public void setMember_expression(String member_expression) throws SAXException {
     1115            try {
     1116                this.memberExpression = SearchCompiler.compile(member_expression, true, true);
     1117            } catch (SearchCompiler.ParseError ex) {
     1118                throw new SAXException(tr("Illegal member expression: {0}", ex.getMessage()), ex);
     1119            }
    11091120        }
    11101121
     
    11581169    public static class Roles extends Item {
    11591170
    1160         public List<Role> roles = new LinkedList<Role>();
     1171        public final List<Role> roles = new LinkedList<Role>();
    11611172
    11621173        @Override
     
    12411252    public EnumSet<PresetType> types;
    12421253    public List<Item> data = new LinkedList<Item>();
     1254    public Roles roles;
    12431255    public TemplateEntry nameTemplate;
    12441256    public Match nameTemplateFilter;
     
    14281440                    if (o instanceof Roles) {
    14291441                        all.getLast().data.add((Item) o);
     1442                        if (all.getLast().roles != null) {
     1443                            throw new SAXException(tr("Roles cannot appear more than once"));
     1444                        }
     1445                        all.getLast().roles = (Roles) o;
    14301446                        lastrole = (Roles) o;
    14311447                    } else if (o instanceof Role) {
     
    15721588    }
    15731589
     1590    public String suggestRoleForOsmPrimitive(OsmPrimitive osm) {
     1591        if (roles == null) {
     1592            return null;
     1593        }
     1594        for (Role i : roles.roles) {
     1595            if (i.memberExpression != null && i.memberExpression.match(osm)) {
     1596                return i.key;
     1597            }
     1598        }
     1599        return null;
     1600    }
     1601
    15741602    public void actionPerformed(ActionEvent e) {
    15751603        if (Main.main == null) return;
     
    15901618                r.put(t.getKey(), t.getValue());
    15911619            }
    1592             for(OsmPrimitive osm : Main.main.getCurrentDataSet().getSelected()) {
    1593                 RelationMember rm = new RelationMember("", osm);
     1620            for (OsmPrimitive osm : Main.main.getCurrentDataSet().getSelected()) {
     1621                String role = suggestRoleForOsmPrimitive(osm);
     1622                RelationMember rm = new RelationMember(role == null ? "" : role, osm);
    15941623                r.addMember(rm);
    15951624                members.add(rm);
     
    17731802        return atLeastOnePositiveMatch;
    17741803    }
     1804
     1805    public static Collection<TaggingPreset> getMatchingPresets(final Collection<PresetType> t, final Map<String, String> tags, final boolean onlyShowable) {
     1806        return Utils.filter(TaggingPresetPreference.taggingPresets, new Predicate<TaggingPreset>() {
     1807            @Override
     1808            public boolean evaluate(TaggingPreset object) {
     1809                return object.matches(t, tags, onlyShowable);
     1810            }
     1811        });
     1812    }
    17751813}
Note: See TracChangeset for help on using the changeset viewer.