/**
   * form and apply a parent organ to parts
   *
   * @param description:
   * @param statement
   * @param parentStructure element holding a candidate parent
   * @param parentOfParentStructure string of the name of the parent organ of the parentstructure
   * @return
   */
  private String attachParentOrganToOtherBiologicalEntities(
      Document document,
      Element description,
      Element statement,
      Element parentStructure,
      String parentOfParentStructure,
      String nonSpecificParts) {
    String parentOrgan =
        getParentOrgan(document, description, parentStructure, parentOfParentStructure);

    // parentorgan = parentorgan.trim();
    // attach parentorgan to other 'structures' in this statement
    List<Element> biologicalEntities =
        statement.getChildren("biological_entity"); // could include 'relation' too

    String parentStructureName = null;
    for (Element biologicalEntity : biologicalEntities) {
      if (!biologicalEntity.equals(parentStructure)) {
        // skip the 1st structure which is parentstruct
        if (!hasStructuralConstraint(biologicalEntity)) {
          String partOfChain =
              getPartOfChain(document, description, biologicalEntity, 3)
                  .replace(" of ", ",")
                  .trim(); // part of organ of organ
          String part =
              biologicalEntity.getAttributeValue("name")
                  + (partOfChain.isEmpty() ? "" : "," + partOfChain);

          if (part.matches("\\b(" + nonSpecificParts + ")\\b.*")
              && !part.contains(",")
              && parentOrgan.equals("whole_organism")) {
            parentStructureName =
                hasPart(
                    parentStructure,
                    biologicalEntity,
                    description,
                    parentOrgan,
                    part,
                    nonSpecificParts);
            if (!parentStructureName.isEmpty()) {
              log(
                  LogLevel.DEBUG,
                  "===>[part of 1] use '"
                      + parentStructureName
                      + "' as constraint to '"
                      + biologicalEntity.getName()
                      + "'");
              appendConstraint(biologicalEntity, formatParentOrgan(parentStructureName));
            } else if (possess(parentStructure, biologicalEntity, description)) {
              parentStructureName = formatParentOrgan(parentOrgan);
              log(
                  LogLevel.DEBUG,
                  "===>[possess] use '"
                      + parentStructureName
                      + "' as constraint to '"
                      + biologicalEntity.getName()
                      + "'");
              appendConstraint(biologicalEntity, formatParentOrgan(parentStructureName));
            }
          }
        }
      }
    }
    return parentStructureName != null
        ? parentStructureName
        : parentOrgan.replaceAll("(^,|,$)", "");
  }