source: josm/trunk/src/org/openstreetmap/josm/data/validation/util/AgregatePrimitivesVisitor.java@ 3669

Last change on this file since 3669 was 3669, checked in by bastiK, 13 years ago

add validator plugin to josm core. Original author: Francisco R. Santos (frsantos); major contributions by bilbo, daeron, delta_foxtrot, imi, jttt, jrreid, gabriel, guggis, pieren, rrankin, skela, stoecker, stotz and others

  • Property svn:eol-style set to native
File size: 1.7 KB
Line 
1// License: GPL. See LICENSE file for details.
2package org.openstreetmap.josm.data.validation.util;
3
4import java.util.Collection;
5import java.util.HashSet;
6
7import org.openstreetmap.josm.data.osm.Node;
8import org.openstreetmap.josm.data.osm.OsmPrimitive;
9import org.openstreetmap.josm.data.osm.Relation;
10import org.openstreetmap.josm.data.osm.RelationMember;
11import org.openstreetmap.josm.data.osm.Way;
12import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
13
14/**
15 * A visitor that aggregates all primitives it visits.
16 * <p>
17 * The primitives are sorted according to their type: first nodes, then ways.
18 *
19 * @author frsantos
20 */
21public class AgregatePrimitivesVisitor extends AbstractVisitor
22{
23 /** Aggregated data */
24 final Collection<OsmPrimitive> aggregatedData = new HashSet<OsmPrimitive>();
25
26 /**
27 * Visits a collection of primitives
28 * @param data The collection of primitives
29 * @return The aggregated primitives
30 */
31 public Collection<OsmPrimitive> visit(Collection<OsmPrimitive> data)
32 {
33 for (OsmPrimitive osm : data)
34 {
35 osm.visit(this);
36 }
37
38 return aggregatedData;
39 }
40
41 public void visit(Node n)
42 {
43 if(!aggregatedData.contains(n))
44 aggregatedData.add(n);
45 }
46
47 public void visit(Way w)
48 {
49 if(!aggregatedData.contains(w))
50 {
51 aggregatedData.add(w);
52 for (Node n : w.getNodes())
53 visit(n);
54 }
55 }
56
57 public void visit(Relation r) {
58 if (!aggregatedData.contains(r)) {
59 aggregatedData.add(r);
60 for (RelationMember m : r.getMembers()) {
61 m.getMember().visit(this);
62 }
63 }
64 }
65}
Note: See TracBrowser for help on using the repository browser.