/** * Helper function for filtering invalid Relation members. Each Relation member must be an Area, * have either an inner or outer role, and the inner role must not contain the natural=rock tag. * * @param member * - RelationMember * @return true if member is valid */ private boolean isValidMultiPolygonRelationMember(final RelationMember member) { return member.getEntity() instanceof Area && !this.isFlagged(member.getEntity().getIdentifier()) && (member.getRole().equals(RelationTypeTag.MULTIPOLYGON_ROLE_OUTER) || (member.getRole().equals(RelationTypeTag.MULTIPOLYGON_ROLE_INNER) && !Validators.isOfType(member.getEntity(), NaturalTag.class, NaturalTag.ROCK))); }
@Test public void bothRuleRolesNull() { final RelationMember first = new RelationMember(null, this.setup.area1(), 0L); final RelationMember second = new RelationMember(null, this.setup.area1(), 0L); Assert.assertEquals(0, first.compareTo(second)); }
if (!thisMember.equals(thatMember))
@Override public boolean equals(final Object other) { if (other instanceof RelationMember) { final RelationMember that = (RelationMember) other; return StringUtils.equals(this.getRole(), that.getRole()) && this.getRelationIdentifier() == that.getRelationIdentifier() && this.entity.getIdentifier() == that.getEntity().getIdentifier(); } return false; }
for (final RelationMember subMember : subMembers) final AtlasEntity nonMulti = subMember.getEntity(); final long identifier = nonMulti.getIdentifier(); AtlasEntity multiEntity = null; members.add(new RelationMember(subMember.getRole(), multiEntity, subMember.getRelationIdentifier())); for (final RelationMember subMember : subMembers) final AtlasEntity nonMulti = subMember.getEntity(); final long identifier = nonMulti.getIdentifier(); AtlasEntity multiEntity = null; members.add(new RelationMember(subMember.getRole(), multiEntity, subMember.getRelationIdentifier()));
@Override public LocationIterableProperties toGeoJsonBuildingBlock() { final Map<String, String> tags = getTags(); tags.put("identifier", String.valueOf(getIdentifier())); tags.put("osmIdentifier", String.valueOf(getOsmIdentifier())); tags.put("itemType", String.valueOf(getType())); final Optional<String> shardName = getAtlas().metaData().getShardName(); shardName.ifPresent(shard -> tags.put("shard", shard)); final StringList parentRelations = new StringList(); this.relations().forEach(relation -> { final RelationMember member = relation.members().get(getIdentifier(), getType()); parentRelations.add(member.getRelationIdentifier() + "-" + member.getRole()); }); if (!parentRelations.isEmpty()) { tags.put("parentRelations", parentRelations.join(", ")); } return new GeoJsonBuilder.LocationIterableProperties(getClosedGeometry(), tags); }
private boolean listContains(final RelationMemberList list, final String role) { for (final RelationMember member : list) { if (member.getRole().equals(role)) { return true; } } return false; } }
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; }
public String toSimpleString() { final StringBuilder builder = new StringBuilder(); builder.append("[Relation: id="); builder.append(getIdentifier()); builder.append(", [Members: "); final StringList list = new StringList(); for (final RelationMember member : this) { list.add(member.toString()); } builder.append(list.join(", ")); builder.append("], "); builder.append(tagString()); builder.append("]"); return builder.toString(); }
/** * Converts a RelationMember to a polygon if that member is an area. * * @param member * any RelationMember object * @return an polygon containing the geometry of member if it is an area, otherwise an empty * optional. */ private Optional<Polygon> toPolygon(final RelationMember member) { if (member.getEntity().getType().equals(ItemType.AREA)) { return Optional.of(((Area) member.getEntity()).asPolygon()); } return Optional.empty(); }
final AtlasEntity entity = member.getEntity(); AtlasEntity dynamicEntity = null; switch (entity.getType()) throw new CoreException("Invalid entity type {}", entity.getType()); newMemberList.add(new RelationMember(member.getRole(), dynamicEntity, member.getRelationIdentifier()));
@Override public LocationIterableProperties toGeoJsonBuildingBlock() { final Map<String, String> tags = getTags(); tags.put("identifier", String.valueOf(getIdentifier())); tags.put("osmIdentifier", String.valueOf(getOsmIdentifier())); tags.put("itemType", String.valueOf(getType())); final Optional<String> shardName = getAtlas().metaData().getShardName(); shardName.ifPresent(shard -> tags.put("shard", shard)); if (this instanceof Edge) { tags.put("startNode", String.valueOf(((Edge) this).start().getIdentifier())); tags.put("endNode", String.valueOf(((Edge) this).end().getIdentifier())); } final StringList parentRelations = new StringList(); this.relations().forEach(relation -> { final RelationMember member = relation.members().get(getIdentifier(), getType()); parentRelations.add(member.getRelationIdentifier() + "-" + member.getRole()); }); if (!parentRelations.isEmpty()) { tags.put("parentRelations", parentRelations.join(", ")); } return new GeoJsonBuilder.LocationIterableProperties(getRawGeometry(), tags); }
public boolean hasMultiPolygonMembers(final Ring ring) { if (isMultiPolygon()) { for (final RelationMember member : members()) { switch (ring) { case OUTER: if (RelationTypeTag.MULTIPOLYGON_ROLE_OUTER.equals(member.getRole())) { return true; } break; case INNER: if (RelationTypeTag.MULTIPOLYGON_ROLE_INNER.equals(member.getRole())) { return true; } break; default: throw new CoreException("Unknown ring type: {}", ring); } } } return false; }
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); } }
public String configurableString(final String betweenEachMemberAndRelation, final String betweenEachMember) { final StringBuilder builder = new StringBuilder(); builder.append("[Relation: id="); builder.append(getIdentifier()); builder.append(", [Members: \n\t\t\t\t"); final StringList list = new StringList(); for (final RelationMember member : this) { list.add(betweenEachMemberAndRelation + betweenEachMember + member.toString()); } builder.append(list.join(", \n\t\t\t\t")); builder.append("\n\t\t\t"); builder.append(betweenEachMemberAndRelation); builder.append("], "); builder.append(tagString()); builder.append("]"); return builder.toString(); }
@Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("{Member: ID = "); builder.append(this.getEntity().getIdentifier()); builder.append(", Type = "); builder.append(this.getEntity().getType()); builder.append(", Role = "); builder.append(this.getRole()); builder.append("}"); return builder.toString(); } }
.forEach(member -> toProcess.add(member.getEntity()));
@Test public void firstRuleRoleNull() { final RelationMember first = new RelationMember(null, this.setup.area1(), 0L); final RelationMember second = new RelationMember("Something", this.setup.area1(), 0L); Assert.assertEquals(-1, first.compareTo(second)); }
parentRelations.add(member.getRelationIdentifier() + "-" + member.getRole()); });