Package com.microsoft.windowsazure.management.compute

Source Code of com.microsoft.windowsazure.management.compute.ComputeManagementClientImpl

/**
*
* Copyright (c) Microsoft and contributors.  All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

// Warning: This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if the
// code is regenerated.

package com.microsoft.windowsazure.management.compute;

import com.microsoft.windowsazure.core.OperationStatus;
import com.microsoft.windowsazure.core.OperationStatusResponse;
import com.microsoft.windowsazure.core.ServiceClient;
import com.microsoft.windowsazure.core.utils.BOMInputStream;
import com.microsoft.windowsazure.core.utils.XmlUtility;
import com.microsoft.windowsazure.credentials.SubscriptionCloudCredentials;
import com.microsoft.windowsazure.exception.ServiceException;
import com.microsoft.windowsazure.management.compute.models.CertificateFormat;
import com.microsoft.windowsazure.management.compute.models.LoadBalancerProbeTransportProtocol;
import com.microsoft.windowsazure.management.configuration.ManagementConfiguration;
import com.microsoft.windowsazure.tracing.CloudTracing;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import javax.inject.Inject;
import javax.inject.Named;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

/**
* The Service Management API provides programmatic access to much of the
* functionality available through the Management Portal. The Service
* Management API is a REST API. All API operations are performed over SSL, and
* are mutually authenticated using X.509 v3 certificates.  (see
* http://msdn.microsoft.com/en-us/library/windowsazure/ee460799.aspx for more
* information)
*/
public class ComputeManagementClientImpl extends ServiceClient<ComputeManagementClient> implements ComputeManagementClient {
    private String apiVersion;
   
    /**
    * Gets the API version.
    * @return The ApiVersion value.
    */
    public String getApiVersion() {
        return this.apiVersion;
    }
   
    private URI baseUri;
   
    /**
    * Gets the URI used as the base for all cloud service requests.
    * @return The BaseUri value.
    */
    public URI getBaseUri() {
        return this.baseUri;
    }
   
    private SubscriptionCloudCredentials credentials;
   
    /**
    * Gets subscription credentials which uniquely identify Microsoft Azure
    * subscription. The subscription ID forms part of the URI for every
    * service call.
    * @return The Credentials value.
    */
    public SubscriptionCloudCredentials getCredentials() {
        return this.credentials;
    }
   
    private int longRunningOperationInitialTimeout;
   
    /**
    * Gets or sets the initial timeout for Long Running Operations.
    * @return The LongRunningOperationInitialTimeout value.
    */
    public int getLongRunningOperationInitialTimeout() {
        return this.longRunningOperationInitialTimeout;
    }
   
    /**
    * Gets or sets the initial timeout for Long Running Operations.
    * @param longRunningOperationInitialTimeoutValue The
    * LongRunningOperationInitialTimeout value.
    */
    public void setLongRunningOperationInitialTimeout(final int longRunningOperationInitialTimeoutValue) {
        this.longRunningOperationInitialTimeout = longRunningOperationInitialTimeoutValue;
    }
   
    private int longRunningOperationRetryTimeout;
   
    /**
    * Gets or sets the retry timeout for Long Running Operations.
    * @return The LongRunningOperationRetryTimeout value.
    */
    public int getLongRunningOperationRetryTimeout() {
        return this.longRunningOperationRetryTimeout;
    }
   
    /**
    * Gets or sets the retry timeout for Long Running Operations.
    * @param longRunningOperationRetryTimeoutValue The
    * LongRunningOperationRetryTimeout value.
    */
    public void setLongRunningOperationRetryTimeout(final int longRunningOperationRetryTimeoutValue) {
        this.longRunningOperationRetryTimeout = longRunningOperationRetryTimeoutValue;
    }
   
    private DeploymentOperations deployments;
   
    /**
    * The Service Management API includes operations for managing the
    * deployments in your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx for
    * more information)
    * @return The DeploymentsOperations value.
    */
    public DeploymentOperations getDeploymentsOperations() {
        return this.deployments;
    }
   
    private ExtensionImageOperations extensionImages;
   
    /**
    * The Service Management API includes operations for managing the service
    * and virtual machine extension images in your publisher subscription.
    * @return The ExtensionImagesOperations value.
    */
    public ExtensionImageOperations getExtensionImagesOperations() {
        return this.extensionImages;
    }
   
    private HostedServiceOperations hostedServices;
   
    /**
    * The Service Management API includes operations for managing the hosted
    * services beneath your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx for
    * more information)
    * @return The HostedServicesOperations value.
    */
    public HostedServiceOperations getHostedServicesOperations() {
        return this.hostedServices;
    }
   
    private LoadBalancerOperations loadBalancers;
   
