/* * Copyright 2015-2017 Amazon.com, Inc. or its affiliates. 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. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file 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. */ package com.amazonaws.services.ec2.model.transform; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import com.amazonaws.AmazonWebServiceRequest; import com.amazonaws.Request; import com.amazonaws.Response; import com.amazonaws.handlers.RequestHandler2; import com.amazonaws.services.ec2.model.DescribeSpotFleetRequestHistoryRequest; import com.amazonaws.services.ec2.model.RequestSpotFleetRequest; /** * A request handler that strips out millisecond precision from requests to * RequestSpotFleet and DescribeSpotFleetRequestHistory, which don't expect * timestamps to be so precise. */ public final class TimestampFormatRequestHandler extends RequestHandler2 { private static final Pattern PATTERN = Pattern.compile("\\.\\d\\d\\dZ"); private static final String START_TIME = "StartTime"; private static final String VALID_FROM = "SpotFleetRequestConfig.ValidFrom"; private static final String VALID_UNTIL = "SpotFleetRequestConfig.ValidUntil"; @Override public void beforeRequest(Request<?> request) { AmazonWebServiceRequest original = request.getOriginalRequest(); if (original instanceof DescribeSpotFleetRequestHistoryRequest) { Map<String, List<String>> params = request.getParameters(); List<String> startTime = params.get(START_TIME); if (startTime != null && !startTime.isEmpty()) { params.put(START_TIME, Arrays.asList(sanitize(startTime.get(0)))); } } else if (original instanceof RequestSpotFleetRequest) { Map<String, List<String>> params = request.getParameters(); List<String> validFrom = params.get(VALID_FROM); List<String> validUntil = params.get(VALID_UNTIL); if (validFrom != null && !validFrom.isEmpty()) { params.put(VALID_FROM, Arrays.asList(sanitize(validFrom.get(0)))); } if (validUntil != null && !validUntil.isEmpty()) { params.put(VALID_UNTIL, Arrays.asList(sanitize(validUntil.get(0)))); } } } private String sanitize(String input) { return PATTERN.matcher(input).replaceFirst("Z"); } @Override public void afterResponse(Request<?> request, Response<?> response) { } @Override public void afterError( Request<?> request, Response<?> response, Exception e) { } }