/**
  * Returns the cypher representation of the chain of relationships,
  * <p>
  * Example:
  * <pre>
  * (n1:ENTITY {id: {n1}.id}) -[r0:type0 {property: {r0}.property}]-> (n2:EMBEDDED {property: {n2}.property}) -[r1:type1]-> (n3:EMBEDDED)
  * <pre>
  */
 public String toCypher() {
   StringBuilder builder = new StringBuilder();
   builder.append(start.toCypher());
   for (NextRelationship relationship : stream) {
     builder.append(" -[");
     if (!relationship.getProperties().isEmpty()) {
       builder.append(relationship.getAlias());
     }
     builder.append(":");
     builder.append(relationship.getRelationshipType());
     if (!relationship.getProperties().isEmpty()) {
       builder.append(" {");
       boolean first = true;
       for (String property : relationship.getProperties().keySet()) {
         if (first) {
           first = false;
         } else {
           builder.append(", ");
         }
         escapeIdentifier(builder, property);
         builder.append(": {");
         builder.append(relationship.getAlias());
         builder.append("}.");
         escapeIdentifier(builder, property);
       }
       builder.append(" }");
     }
     builder.append("]-> ");
     builder.append(relationship.getEnd().toCypher());
   }
   return builder.toString();
 }