@Override public RelationMemberList allKnownOsmMembers() { final List<RelationMember> members = new ArrayList<>(); for (final Relation candidate : multiAtlas() .relationAllRelationsWithSameOsmIdentifier(this.identifier)) { candidate.members().forEach(relationMember -> members.add(relationMember)); } return new RelationMemberList(members); }
protected RelationMemberList relationAllKnownOsmMembers(final long index) { final List<RelationMember> result = new ArrayList<>(); for (final long candidateIdentifier : this.relationOsmIdentifierToRelationIdentifiers() .get(relationOsmIdentifier(index))) { final long candidateIndex = this.relationIdentifierToRelationArrayIndex() .get(candidateIdentifier); relationMembers(candidateIndex).forEach(relationMember -> result.add(relationMember)); } return new RelationMemberList(result); }
private RelationMemberList membersFor(final RelationBean bean) { if (bean == null) { return null; } final List<RelationMember> memberList = new ArrayList<>(); for (final RelationBeanItem item : bean) { memberList.add(new RelationMember(item.getRole(), getAtlas().entity(item.getIdentifier(), item.getType()), getIdentifier())); } final RelationMemberList result = new RelationMemberList(memberList); bean.getExplicitlyExcluded().forEach(result::addItemExplicitlyExcluded); return result; }
private RelationMemberList membersFor(final RelationBean bean) { if (bean == null) { return null; } final List<RelationMember> memberList = new ArrayList<>(); for (final RelationBeanItem item : bean) { final AtlasEntity memberChangeEntity = getChangeAtlas().entity(item.getIdentifier(), item.getType()); if (memberChangeEntity != null) { memberList.add( new RelationMember(item.getRole(), memberChangeEntity, getIdentifier())); } } return new RelationMemberList(memberList); } }
arrayIndex++; return new RelationMemberList(result);
return new RelationMemberList(newMemberList);
@Test public void testRemoveRelationMemberIsReflectedInMemberListAutomatically() { final Atlas atlas = this.rule.getAtlas(); final ChangeBuilder changeBuilder = new ChangeBuilder(); final Relation disconnectedFeatures = atlas.relation(41834000000L); // Remove the point from the list final RelationMemberList newMembers = new RelationMemberList(disconnectedFeatures.members() .stream().filter(member -> !(member.getEntity() instanceof Point)) .collect(Collectors.toList())); // Here only remove the point. Do not remove the member in the relation. It should // automatically be removed. changeBuilder.add(new FeatureChange(ChangeType.REMOVE, CompletePoint.shallowFrom(atlas.point(41822000000L)))); final Change change = changeBuilder.get(); final Atlas changeAtlas = new ChangeAtlas(atlas, change); Assert.assertEquals(newMembers.asBean(), changeAtlas.relation(41834000000L).members().asBean()); final Relation parentRelation = changeAtlas.relation(41860000000L); final Relation fromRelation = (Relation) Iterables.stream(parentRelation.members()) .firstMatching(member -> "child1".equals(member.getRole())).get().getEntity(); Assert.assertEquals(newMembers.asBean(), fromRelation.members().asBean()); }
@Test public void testShallow() { final Atlas atlas = this.rule.getAtlas(); final Relation source = atlas.relation(22); final CompleteRelation result = CompleteRelation.shallowFrom(source); Assert.assertEquals(source.getIdentifier(), result.getIdentifier()); Assert.assertEquals(source.bounds(), result.bounds()); result.withMembersAndSource(new RelationMemberList(source.members()), source); Assert.assertEquals(source.members().asBean(), result.members().asBean()); result.withMembersAndSource(source.members().asBean(), source, source.bounds()); Assert.assertEquals(source.bounds(), result.bounds()); Assert.assertEquals(source.members().asBean(), result.members().asBean()); result.withAllKnownOsmMembers(source.allKnownOsmMembers().asBean()); Assert.assertEquals(source.allKnownOsmMembers().asBean(), result.allKnownOsmMembers().asBean()); result.withOsmRelationIdentifier(source.osmRelationIdentifier()); Assert.assertEquals(source.osmRelationIdentifier(), result.osmRelationIdentifier()); result.withRelationIdentifiers(source.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet())); Assert.assertEquals( source.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet()), result.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet())); } }
final RelationMemberList newMembers = new RelationMemberList(relation.members() .stream().filter(member -> !member.getEntity().equals(edge)) .collect(Collectors.toList()));
getIdentifier(), subRelations); return new RelationMemberList(members);
@Test public void testRemoveRelationMember() { final Atlas atlas = this.rule.getAtlas(); final ChangeBuilder changeBuilder = new ChangeBuilder(); final Relation disconnectedFeatures = atlas.relation(41834000000L); // Remove the point from the list final RelationMemberList newMembers = new RelationMemberList(disconnectedFeatures.members() .stream().filter(member -> !(member.getEntity() instanceof Point)) .collect(Collectors.toList())); changeBuilder.add( new FeatureChange(ChangeType.ADD, CompleteRelation.shallowFrom(disconnectedFeatures) .withMembersAndSource(newMembers, disconnectedFeatures))); changeBuilder.add(new FeatureChange(ChangeType.REMOVE, CompletePoint.shallowFrom(atlas.point(41822000000L)))); final Change change = changeBuilder.get(); final Atlas changeAtlas = new ChangeAtlas(atlas, change); Assert.assertEquals(newMembers.asBean(), changeAtlas.relation(41834000000L).members().asBean()); final Relation parentRelation = changeAtlas.relation(41860000000L); final Relation fromRelation = (Relation) Iterables.stream(parentRelation.members()) .firstMatching(member -> "child1".equals(member.getRole())).get().getEntity(); Assert.assertEquals(newMembers.asBean(), fromRelation.members().asBean()); }
@Test public void testRemovedRelationMemberFromIndirectRemoval() { final Atlas atlas = this.rule.getAtlas(); // Remove a node. This removal will trigger an indirect removal of the connected edges. This // should also trigger an indirect removal of these members from any relation member lists. final ChangeBuilder changeBuilder = new ChangeBuilder(); changeBuilder.add(new FeatureChange(ChangeType.REMOVE, CompleteNode.shallowFrom(atlas.node(38984000000L)))); final Atlas changeAtlas = new ChangeAtlas(atlas, changeBuilder.get()); final RelationMemberList memberList = changeAtlas.relation(39008000000L).members(); final RelationMemberList newMembers = new RelationMemberList( changeAtlas.relation(39008000000L).members().stream() .filter(member -> member.getEntity().getIdentifier() == -39002000001L || member.getEntity().getIdentifier() == 39002000001L) .collect(Collectors.toList())); Assert.assertEquals(newMembers, memberList); // Now, let's do the same thing but remove an additional node. This will trigger the // indirect removal of all the relation's members - so we should see the relation disappear. final ChangeBuilder changeBuilder2 = new ChangeBuilder(); changeBuilder2.add(new FeatureChange(ChangeType.REMOVE, CompleteNode.shallowFrom(atlas.node(38984000000L)))); changeBuilder2.add(new FeatureChange(ChangeType.REMOVE, CompleteNode.shallowFrom(atlas.node(38982000000L)))); final Atlas changeAtlas2 = new ChangeAtlas(atlas, changeBuilder2.get()); Assert.assertNull(changeAtlas2.relation(39008000000L)); }