misc/persolijn

osm-protobuf/src/main/java/osm/message/PrimitiveGroup.java in master
Repositories | Summary | Log | Files

PrimitiveGroup.java (1220B) download


 1package osm.message;
 2
 3import java.util.ArrayList;
 4import java.util.Iterator;
 5import java.util.List;
 6
 7import protobuf.Message;
 8import protobuf.ProtobufReader;
 9
10// repeated Node nodes = 1;
11// optional DenseNodes dense = 2;
12// repeated Way ways = 3;
13// repeated Relation relations = 4;
14// repeated ChangeSet changesets = 5;
15public class PrimitiveGroup implements Message<List<Entity>> {
16    private final PrimitiveBlock block;
17
18    public PrimitiveGroup(PrimitiveBlock block) {
19        this.block = block;
20    }
21
22    @Override
23    public List<Entity> parse(Iterator<ProtobufReader> iter) {
24        List<Entity> elements = new ArrayList<>();
25
26        while (iter.hasNext()) {
27            ProtobufReader message = iter.next();
28            switch (message.tag()) {
29                case 1 -> elements.add(message.message(new Node(block)));
30                case 2 -> elements.addAll(message.message(new DenseNodes(block)));
31                case 3 -> elements.add(message.message(new Way(block)));
32                case 4 -> elements.add(message.message(new Relation(block)));
33                case 5 -> message.skip();
34                default -> message.throwUnexpected();
35            }
36        }
37
38        return elements;
39    }
40}