/**
   * Session Bean's bean-managed transaction demarcation test.
   *
   * <p>The enterprise bean with bean-managed transaction demarcation must be a Session bean.
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

    String transactionType = descriptor.getTransactionType();
    if (EjbSessionDescriptor.BEAN_TRANSACTION_TYPE.equals(transactionType)) {
      if (descriptor instanceof EjbSessionDescriptor) {
        result.addGoodDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.passed(
            smh.getLocalString(
                getClass().getName() + ".passed",
                "[ {0} ] is valid transactionType within Session bean [ {1} ]",
                new Object[] {transactionType, descriptor.getName()}));
      } else if (descriptor instanceof EjbEntityDescriptor) {
        result.addErrorDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.failed(
            smh.getLocalString(
                getClass().getName() + ".failedException",
                "Error: [ {0} ] is not valid transactionType within entity bean [ {1} ]",
                new Object[] {transactionType, descriptor.getName()}));
      }
      return result;
    } else if (EjbSessionDescriptor.CONTAINER_TRANSACTION_TYPE.equals(transactionType)) {
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "Expected [ {0} ] transaction demarcation, but [ {1} ] bean has [ {2} ] transaction demarcation.",
              new Object[] {
                EjbSessionDescriptor.BEAN_TRANSACTION_TYPE,
                descriptor.getName(),
                EjbSessionDescriptor.CONTAINER_TRANSACTION_TYPE
              }));
      return result;
    } else {
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "Expected [ {0} ] transaction demarcation, but [ {1} ] bean has [ {2} ] transaction demarcation.",
              new Object[] {
                EjbSessionDescriptor.BEAN_TRANSACTION_TYPE, descriptor.getName(), transactionType
              }));
      return result;
    }
  }