cadl-output/java/src/main/java/com/notificationhubs/implementation/AzureNotificationHubsServiceClientImpl.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.notificationhubs.implementation;

import com.azure.core.http.HttpPipeline;
import com.azure.core.http.HttpPipelineBuilder;
import com.azure.core.http.policy.CookiePolicy;
import com.azure.core.http.policy.RetryPolicy;
import com.azure.core.http.policy.UserAgentPolicy;
import com.azure.core.util.serializer.JacksonAdapter;
import com.azure.core.util.serializer.SerializerAdapter;

/** Initializes a new instance of the AzureNotificationHubsServiceClient type. */
public final class AzureNotificationHubsServiceClientImpl {
    /** Notification Hubs Namespace. */
    private final String namespaceName;

    /**
     * Gets Notification Hubs Namespace.
     *
     * @return the namespaceName value.
     */
    public String getNamespaceName() {
        return this.namespaceName;
    }

    /** Notification Hub Name. */
    private final String hubName;

    /**
     * Gets Notification Hub Name.
     *
     * @return the hubName value.
     */
    public String getHubName() {
        return this.hubName;
    }

    /** The HTTP pipeline to send requests through. */
    private final HttpPipeline httpPipeline;

    /**
     * Gets The HTTP pipeline to send requests through.
     *
     * @return the httpPipeline value.
     */
    public HttpPipeline getHttpPipeline() {
        return this.httpPipeline;
    }

    /** The serializer to serialize an object into a string. */
    private final SerializerAdapter serializerAdapter;

    /**
     * Gets The serializer to serialize an object into a string.
     *
     * @return the serializerAdapter value.
     */
    public SerializerAdapter getSerializerAdapter() {
        return this.serializerAdapter;
    }

    /** The InstallationsImpl object to access its operations. */
    private final InstallationsImpl installations;

    /**
     * Gets the InstallationsImpl object to access its operations.
     *
     * @return the InstallationsImpl object.
     */
    public InstallationsImpl getInstallations() {
        return this.installations;
    }

    /** The RegistrationsImpl object to access its operations. */
    private final RegistrationsImpl registrations;

    /**
     * Gets the RegistrationsImpl object to access its operations.
     *
     * @return the RegistrationsImpl object.
     */
    public RegistrationsImpl getRegistrations() {
        return this.registrations;
    }

    /** The ListRegistrationsByTagsImpl object to access its operations. */
    private final ListRegistrationsByTagsImpl listRegistrationsByTags;

    /**
     * Gets the ListRegistrationsByTagsImpl object to access its operations.
     *
     * @return the ListRegistrationsByTagsImpl object.
     */
    public ListRegistrationsByTagsImpl getListRegistrationsByTags() {
        return this.listRegistrationsByTags;
    }

    /** The NotificationsImpl object to access its operations. */
    private final NotificationsImpl notifications;

    /**
     * Gets the NotificationsImpl object to access its operations.
     *
     * @return the NotificationsImpl object.
     */
    public NotificationsImpl getNotifications() {
        return this.notifications;
    }

    /** The ScheduledNotificationsImpl object to access its operations. */
    private final ScheduledNotificationsImpl scheduledNotifications;

    /**
     * Gets the ScheduledNotificationsImpl object to access its operations.
     *
     * @return the ScheduledNotificationsImpl object.
     */
    public ScheduledNotificationsImpl getScheduledNotifications() {
        return this.scheduledNotifications;
    }

    /** The NotificationHubJobsImpl object to access its operations. */
    private final NotificationHubJobsImpl notificationHubJobs;

    /**
     * Gets the NotificationHubJobsImpl object to access its operations.
     *
     * @return the NotificationHubJobsImpl object.
     */
    public NotificationHubJobsImpl getNotificationHubJobs() {
        return this.notificationHubJobs;
    }

    /**
     * Initializes an instance of AzureNotificationHubsServiceClient client.
     *
     * @param namespaceName Notification Hubs Namespace.
     * @param hubName Notification Hub Name.
     */
    public AzureNotificationHubsServiceClientImpl(String namespaceName, String hubName) {
        this(
                new HttpPipelineBuilder()
                        .policies(new UserAgentPolicy(), new RetryPolicy(), new CookiePolicy())
                        .build(),
                JacksonAdapter.createDefaultSerializerAdapter(),
                namespaceName,
                hubName);
    }

    /**
     * Initializes an instance of AzureNotificationHubsServiceClient client.
     *
     * @param httpPipeline The HTTP pipeline to send requests through.
     * @param namespaceName Notification Hubs Namespace.
     * @param hubName Notification Hub Name.
     */
    public AzureNotificationHubsServiceClientImpl(HttpPipeline httpPipeline, String namespaceName, String hubName) {
        this(httpPipeline, JacksonAdapter.createDefaultSerializerAdapter(), namespaceName, hubName);
    }

    /**
     * Initializes an instance of AzureNotificationHubsServiceClient client.
     *
     * @param httpPipeline The HTTP pipeline to send requests through.
     * @param serializerAdapter The serializer to serialize an object into a string.
     * @param namespaceName Notification Hubs Namespace.
     * @param hubName Notification Hub Name.
     */
    public AzureNotificationHubsServiceClientImpl(
            HttpPipeline httpPipeline, SerializerAdapter serializerAdapter, String namespaceName, String hubName) {
        this.httpPipeline = httpPipeline;
        this.serializerAdapter = serializerAdapter;
        this.namespaceName = namespaceName;
        this.hubName = hubName;
        this.installations = new InstallationsImpl(this);
        this.registrations = new RegistrationsImpl(this);
        this.listRegistrationsByTags = new ListRegistrationsByTagsImpl(this);
        this.notifications = new NotificationsImpl(this);
        this.scheduledNotifications = new ScheduledNotificationsImpl(this);
        this.notificationHubJobs = new NotificationHubJobsImpl(this);
    }
}
