fluid-ws-java-client/src/main/java/com/fluidbpm/ws/client/v1/sqlutil/wrapper/SQLUtilWebSocketRESTWrapper.java
public List<FormListing> getDescendants(
			boolean includeFieldDataParam,
			boolean includeTableFieldsParam,
			boolean includeTableFieldFormRecordInfoParam,
			boolean massFetchParam,
			Form ... formsToGetDescForParam)
	{
		if(DISABLE_WS) {
			this.mode = Mode.RESTfulActive;
		}
		
		//DESCENDANTS...
		try {
			//When mode is null or [WebSocketActive]...
			if(this.getDescendantsClient == null && Mode.RESTfulActive != this.mode) {
				this.getDescendantsClient = new SQLUtilWebSocketGetDescendantsClient(
						this.baseURL,
						null,
						this.loggedInUser.getServiceTicketAsHexUpper(),
						this.timeoutMillis,
						includeFieldDataParam,
						includeTableFieldsParam,
						includeTableFieldFormRecordInfoParam,
						massFetchParam,
						COMPRESS_RSP,
						COMPRESS_RSP_CHARSET);

				this.mode = Mode.WebSocketActive;
			}
		} catch (FluidClientException clientExcept) {
			if(clientExcept.getErrorCode() !=
					FluidClientException.ErrorCode.WEB_SOCKET_DEPLOY_ERROR) {
				throw clientExcept;
			}
			this.mode = Mode.RESTfulActive;
		}

		if(formsToGetDescForParam == null || formsToGetDescForParam.length < 1) {
			return null;
		}

		Form[] formsToFetchFor =
				new Form[formsToGetDescForParam.length];
		for(int index = 0;index < formsToFetchFor.length;index++) {
			formsToFetchFor[index] = new Form(formsToGetDescForParam[index].getId());
		}

		if(this.getDescendantsClient != null) {
			return this.getDescendantsClient.getDescendantsSynchronized(
					formsToFetchFor);
		} else {
			List<FormListing> returnVal = new ArrayList<>();

			for(Form formToFetchFor : formsToFetchFor) {
				List<Form> listOfForms =
						this.sqlUtilClient.getDescendants(
								formToFetchFor,
								includeFieldDataParam,
								includeTableFieldsParam,
								includeTableFieldFormRecordInfoParam);

				FormListing toAdd = new FormListing();
				toAdd.setListing(listOfForms);
				toAdd.setListingCount((listOfForms == null) ? 0 : listOfForms.size());
				returnVal.add(toAdd);
			}

			return returnVal;
		}
	}
public List<FormListing> getDescendants(
			boolean includeFieldDataParam,
			boolean includeTableFieldsParam,
			boolean includeTableFieldFormRecordInfoParam,
			boolean massFetchParam,
			Form ... formsToGetDescForParam)
	{
		if(DISABLE_WS) {
			this.mode = Mode.RESTfulActive;
		}
		
		//DESCENDANTS...
		try {
			//When mode is null or [WebSocketActive]...
			if(this.getDescendantsClient == null && Mode.RESTfulActive != this.mode) {
				this.getDescendantsClient = new SQLUtilWebSocketGetDescendantsClient(
						this.baseURL,
						null,
						this.loggedInUser.getServiceTicketAsHexUpper(),
						this.timeoutMillis,
						includeFieldDataParam,
						includeTableFieldsParam,
						includeTableFieldFormRecordInfoParam,
						massFetchParam,
						COMPRESS_RSP,
						COMPRESS_RSP_CHARSET);

				this.mode = Mode.WebSocketActive;
			}
		} catch (FluidClientException clientExcept) {
			if(clientExcept.getErrorCode() !=
					FluidClientException.ErrorCode.WEB_SOCKET_DEPLOY_ERROR) {
				throw clientExcept;
			}
			this.mode = Mode.RESTfulActive;
		}

		if(formsToGetDescForParam == null || formsToGetDescForParam.length < 1) {
			return null;
		}

		Form[] formsToFetchFor =
				new Form[formsToGetDescForParam.length];
		for(int index = 0;index < formsToFetchFor.length;index++) {
			formsToFetchFor[index] = new Form(formsToGetDescForParam[index].getId());
		}

		if(this.getDescendantsClient != null) {
			return this.getDescendantsClient.getDescendantsSynchronized(
					formsToFetchFor);
		} else {
			List<FormListing> returnVal = new ArrayList<>();

			for(Form formToFetchFor : formsToFetchFor) {
				List<Form> listOfForms =
						this.sqlUtilClient.getDescendants(
								formToFetchFor,
								includeFieldDataParam,
								includeTableFieldsParam,
								includeTableFieldFormRecordInfoParam);

				FormListing toAdd = new FormListing();
				toAdd.setListing(listOfForms);
				toAdd.setListingCount((listOfForms == null) ? 0 : listOfForms.size());
				returnVal.add(toAdd);
			}

			return returnVal;
		}
	}
Retrieves all the Descendants (Forms) for the {@code formsToGetDescForParam}.

@param includeFieldDataParam Should Ancestor (Form) Field data be included?
@param includeTableFieldsParam Should Table Record (Form) Field data be included?
@param includeTableFieldFormRecordInfoParam Does table record form data need to be included.
@param massFetchParam Is the fetch a large fetch.
@param formsToGetDescForParam The Fluid Form to get Descendants for.

@return The {@code formsToGetDescForParam} Descendants as {@code Form}'s.