private void defineEnd(UmlAssociationEnd end, Field field, Encapsulation encapsulation) {

    end.setEncapsulation(encapsulation);
    if (field == null) return;
    end.setField(field);
    end.setLocalName(field.getLocalName());
    end.setMultiplicity(field.getMultiplicity());
  }
  private void addChildren(UmlClass umlClass, Frame frame) {

    List<UmlAssociation> parentList = new ArrayList<UmlAssociation>();

    for (Field field : frame.getDeclaredFields()) {
      RdfType fieldType = field.getRdfType();

      Field inverseField = field.getInverseField();

      UmlClass otherClass = null;
      if (fieldType.canAsFrame()) {
        otherClass = getUmlClassByURI(fieldType.getUri());
      } else if (fieldType.canAsListType()) {
        otherClass = getUmlClassByURI(fieldType.asListType().getElementType().getUri());
      }

      if (otherClass != null) {

        InverseProperty inverse = field.getInverseProperty();

        Encapsulation inverseEncapsulation =
            inverseField == null ? inverse.getEncapsulation() : inverseField.getEncapsulation();

        Encapsulation encapsulation = field.getEncapsulation();

        if (encapsulation == Encapsulation.NONE && inverseEncapsulation != Encapsulation.NONE) {
          //
          // The other class is the parent

          UmlAssociationEnd end0 = new UmlAssociationEnd(umlClass);
          end0.setMultiplicity(inverse.getMultiplicity());
          defineEnd(end0, inverseField, encapsulation);

          UmlAssociationEnd end1 = new UmlAssociationEnd(otherClass);
          defineEnd(end1, field, inverseEncapsulation);

          UmlAssociation assoc = new UmlAssociation(end0, end1);

          otherClass.addChild(assoc);
          parentList.add(assoc);

        } else {

          UmlAssociationEnd end0 = new UmlAssociationEnd(umlClass);
          UmlAssociationEnd end1 = new UmlAssociationEnd(otherClass);
          defineEnd(end0, inverseField, encapsulation);
          defineEnd(end1, field, inverseEncapsulation);

          UmlAssociation assoc = new UmlAssociation(end0, end1);

          umlClass.addChild(assoc);
          parentList.add(assoc);
        }

      } else {
        // TODO: handle other conditions

      }
    }

    addParentList(umlClass, parentList);
  }