class VnfmAdapterServiceProviderImpl implements VnfmAdapterServiceProvider {

    @Override
    public Optional<CreateVnfResponse> invokeCreateInstantiationRequest(final String vnfId,
            final CreateVnfRequest request) {
        try {
            final String url = urlProvider.getCreateInstantiateUrl(vnfId);

            final ResponseEntity<CreateVnfResponse> response =
                    httpServiceProvider.postHttpRequest(request, url, CreateVnfResponse.class);

            final HttpStatus httpStatus = response.getStatusCode();
            if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
                LOGGER.error("Unable to invoke HTTP POST using URL: {}, Response Code: {}", url, httpStatus.value());
                return Optional.absent();
            }

            if (!response.hasBody()) {
                LOGGER.error(RECEIVED_RESPONSE_WITHOUT_BODY, response);
                return Optional.absent();
            }

            final CreateVnfResponse createVnfResponse = response.getBody();

            if (createVnfResponse.getJobId() == null || createVnfResponse.getJobId().isEmpty()) {
                LOGGER.error("Received invalid instantiation response: {}", response);
                return Optional.absent();
            }

            return Optional.of(createVnfResponse);
        } catch (final RestProcessingException | InvalidRestRequestException
                | HttpResouceNotFoundException httpInvocationException) {
            LOGGER.error("Unexpected error while processing create and instantiation request", httpInvocationException);
            return Optional.absent();
        }

    }

    @Autowired public  VnfmAdapterServiceProviderImpl(final VnfmAdapterUrlProvider urlProvider,
            final HttpRestServiceProvider httpServiceProvider);

}