    /**
    * The Compute Management API includes operations for managing the load
    * balancers for your subscription.
    * @return The LoadBalancersOperations value.
    */
    public LoadBalancerOperations getLoadBalancersOperations() {
        return this.loadBalancers;
    }
   
    private OperatingSystemOperations operatingSystems;
   
    /**
    * Operations for determining the version of the Azure Guest Operating
    * System on which your service is running.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ff684169.aspx for
    * more information)
    * @return The OperatingSystemsOperations value.
    */
    public OperatingSystemOperations getOperatingSystemsOperations() {
        return this.operatingSystems;
    }
   
    private ServiceCertificateOperations serviceCertificates;
   
    /**
    * Operations for managing service certificates for your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee795178.aspx for
    * more information)
    * @return The ServiceCertificatesOperations value.
    */
    public ServiceCertificateOperations getServiceCertificatesOperations() {
        return this.serviceCertificates;
    }
   
    private VirtualMachineDiskOperations virtualMachineDisks;
   
    /**
    * The Service Management API includes operations for managing the disks in
    * your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/jj157188.aspx for
    * more information)
    * @return The VirtualMachineDisksOperations value.
    */
    public VirtualMachineDiskOperations getVirtualMachineDisksOperations() {
        return this.virtualMachineDisks;
    }
   
    private VirtualMachineExtensionOperations virtualMachineExtensions;
   
    /**
    * The Service Management API includes operations for managing the virtual
    * machine extensions in your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/jj157206.aspx for
    * more information)
    * @return The VirtualMachineExtensionsOperations value.
    */
    public VirtualMachineExtensionOperations getVirtualMachineExtensionsOperations() {
        return this.virtualMachineExtensions;
    }
   
    private VirtualMachineOperations virtualMachines;
   
    /**
    * The Service Management API includes operations for managing the virtual
    * machines in your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/jj157206.aspx for
    * more information)
    * @return The VirtualMachinesOperations value.
    */
    public VirtualMachineOperations getVirtualMachinesOperations() {
        return this.virtualMachines;
    }
   
    private VirtualMachineOSImageOperations virtualMachineOSImages;
   
    /**
    * The Service Management API includes operations for managing the OS images
    * in your subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/jj157175.aspx for
    * more information)
    * @return The VirtualMachineOSImagesOperations value.
    */
    public VirtualMachineOSImageOperations getVirtualMachineOSImagesOperations() {
        return this.virtualMachineOSImages;
    }
   
    private VirtualMachineVMImageOperations virtualMachineVMImages;
   
    /**
    * The Service Management API includes operations for managing the virtual
    * machine templates in your subscription.
    * @return The VirtualMachineVMImagesOperations value.
    */
    public VirtualMachineVMImageOperations getVirtualMachineVMImagesOperations() {
        return this.virtualMachineVMImages;
    }
   
    /**
    * Initializes a new instance of the ComputeManagementClientImpl class.
    *
    * @param httpBuilder The HTTP client builder.
    * @param executorService The executor service.
    */
    private ComputeManagementClientImpl(HttpClientBuilder httpBuilder, ExecutorService executorService) {
        super(httpBuilder, executorService);
        this.deployments = new DeploymentOperationsImpl(this);
        this.extensionImages = new ExtensionImageOperationsImpl(this);
        this.hostedServices = new HostedServiceOperationsImpl(this);
        this.loadBalancers = new LoadBalancerOperationsImpl(this);
        this.operatingSystems = new OperatingSystemOperationsImpl(this);
        this.serviceCertificates = new ServiceCertificateOperationsImpl(this);
        this.virtualMachineDisks = new VirtualMachineDiskOperationsImpl(this);
        this.virtualMachineExtensions = new VirtualMachineExtensionOperationsImpl(this);
        this.virtualMachines = new VirtualMachineOperationsImpl(this);
        this.virtualMachineOSImages = new VirtualMachineOSImageOperationsImpl(this);
        this.virtualMachineVMImages = new VirtualMachineVMImageOperationsImpl(this);
        this.apiVersion = "2014-05-01";
        this.longRunningOperationInitialTimeout = -1;
        this.longRunningOperationRetryTimeout = -1;
    }
   
    /**
    * Initializes a new instance of the ComputeManagementClientImpl class.
    *
    * @param httpBuilder The HTTP client builder.
    * @param executorService The executor service.
    * @param credentials Required. Gets subscription credentials which uniquely
    * identify Microsoft Azure subscription. The subscription ID forms part of
    * the URI for every service call.
    * @param baseUri Required. Gets the URI used as the base for all cloud
    * service requests.
    */
    @Inject
    public ComputeManagementClientImpl(HttpClientBuilder httpBuilder, ExecutorService executorService, @Named(ManagementConfiguration.SUBSCRIPTION_CLOUD_CREDENTIALS) SubscriptionCloudCredentials credentials, @Named(ManagementConfiguration.URI) URI baseUri) {
        this(httpBuilder, executorService);
        if (credentials == null) {
            throw new NullPointerException("credentials");
        } else {
            this.credentials = credentials;
        }
        if (baseUri == null) {
            try {
                this.baseUri = new URI("https://management.core.windows.net");
            }
            catch (URISyntaxException ex) {
            }
        } else {
            this.baseUri = baseUri;
        }
        this.credentials = credentials;
    }
   
