@Override
 public void write(OsmRelation relation) {
   out.print("  <relation id=\"" + relation.getId() + "\"");
   if (printMetadata) {
     OsmMetadata metadata = relation.getMetadata();
     printMetadata(metadata);
   }
   if (relation.getNumberOfTags() == 0 && relation.getNumberOfMembers() == 0) {
     out.println("/>");
   } else {
     out.println(">");
     for (int i = 0; i < relation.getNumberOfMembers(); i++) {
       OsmRelationMember member = relation.getMember(i);
       EntityType type = member.getType();
       String t = type == EntityType.Node ? "node" : type == EntityType.Way ? "way" : "relation";
       String role = member.getRole();
       role = StringEscapeUtils.escapeXml(role);
       out.println(
           "    <member type=\""
               + t
               + "\" ref=\""
               + member.getId()
               + "\" role=\""
               + role
               + "\"/>");
     }
     printTags(relation);
     out.println("  </relation>");
   }
 }
  private void process(OsmRelation relation) {
    boolean hasChildRelations = false;
    TLongList childRelationMembers = new TLongArrayList();
    for (OsmRelationMember member : OsmModelUtil.membersAsList(relation)) {
      if (member.getType() == EntityType.Relation) {
        hasChildRelations = true;
        idsIsChildRelation.add(member.getId());
        childRelationMembers.add(member.getId());
        if (storeSimpleRelations) {
          idsSimpleRelations.remove(member.getId());
        }
      }
    }
    long id = relation.getId();
    if (hasChildRelations) {
      idsHasChildRelations.add(id);
      if (!graph.getNodes().contains(id)) {
        graph.addNode(id);
      }

      TLongIterator iterator = childRelationMembers.iterator();
      while (iterator.hasNext()) {
        long member = iterator.next();
        if (!graph.getNodes().contains(member)) {
          graph.addNode(member);
        }
        graph.addEdge(id, member);
      }
    } else {
      if (storeSimpleRelations && !idsIsChildRelation.contains(id)) {
        idsSimpleRelations.add(id);
      }
      numNoChildren++;
    }
  }