content: /*
   * Copyright 2010-2015 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.service.apigateway.importer.impl;
  
  import com.amazonaws.service.apigateway.importer.RamlApiFileImporter;
  import com.amazonaws.service.apigateway.importer.RamlApiImporter;
  import com.amazonaws.util.json.JSONObject;
  import com.google.inject.Inject;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.raml.model.Raml;
  import org.raml.parser.visitor.RamlDocumentBuilder;
  
  import java.io.File;
  
  import static java.lang.String.format;
  
  public class ApiGatewayRamlFileImporter implements RamlApiFileImporter {
      private static final Log LOG = LogFactory.getLog(ApiGatewayRamlFileImporter.class);
  
      private final RamlDocumentBuilder builder;
      private final RamlApiImporter client;
  
      @Inject
      public ApiGatewayRamlFileImporter(RamlDocumentBuilder builder, RamlApiImporter client) {
          this.builder = builder;
          this.client = client;
      }
  
      @Override
      public String importApi(String filePath, JSONObject config) {
          LOG.info(format("Attempting to create API from RAML definition. " +
                  "RAML file: %s", filePath));
  
          final Raml raml = parse(filePath);
  
          return client.createApi(raml, new File(filePath).getName(), config);
      }
  
      @Override
      public void updateApi(String apiId, String filePath, JSONObject config) {
          LOG.info(format("Attempting to update API from RAML definition. " +
                  "API identifier: %s RAML file: %s", apiId, filePath));
  
          final Raml raml = parse(filePath);
  
          client.updateApi(apiId, raml, config);
      }
  
      @Override
      public void deploy(String apiId, String deploymentStage) {
          client.deploy(apiId, deploymentStage);
      }
  
      @Override
      public void deleteApi(String apiId) {
          client.deleteApi(apiId);
      }
  
      private Raml parse(String filePath) {
          final Raml raml = builder.build(filePath);
  
          // TODO: Error handling.
  
          return raml;
      }
  
  }
  