    /**
    * Initializes a new instance of the ComputeManagementClientImpl class.
    *
    * @param httpBuilder The HTTP client builder.
    * @param executorService The executor service.
    * @param credentials Required. Gets subscription credentials which uniquely
    * identify Microsoft Azure subscription. The subscription ID forms part of
    * the URI for every service call.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    */
    public ComputeManagementClientImpl(HttpClientBuilder httpBuilder, ExecutorService executorService, SubscriptionCloudCredentials credentials) throws URISyntaxException {
        this(httpBuilder, executorService);
        if (credentials == null) {
            throw new NullPointerException("credentials");
        }
        this.credentials = credentials;
        this.baseUri = new URI("https://management.core.windows.net");
    }
   
    /**
    * Initializes a new instance of the ComputeManagementClientImpl class.
    *
    * @param httpBuilder The HTTP client builder.
    * @param executorService The executor service.
    * @param credentials Required. Gets subscription credentials which uniquely
    * identify Microsoft Azure subscription. The subscription ID forms part of
    * the URI for every service call.
    * @param baseUri Required. Gets the URI used as the base for all cloud
    * service requests.
    * @param apiVersion Required. Gets the API version.
    * @param longRunningOperationInitialTimeout Required. Gets or sets the
    * initial timeout for Long Running Operations.
    * @param longRunningOperationRetryTimeout Required. Gets or sets the retry
    * timeout for Long Running Operations.
    */
    public ComputeManagementClientImpl(HttpClientBuilder httpBuilder, ExecutorService executorService, SubscriptionCloudCredentials credentials, URI baseUri, String apiVersion, int longRunningOperationInitialTimeout, int longRunningOperationRetryTimeout) {
        this(httpBuilder, executorService);
        this.credentials = credentials;
        this.baseUri = baseUri;
        this.apiVersion = apiVersion;
        this.longRunningOperationInitialTimeout = longRunningOperationInitialTimeout;
        this.longRunningOperationRetryTimeout = longRunningOperationRetryTimeout;
    }
   
    /**
    * Initializes a new instance of the ComputeManagementClientImpl class.
    *
    * @param httpBuilder The HTTP client builder.
    * @param executorService The executor service.
    */
    protected ComputeManagementClientImpl newInstance(HttpClientBuilder httpBuilder, ExecutorService executorService) {
        return new ComputeManagementClientImpl(httpBuilder, executorService, this.getCredentials(), this.getBaseUri(), this.getApiVersion(), this.getLongRunningOperationInitialTimeout(), this.getLongRunningOperationRetryTimeout());
    }
   
