Changeset 3305 in josm for trunk/src/org


Ignore:
Timestamp:
2010-06-04T07:54:55+02:00 (14 years ago)
Author:
stoecker
Message:

fix #5085 - allow to search for roles

Location:
trunk/src/org/openstreetmap/josm/actions/search
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java

    r3300 r3305  
    190190                    + "<li>"+tr("<b>nodes:</b>... - object with given number of nodes (nodes:count or nodes:min-max)")+"</li>"
    191191                    + "<li>"+tr("<b>tags:</b>... - object with given number of tags (tags:count or tags:min-max)")+"</li>"
     192                    + "<li>"+tr("<b>role:</b>... - object with given role in a relation")+"</li>"
    192193                    + "<li>"+tr("<b>timestamp:</b>... -  objects with this timestamp (<b>2009-11-12T14:51:09Z</b>, <b>2009-11-12</b> or <b>T14:51</b> ...)")+"</li>"
    193194                    + "<li>"+tr("<b>modified</b> - all changed objects")+"</li>"
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r3304 r3305  
    4848    private boolean regexSearch = false;
    4949    private static String  rxErrorMsg = marktr("The regex \"{0}\" had a parse error at offset {1}, full error:\n\n{2}");
     50    private static String  rxErrorMsgNoPos = marktr("The regex \"{0}\" had a parse error, full error:\n\n{1}");
    5051    private PushbackTokenizer tokenizer;
    5152
     
    167168                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
    168169                } catch (Exception e) {
    169                     throw new ParseError(tr(rxErrorMsg, key, tr("<unknown>"), e.getMessage()));
     170                    throw new ParseError(tr(rxErrorMsgNoPos, key, e.getMessage()));
    170171                }
    171172                try {
     
    174175                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
    175176                } catch (Exception e) {
    176                     throw new ParseError(tr(rxErrorMsg, value, tr("<unknown>"), e.getMessage()));
     177                    throw new ParseError(tr(rxErrorMsgNoPos, value, e.getMessage()));
    177178                }
    178179                this.key = key;
     
    299300                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
    300301                } catch (Exception e) {
    301                     throw new ParseError(tr(rxErrorMsg, key, tr("<unknown>"), e.getMessage()));
     302                    throw new ParseError(tr(rxErrorMsgNoPos, key, e.getMessage()));
    302303                }
    303304            } else {
     
    310311                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
    311312                } catch (Exception e) {
    312                     throw new ParseError(tr(rxErrorMsg, value, tr("<unknown>"), e.getMessage()));
     313                    throw new ParseError(tr(rxErrorMsgNoPos, value, e.getMessage()));
    313314                }
    314315            } else {
     
    386387                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
    387388                } catch (Exception e) {
    388                     throw new ParseError(tr(rxErrorMsg, s, tr("<unknown>"), e.getMessage()));
     389                    throw new ParseError(tr(rxErrorMsgNoPos, s, e.getMessage()));
    389390                }
    390391                this.search = s;
     
    487488        @Override public String toString() {
    488489            return "user=" + user == null ? "" : user;
     490        }
     491    }
     492
     493    private static class RoleMatch extends Match {
     494        private String role;
     495        public RoleMatch(String role) {
     496            if (role == null) {
     497                this.role = "";
     498            } else {
     499                this.role = role;
     500            }
     501        }
     502
     503        @Override public boolean match(OsmPrimitive osm) {
     504            for (OsmPrimitive ref: osm.getReferrers()) {
     505                if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()) {
     506                    for (RelationMember m : ((Relation) ref).getMembers()) {
     507                        if (m.getMember() == osm) {
     508                            String testRole = m.getRole();
     509                            if(role.equals(testRole == null ? "" : testRole))
     510                                return true;
     511                        }
     512                    }
     513                }
     514            }
     515            return false;
     516        }
     517
     518        @Override public String toString() {
     519            return "role=" + role;
    489520        }
    490521    }
     
    718749        else if (key.equals("user"))
    719750            return new UserMatch(value);
     751        else if (key.equals("role"))
     752            return new RoleMatch(value);
    720753        else
    721754            return new KeyValue(key, value, regexSearch, caseSensitive);
Note: See TracChangeset for help on using the changeset viewer.