Changeset 7275 in josm for trunk/src/org/openstreetmap/josm/data/validation
- Timestamp:
- 2014-06-29T17:35:10+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
r7248 r7275 18 18 import java.util.List; 19 19 import java.util.Map; 20 import java.util.Set; 20 21 import java.util.regex.Matcher; 21 22 import java.util.regex.Pattern; … … 49 50 import org.openstreetmap.josm.io.UTFInputStreamReader; 50 51 import org.openstreetmap.josm.tools.CheckParameterUtil; 52 import org.openstreetmap.josm.tools.MultiMap; 51 53 import org.openstreetmap.josm.tools.Predicate; 52 54 import org.openstreetmap.josm.tools.Utils; … … 58 60 public class MapCSSTagChecker extends Test.TagTest { 59 61 62 /** 63 * A grouped MapCSSRule with multiple selectors for a single declaration. 64 * @see MapCSSRule 65 */ 60 66 public static class GroupedMapCSSRule { 67 /** MapCSS selectors **/ 61 68 final public List<Selector> selectors; 69 /** MapCSS declaration **/ 62 70 final public Declaration declaration; 63 71 72 /** 73 * Constructs a new {@code GroupedMapCSSRule}. 74 * @param selectors MapCSS selectors 75 * @param declaration MapCSS declaration 76 */ 64 77 public GroupedMapCSSRule(List<Selector> selectors, Declaration declaration) { 65 78 this.selectors = selectors; … … 112 125 } 113 126 114 final List<TagCheck> checks = new ArrayList<>();127 final MultiMap<String, TagCheck> checks = new MultiMap<>(); 115 128 116 129 static class TagCheck implements Predicate<OsmPrimitive> { … … 204 217 check.change.add(toTag); 205 218 } else if ("fixRemove".equals(ai.key)) { 206 CheckParameterUtil.ensureThat(!(ai.val instanceof String) || !val.contains("="), "Unexpected '='. Please only specify the key to remove!"); 219 CheckParameterUtil.ensureThat(!(ai.val instanceof String) || !(val != null && val.contains("=")), 220 "Unexpected '='. Please only specify the key to remove!"); 207 221 final PrimitiveToTag toTag = PrimitiveToTag.ofMapCSSObject(ai.val, true); 208 222 check.change.add(toTag); … … 323 337 324 338 /** 325 * Replaces occurrences of {@code {i.key}}, {@code {i.value}}, {@code {i.tag}}in {@code s} by the corresponding339 * Replaces occurrences of <code>{i.key}</code>, <code>{i.value}</code>, <code>{i.tag}</code> in {@code s} by the corresponding 326 340 * key/value/tag of the {@code index}-th {@link Condition} of {@code matchingSelector}. 327 341 */ … … 484 498 /** 485 499 * Obtains all {@link TestError}s for the {@link OsmPrimitive} {@code p}. 500 * @param p The OSM primitive 501 * @param includeOtherSeverity if {@code true}, errors of severity {@link Severity#OTHER} (info) will also be returned 502 * @return all errors for the given primitive, with or without those of "info" severity 486 503 */ 487 504 public Collection<TestError> getErrorsForPrimitive(OsmPrimitive p, boolean includeOtherSeverity) { 488 505 final ArrayList<TestError> r = new ArrayList<>(); 489 506 final Environment env = new Environment(p, new MultiCascade(), Environment.DEFAULT_LAYER, null); 490 for (TagCheck check : checks) { 491 if (Severity.OTHER.equals(check.getSeverity()) && !includeOtherSeverity) { 492 continue; 493 } 494 final Selector selector = check.whichSelectorMatchesEnvironment(env); 495 if (selector != null) { 496 check.rule.declaration.execute(env); 497 final TestError error = check.getErrorForPrimitive(p, selector, env); 498 if (error != null) { 499 error.setTester(new MapCSSTagCheckerAndRule(check.rule)); 500 r.add(error); 507 for (Set<TagCheck> schecks : checks.values()) { 508 for (TagCheck check : schecks) { 509 if (Severity.OTHER.equals(check.getSeverity()) && !includeOtherSeverity) { 510 continue; 511 } 512 final Selector selector = check.whichSelectorMatchesEnvironment(env); 513 if (selector != null) { 514 check.rule.declaration.execute(env); 515 final TestError error = check.getErrorForPrimitive(p, selector, env); 516 if (error != null) { 517 error.setTester(new MapCSSTagCheckerAndRule(check.rule)); 518 r.add(error); 519 } 501 520 } 502 521 } … … 516 535 517 536 /** 518 * Adds a new MapCSS config file from the given {@code Reader}.519 * @param css The reader537 * Adds a new MapCSS config file from the given URL. 538 * @param url The unique URL of the MapCSS config file 520 539 * @throws ParseException if the config file does not match MapCSS syntax 540 * @throws IOException if any I/O error occurs 541 * @since 521 542 */ 522 public void addMapCSS(Reader css) throws ParseException { 523 checks.addAll(TagCheck.readMapCSS(css)); 543 public void addMapCSS(String url) throws ParseException, IOException { 544 CheckParameterUtil.ensureParameterNotNull(url, "url"); 545 try (InputStream s = new CachedFile(url).getInputStream()) { 546 checks.putAll(url, TagCheck.readMapCSS(new BufferedReader(UTFInputStreamReader.create(s)))); 547 } 524 548 } 525 549 … … 534 558 Main.info(tr("Adding {0} to tag checker", i)); 535 559 } 536 try (InputStream s = new CachedFile(i).getInputStream()) { 537 addMapCSS(new BufferedReader(UTFInputStreamReader.create(s))); 538 } 560 addMapCSS(i); 539 561 } catch (IOException ex) { 540 562 Main.warn(tr("Failed to add {0} to tag checker", i));
Note:
See TracChangeset
for help on using the changeset viewer.