@Override
  protected SemanticElementRelationship buildMessageModelObject(ClassDef classDef, RawRoot root) {

    SemanticElementRelationship msgElemRel = new SemanticElementRelationship();
    msgElemRel.setName(BuilderUtil.getNameAttribVal(classDef));
    msgElemRel.setDescription(BuilderUtil.getDescriptionAttribVal(classDef));
    msgElemRel.setRule(BuilderUtil.getRuleAttribVal(classDef));
    msgElemRel.setRuleExpressionLanguage(BuilderUtil.getRuleExprAttribVal(classDef));
    msgElemRel.setSourceIsInstance(BuilderUtil.getBooleanAttribVal(classDef, s_srcIsAttrib));
    msgElemRel.setTargetIsInstance(BuilderUtil.getBooleanAttribVal(classDef, s_targetIsAttrib));

    try {
      msgElemRel.setMinOccurs(BuilderUtil.getIntegerAttribVal(classDef, s_minAttrib));
    } catch (NumberFormatException ex) {
      String value = BuilderUtil.getAttribVal(classDef, s_minAttrib);
      Mdmi.INSTANCE
          .logger()
          .loge(
              ex,
              SemanticElementRelationshipBuilder.class.getName()
                  + ": Unable to parse '"
                  + s_minAttrib
                  + "' '"
                  + value
                  + "' as integer.");
    }

    try {
      msgElemRel.setMaxOccurs(BuilderUtil.getIntegerAttribVal(classDef, s_maxAttrib));
    } catch (NumberFormatException ex) {
      String value = BuilderUtil.getAttribVal(classDef, s_maxAttrib);
      Mdmi.INSTANCE
          .logger()
          .loge(
              ex,
              SemanticElementRelationshipBuilder.class.getName()
                  + ": Unable to parse '"
                  + s_maxAttrib
                  + "' '"
                  + value
                  + "' as integer.");
    }

    return msgElemRel;
  }
  @Override
  protected boolean processAssociation(
      SemanticElementRelationship modelObject,
      Object assocObject,
      String stereotypeName,
      Attribute attrib) {

    boolean rv = true;
    if (stereotypeName.equals(StereotypeNames.SEMANTIC_ELEMENT)) {
      SemanticElement msgElem = (SemanticElement) assocObject;

      if (s_relElemName.equals(attrib.getName())) {

        modelObject.setRelatedSemanticElement(msgElem);
      }
    } else {
      rv = false;
    }

    return rv;
  }