protected void decodeOptionalBody(
      ISUPParameterFactory parameterFactory, byte[] parameterBody, byte parameterCode)
      throws ParameterException {
    switch (parameterCode & 0xFF) {
      case CallingPartyCategory._PARAMETER_CODE:
        CallingPartyCategory RS = parameterFactory.createCallingPartyCategory();
        ((AbstractISUPParameter) RS).decode(parameterBody);
        this.setCallingPartyCategory(RS);
        break;
      case CallingPartyNumber._PARAMETER_CODE:
        CallingPartyNumber x = parameterFactory.createCallingPartyNumber();
        ((AbstractISUPParameter) x).decode(parameterBody);
        this.setCallingPartyNumber(x);
        break;
      case CallReference._PARAMETER_CODE:
        CallReference cf = parameterFactory.createCallReference();
        ((AbstractISUPParameter) cf).decode(parameterBody);
        this.setCallReference(cf);
        break;
      case ConnectionRequest._PARAMETER_CODE:
        ConnectionRequest z = parameterFactory.createConnectionRequest();
        ((AbstractISUPParameter) z).decode(parameterBody);
        this.setConnectionRequest(z);
        break;
      case ParameterCompatibilityInformation._PARAMETER_CODE:
        ParameterCompatibilityInformation cc =
            parameterFactory.createParameterCompatibilityInformation();
        ((AbstractISUPParameter) cc).decode(parameterBody);
        this.setParameterCompatibilityInformation(cc);
        break;
      case NetworkSpecificFacility._PARAMETER_CODE:
        NetworkSpecificFacility v = parameterFactory.createNetworkSpecificFacility();
        ((AbstractISUPParameter) v).decode(parameterBody);
        this.setNetworkSpecificFacility(v);
        break;

      default:
        throw new ParameterException(
            "Unrecognized parameter code for optional part: " + parameterCode);
    }
  }