    /**
    * The Get Operation Status operation returns the status of the specified
    * operation. After calling an asynchronous operation, you can call Get
    * Operation Status to determine whether the operation has succeeded,
    * failed, or is still in progress.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx for
    * more information)
    *
    * @param requestId Required. The request ID for the request you wish to
    * track. The request ID is returned in the x-ms-request-id response header
    * for every request.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public Future<OperationStatusResponse> getOperationStatusAsync(final String requestId) {
        return this.getExecutorService().submit(new Callable<OperationStatusResponse>() {
            @Override
            public OperationStatusResponse call() throws Exception {
                return getOperationStatus(requestId);
            }
         });
    }
   
    /**
    * The Get Operation Status operation returns the status of the specified
    * operation. After calling an asynchronous operation, you can call Get
    * Operation Status to determine whether the operation has succeeded,
    * failed, or is still in progress.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx for
    * more information)
    *
    * @param requestId Required. The request ID for the request you wish to
    * track. The request ID is returned in the x-ms-request-id response header
    * for every request.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public OperationStatusResponse getOperationStatus(String requestId) throws IOException, ServiceException, ParserConfigurationException, SAXException {
        // Validate
        if (requestId == null) {
            throw new NullPointerException("requestId");
        }
       
        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("requestId", requestId);
            CloudTracing.enter(invocationId, this, "getOperationStatusAsync", tracingParameters);
        }
       
        // Construct URL
        String url = "/" + (this.getCredentials().getSubscriptionId() != null ? this.getCredentials().getSubscriptionId().trim() : "") + "/operations/" + requestId.trim();
        String baseUrl = this.getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
       
        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);
       
        // Set Headers
        httpRequest.setHeader("x-ms-version", "2014-05-01");
       
        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse, httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }
           
            // Create Result
            OperationStatusResponse result = null;
            // Deserialize Response
            InputStream responseContent = httpResponse.getEntity().getContent();
            result = new OperationStatusResponse();
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            documentBuilderFactory.setNamespaceAware(true);
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));
           
            Element operationElement = XmlUtility.getElementByTagNameNS(responseDoc, "http://schemas.microsoft.com/windowsazure", "Operation");
            if (operationElement != null) {
                Element idElement = XmlUtility.getElementByTagNameNS(operationElement, "http://schemas.microsoft.com/windowsazure", "ID");
                if (idElement != null) {
                    String idInstance;
                    idInstance = idElement.getTextContent();
                    result.setId(idInstance);
                }
               
                Element statusElement = XmlUtility.getElementByTagNameNS(operationElement, "http://schemas.microsoft.com/windowsazure", "Status");
                if (statusElement != null) {
                    OperationStatus statusInstance;
                    statusInstance = OperationStatus.valueOf(statusElement.getTextContent());
                    result.setStatus(statusInstance);
                }
               
                Element httpStatusCodeElement = XmlUtility.getElementByTagNameNS(operationElement, "http://schemas.microsoft.com/windowsazure", "HttpStatusCode");
                if (httpStatusCodeElement != null) {
                    Integer httpStatusCodeInstance;
                    httpStatusCodeInstance = Integer.valueOf(httpStatusCodeElement.getTextContent());
                    result.setHttpStatusCode(httpStatusCodeInstance);
                }
               
                Element errorElement = XmlUtility.getElementByTagNameNS(operationElement, "http://schemas.microsoft.com/windowsazure", "Error");
                if (errorElement != null) {
                    OperationStatusResponse.ErrorDetails errorInstance = new OperationStatusResponse.ErrorDetails();
                    result.setError(errorInstance);
                   
                    Element codeElement = XmlUtility.getElementByTagNameNS(errorElement, "http://schemas.microsoft.com/windowsazure", "Code");
                    if (codeElement != null) {
                        String codeInstance;
                        codeInstance = codeElement.getTextContent();
                        errorInstance.setCode(codeInstance);
                    }
                   
                    Element messageElement = XmlUtility.getElementByTagNameNS(errorElement, "http://schemas.microsoft.com/windowsazure", "Message");
                    if (messageElement != null) {
                        String messageInstance;
                        messageInstance = messageElement.getTextContent();
                        errorInstance.setMessage(messageInstance);
                    }
                }
            }
           
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }
           
            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }
   
    /**
    * Parse enum values for type CertificateFormat.
    *
    * @param value The value to parse.
    * @return The enum value.
    */
     static CertificateFormat parseCertificateFormat(String value) {
        if ("pfx".equalsIgnoreCase(value)) {
            return CertificateFormat.Pfx;
        }
        if ("cer".equalsIgnoreCase(value)) {
            return CertificateFormat.Cer;
        }
        throw new IllegalArgumentException("value");
    }
   
    /**
    * Convert an enum of type CertificateFormat to a string.
    *
    * @param value The value to convert to a string.
    * @return The enum value as a string.
    */
     static String certificateFormatToString(CertificateFormat value) {
        if (value == CertificateFormat.Pfx) {
            return "pfx";
        }
        if (value == CertificateFormat.Cer) {
            return "cer";
        }
        throw new IllegalArgumentException("value");
    }
   
    /**
    * Parse enum values for type LoadBalancerProbeTransportProtocol.
    *
    * @param value The value to parse.
    * @return The enum value.
    */
     static LoadBalancerProbeTransportProtocol parseLoadBalancerProbeTransportProtocol(String value) {
        if ("tcp".equalsIgnoreCase(value)) {
            return LoadBalancerProbeTransportProtocol.Tcp;
        }
        if ("http".equalsIgnoreCase(value)) {
            return LoadBalancerProbeTransportProtocol.Http;
        }
        throw new IllegalArgumentException("value");
    }
   
    /**
    * Convert an enum of type LoadBalancerProbeTransportProtocol to a string.
    *
    * @param value The value to convert to a string.
    * @return The enum value as a string.
    */
     static String loadBalancerProbeTransportProtocolToString(LoadBalancerProbeTransportProtocol value) {
        if (value == LoadBalancerProbeTransportProtocol.Tcp) {
            return "tcp";
        }
        if (value == LoadBalancerProbeTransportProtocol.Http) {
            return "http";
        }
        throw new IllegalArgumentException("value");
    }
}
TOP

Related Classes of com.microsoft.windowsazure.management.compute.ComputeManagementClientImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.