// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.graphview.core; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.openstreetmap.josm.plugins.graphview.core.data.DataSource; import org.openstreetmap.josm.plugins.graphview.core.data.DataSourceObserver; import org.openstreetmap.josm.plugins.graphview.core.data.MapBasedTagGroup; import org.openstreetmap.josm.plugins.graphview.core.data.TagGroup; public class TestDataSource implements DataSource<TestDataSource.TestNode, TestDataSource.TestWay, TestDataSource.TestRelation, TestDataSource.TestRelationMember> { public static class TestPrimitive { public final Map<String, String> tags = new HashMap<>(); } public static class TestNode extends TestPrimitive { public final double lat; public final double lon; public TestNode() { this(0, 0); } public TestNode(double lat, double lon) { this.lat = lat; this.lon = lon; } @Override public String toString() { return "(" + lat + ", " + lon + "); " + tags; } } public static class TestWay extends TestPrimitive { public final List<TestNode> nodes = new LinkedList<>(); @Override public String toString() { return nodes + "; " + tags; } } public static class TestRelation extends TestPrimitive { public final Collection<TestRelationMember> members = new LinkedList<>(); @Override public String toString() { return members + "; " + tags; } } public static class TestRelationMember { public final String role; public final TestPrimitive member; public TestRelationMember(String role, TestPrimitive member) { this.role = role; this.member = member; } public TestPrimitive getMember() { return member; } public String getRole() { return role; } @Override public String toString() { return role + "=" + member; } } public final Collection<TestNode> nodes = new LinkedList<>(); public final Collection<TestWay> ways = new LinkedList<>(); public final Collection<TestRelation> relations = new LinkedList<>(); @Override public double getLat(TestNode node) { return node.lat; } @Override public double getLon(TestNode node) { return node.lon; } @Override public Iterable<TestRelationMember> getMembers(TestRelation relation) { return relation.members; } @Override public Iterable<TestNode> getNodes() { return nodes; } @Override public Iterable<TestNode> getNodes(TestWay way) { return way.nodes; } @Override public Iterable<TestWay> getWays() { return ways; } @Override public Iterable<TestRelation> getRelations() { return relations; } @Override public TagGroup getTagsN(TestNode node) { return new MapBasedTagGroup(node.tags); } @Override public TagGroup getTagsW(TestWay way) { return new MapBasedTagGroup(way.tags); } @Override public TagGroup getTagsR(TestRelation relation) { return new MapBasedTagGroup(relation.tags); } @Override public Object getMember(TestRelationMember member) { return member.getMember(); } @Override public String getRole(TestRelationMember member) { return member.getRole(); } @Override public boolean isNMember(TestRelationMember member) { return member.getMember() instanceof TestNode; } @Override public boolean isWMember(TestRelationMember member) { return member.getMember() instanceof TestWay; } @Override public boolean isRMember(TestRelationMember member) { return member.getMember() instanceof TestRelation; } @Override public void addObserver(DataSourceObserver observer) { // not needed for test } @Override public void deleteObserver(DataSourceObserver observer) { // not needed for test } }