@SdkInternalApi
    final PutDashboardResult executePutDashboard(PutDashboardRequest putDashboardRequest) {

        ExecutionContext executionContext = createExecutionContext(putDashboardRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<PutDashboardRequest> request = null;
        Response<PutDashboardResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new PutDashboardRequestMarshaller().marshall(super.beforeMarshalling(putDashboardRequest));
                // Binds the request metrics to the current request.
                request.setAWSRequestMetrics(awsRequestMetrics);
                request.addHandlerContext(HandlerContextKey.CLIENT_ENDPOINT, endpoint);
                request.addHandlerContext(HandlerContextKey.ENDPOINT_OVERRIDDEN, isEndpointOverridden());
                request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
                request.addHandlerContext(HandlerContextKey.SERVICE_ID, "CloudWatch");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "PutDashboard");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

            } finally {
                awsRequestMetrics.endEvent(Field.RequestMarshallTime);
            }

            StaxResponseHandler<PutDashboardResult> responseHandler = new StaxResponseHandler<PutDashboardResult>(new PutDashboardResultStaxUnmarshaller());

            response = invoke(request, responseHandler, executionContext);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
Creates a dashboard if it does not already exist, or updates an existing dashboard. If you update a dashboard,
the entire contents are replaced with what you specify here.
</p>
<p>
All dashboards in your account are global, not region-specific.
</p>
<p>
A simple way to create a dashboard using <code>PutDashboard</code> is to copy an existing dashboard. To copy an
existing dashboard using the console, you can load the dashboard and then use the View/edit source command in the
Actions menu to display the JSON block for that dashboard. Another way to copy a dashboard is to use
<code>GetDashboard</code>, and then use the data returned within <code>DashboardBody</code> as the template for
the new dashboard when you call <code>PutDashboard</code>.
</p>
<p>
When you create a dashboard with <code>PutDashboard</code>, a good practice is to add a text widget at the top of
the dashboard with a message that the dashboard was created by script and should not be changed in the console.
This message could also point console users to the location of the <code>DashboardBody</code> script or the
CloudFormation template used to create the dashboard.
</p>

@param putDashboardRequest
@return Result of the PutDashboard operation returned by the service.
@throws DashboardInvalidInputErrorException
        Some part of the dashboard data is invalid.
@throws InternalServiceException
        Request processing has failed due to some unknown error, exception, or failure.
@sample AmazonCloudWatch.PutDashboard
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/monitoring-2010-08-01/PutDashboard" target="_top">AWS API
     Documentation</a>
aws-java-sdk-cloudwatch/src/main/java/com/amazonaws/services/cloudwatch/AmazonCloudWatchClient.java