class ClientDelegator extends BaseDelegator implements IClientDelegator {

	@Override
	public IClient getClient(final String clientName)
			throws ConnectionException, RequestException, AccessException {
		Validate.notBlank(clientName, "Null or empty client name passed in updateClient()");

		List<Map<String, Object>> resultMaps = execMapCmdList(
				CLIENT,
				new String[]{"-o", clientName},
				null);
		return getClientOrNullFromHelixResultMap(
				resultMaps,
				null,
				server,
				new BiPredicate<Map<String, Object>, GetClientTemplateOptions>() {
					@Override
					public boolean test(Map<String, Object> map, GetClientTemplateOptions opts) {
						return isExistClientOrLabelOrUser(map);
					}
				},
				rethrowFunction(
						new FunctionWithException<Map<String, Object>, Boolean>() {
							@Override
							public Boolean apply(Map<String, Object> map) throws P4JavaException {
								return !handleErrorStr(map) && !isInfoMessage(map);
							}
						}
				)
		);
	}

	public  ClientDelegator(IOptionsServer server);

}