code: public Address add(Address address) {
          // if address is null or is the root address then there is nothing to append
          if (address == null || address.isRoot()) {
              return this;
          }
  
          // if we are the root address then the given address just is our new address,
          // otherwise, append all parts from "address" to us.
          if (isRoot()) {
              this.addressNode = address.addressNode.clone();
          } else {
              List<Property> parts = address.addressNode.asPropertyList();
              for (Property part : parts) {
                  this.addressNode.add(part);
              }
          }
  
          return this;
      }
docs: Appends the given address to this address.
  This lets you build up addresses in a step-wise fashion.
  
  @param address new address to appen to this address.
  
  @return this address (which now has the new address appended).