docs: @Override
      public List<? extends Property> getLoginPropertyList() {
          List<Property> props = new LinkedList<Property>();
          if (loginConfigProperties == null) {
              return props;
          } else {
              for (Map.Entry<String, String> entry : loginConfigProperties.entrySet())
                  props.add(new PropertyImpl(entry.getKey(), entry.getValue()));
              return props;
          }
      }
  
      /**
       * Returns the container-managed auth alias
       * that may be specified on the res-ref-properties or cmp-bean-properties
       * in j2c.properties
       * Used only by the SIB RA
       */
      @Override
      public String getContainerAlias() {
          return _containerAlias;
      }
  
      /*
       * Set methods for all fields
       */
  
      /**
       * Sets the sharing scope.
       *
       * @param i Expected to be one of <code>SHAREABLE</code> or <code>UNSHAREABLE</code>
       *            as defined by the constants in <code>com.ibm.websphere.csi.ResRef</code>
       */
      protected void setSharingScope(int i) {
  
          if (i == J2CConstants.CONNECTION_SHAREABLE) {
              res_sharing_scope = true;
          } else {
  
              if (i == J2CConstants.CONNECTION_UNSHAREABLE) {
                  res_sharing_scope = false;
              } else {
                  Tr.warning(TC, "INVALID_OR_UNEXPECTED_SETTING_J2CA0067", "sharing scope", i, false);
                  res_sharing_scope = false; // default to false if unexpected int value
              }
  
          }
  
      }
  
      /**
       * Returns a readable view of the ConnectionManager res-xxx config data
       *
       * @return String representation of this CMConfigDataImpl instance
       */
  
      @Override
      public String toString() {
  
          StringBuffer buf = new StringBuffer(256);
          final String nl = CommonFunction.nl;
  
          String res_sharing_scopeString = "UNSHAREABLE";
          String res_isolation_levelString = "undefined";
          String res_authString = "undefined";
  
          if (res_sharing_scope == true) {
              res_sharing_scopeString = "SHAREABLE";
          }
  
          switch (res_isolation_level) {
              case java.sql.Connection.TRANSACTION_NONE:
                  res_isolation_levelString = "TRANSACTION_NONE";
                  break;
  
              case java.sql.Connection.TRANSACTION_READ_UNCOMMITTED:
                  res_isolation_levelString = "TRANSACTION_READ_UNCOMMITTED";
                  break;
  
              case java.sql.Connection.TRANSACTION_READ_COMMITTED:
                  res_isolation_levelString = "TRANSACTION_READ_COMMITTED";
                  break;
  
              case java.sql.Connection.TRANSACTION_REPEATABLE_READ:
                  res_isolation_levelString = "TRANSACTION_REPEATABLE_READ";
                  break;
  
              case java.sql.Connection.TRANSACTION_SERIALIZABLE:
                  res_isolation_levelString = "TRANSACTION_SERIALIZABLE";
                  break;
  
              default:
                  break;
          }
  
          if (res_auth == J2CConstants.AUTHENTICATION_CONTAINER) {
              res_authString = "CONTAINER";
          } else {
              if (res_auth == J2CConstants.AUTHENTICATION_APPLICATION) {
                  res_authString = "APPLICATION";
              }
          }
  
          // key items
  
          buf.append(nl);
          buf.append("[Resource-ref CMConfigData key items]" + nl);
  
          buf.append(nl);
  
          // put buf.appends on multiple lines.
  
          buf.append("\tres-sharing-scope:        ");
  
          int ss = (res_sharing_scope ? J2CConstants.CONNECTION_SHAREABLE : J2CConstants.CONNECTION_UNSHAREABLE);
          buf.append(ss);
  
          buf.append(" (");
          buf.append(res_sharing_scopeString);
          buf.append(")");
          buf.append(nl);
  
          buf.append("\tres-isolation-level:      ");
          buf.append(res_isolation_level);
          buf.append(" (");
          buf.append(res_isolation_levelString);
          buf.append(")");
          buf.append(nl);
  
          buf.append("\tres-auth:                 ");
          buf.append(res_auth);
          buf.append(" (");
          buf.append(res_authString);
          buf.append(")");
          buf.append(nl);
  
          buf.append("\tcommitPriority            ");
          buf.append(_commitPriority);
          buf.append(nl);
  
          buf.append("\tbranchCoupling            ");
          buf.append(_branchCoupling);
          buf.append(nl);
  
          buf.append("\tloginConfigurationName:   ");
          buf.append(loginConfigurationName);
          buf.append(nl);
  
          buf.append("\tloginConfigProperties:    ");
          buf.append(loginConfigProperties);
          buf.append(nl);
  
          String resRefNameString = ((_resRefName == null) ? "not set" : _resRefName);
          buf.append("\tResource ref name:        ");
          buf.append(resRefNameString);
          buf.append(nl);
  
          String qmidString = ((qmid == null) ? "not set" : qmid);
          buf.append("\tQueue manager id:        ");
          buf.append(qmidString);
          buf.append(nl);
  
          return buf.toString();
  
      }
  
      /**
       * @return _CfKey
       */
      @Override
      public String getCfKey() {
          return _CfKey;
      }
  
      /**
       * @param o A CMConfigDataImpl Object that will be compared.
       *
       * @return true if object o is equal to this CMConfigDataImpl.
       */
      @Override
      public boolean equals(Object o) {
          boolean rVal = false;
  
          if (o != null) { // obviously this cannot be null.
  
              if (this == o) {
                  rVal = true;
              } else {
  
                  try {
  
                      CMConfigDataImpl compare = (CMConfigDataImpl) o;
  
                      /*
                       * If the addresses are not equal and the cast is sucessful we need to check the individual members, otherwise continue on.
                       * Primitives are checked with ==, Objects are checked with == then .equals (if one of them is not null).
                       */
  
                      //  collapsed all the checks into just this comparison of cfDetailsKey, since that already included all the other constituents
                      if (this.cfDetailsKey == compare.cfDetailsKey || (this.cfDetailsKey != null && this.cfDetailsKey.equals(compare.cfDetailsKey))) {
                          rVal = true;
                      }
  
                  } catch (ClassCastException cce) {
                      rVal = false;
                  }
  
              }
  
          }
  
          return rVal;
      }
  
      /**
       * Generates a hashcode for the CMConfigData object. The hashcode is based on each member's
       * hashcode (or value, for int members).
       *
       * @return the hashcode for this object.
       */
      /* */
      @Override
      public int hashCode() {
          int rVal = 0;
          long tempHC = 0;
  
          // collapsed hashCode into just that of cfDetailsKey, since it already included the other constituents
          tempHC += cfDetailsKey.hashCode();
  
          rVal = (Long.valueOf(tempHC / 10)).intValue();
  
          return rVal;
      }
  
      /*
       * This method rereates the CMConfigData Object from a stream - all the members will be
       * re-initialized.
       */
      @SuppressWarnings("unchecked")
      private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
  
          /*
           * Since this is a simple class all we have to do is read each member from the stream.
           * the order has to remain identical to writeObject, so I've just gone alphabetically.
           *
           * If we change the serialversionUID, we may need to modify this method as well.
           */
  
          if (TC.isEntryEnabled()) {
              Tr.entry(this, TC, "readObject", stream);
          }
  
          ObjectInputStream.GetField getField = stream.readFields();
  
          if (TC.isDebugEnabled()) {
  
              for (int i = 0; i < serialPersistentFields.length; i++) {
  
                  String fieldName = serialPersistentFields[i].getName();
  
                  if (getField.defaulted(fieldName))
                      Tr.debug(this, TC, "Could not de-serialize field " + fieldName + " in class " +
                                         getClass().getName() + "; default value will be used");
  
              }
  
          }
  
          cf_name = (String) getField.get("cf_name", null);
          cfDetailsKey = (String) getField.get("cfDetailsKey", null);
          _CfKey = (String) getField.get("_CfKey", null);
          jndiName = (String) getField.get("_PmiName", null);
  
          res_auth = getField.get("res_auth", 999);
          res_isolation_level = getField.get("res_isolation_level", 999);
          res_resolution_control = getField.get("res_resolution_control", 999);
          res_sharing_scope = getField.get("res_sharing_scope", false);
          loginConfigurationName = (String) getField.get("loginConfigurationName", null);
          loginConfigProperties = (HashMap<String, String>) getField.get("loginConfigProperties", null);
          loginConfigPropsKeyString = (String) getField.get("loginConfigPropsKeyString", null);
          _commitPriority = getField.get("_commitPriority", 0);
          _branchCoupling = getField.get("_branchCoupling", 999);
          qmid = (String) getField.get("qmid", null);
  
          if (TC.isEntryEnabled())
              Tr.exit(this, TC, "readObject", new Object[] {
                                                             cf_name,
                                                             cfDetailsKey,
                                                             _CfKey,
                                                             jndiName,
                                                             res_auth,
                                                             res_isolation_level,
                                                             res_resolution_control,
                                                             res_sharing_scope,
                                                             loginConfigurationName,
                                                             loginConfigProperties,
                                                             loginConfigPropsKeyString,
                                                             _containerAlias,
                                                             _commitPriority,
                                                             _branchCoupling
              });
      }
  
      /*
       * this method writes the CMConfigDataOjbect to a stream
       */
      private void writeObject(ObjectOutputStream stream) throws IOException {
  
          /*
           * Since this is a simple class all we have to do is write each member to the stream.
           * the order has to remain identical to readObject, so I've just gone alphabetically.
           *
           * If we change the serialversionUID, we may need to modify this method as well.
           */
  
          if (TC.isEntryEnabled()) {
              Tr.entry(this, TC, "writeObject");
          }
  
          ObjectOutputStream.PutField putField = stream.putFields();
  
          putField.put("cf_name", cf_name);
          putField.put("cfDetailsKey", cfDetailsKey);
          putField.put("_CfKey", _CfKey);
          putField.put("_PmiName", jndiName);
  
          putField.put("res_auth", res_auth);
          putField.put("res_isolation_level", res_isolation_level);
          putField.put("res_resolution_control", res_resolution_control);
          putField.put("res_sharing_scope", res_sharing_scope);
          putField.put("loginConfigurationName", loginConfigurationName);
          putField.put("loginConfigProperties", loginConfigProperties);
          putField.put("loginConfigPropsKeyString", loginConfigPropsKeyString);
          putField.put("_commitPriority", _commitPriority);
          putField.put("_branchCoupling", _branchCoupling);
          putField.put("qmid", qmid);
  
          stream.writeFields();
  
          if (TC.isEntryEnabled()) {
              Tr.exit(this, TC, "writeObject");
          }
  
      }