Only load SchemaService related beans in aai-common when schema.translator.list=schem...
[aai/aai-common.git] / aai-schema-ingest / src / main / java / org / onap / aai / setup / SchemaServiceTranslator.java
index 21082fa..ec6e41a 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.aai.setup;
 
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.onap.aai.restclient.RestClient;
-import org.onap.aai.restclient.RestClientFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.core.io.Resource;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
-
-import javax.ws.rs.HttpMethod;
-import java.io.*;
-import java.util.*;
+import org.springframework.stereotype.Component;
 
 /**
  * <b>AAIConfigTranslator</b> is responsible for looking at the schema files and
  * edge files based on the available versions Also has the ability to exclude
  * them based on the node.exclusion.pattern
  */
+@Component
+@ConditionalOnProperty(name = "schema.translator.list", havingValue = "schema-service", matchIfMissing = false)
 public class SchemaServiceTranslator extends Translator {
 
-       private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(SchemaServiceTranslator.class);
-
-       private static final String SchemaServiceClientType = "schema.service";
-
-       @Value("${schema.service.nodes.endpoint}")
-       private String nodeSchemaUri;
+    private static final Logger LOGGER = LoggerFactory.getLogger(SchemaServiceTranslator.class);
 
-       @Value("${schema.service.edges.endpoint}")
-       private String edgeSchemaUri;
+    @Value("${schema.service.nodes.endpoint}")
+    private String nodeSchemaUri;
 
-       @Autowired
-       private RestClientFactory restClientFactory;
+    @Value("${schema.service.edges.endpoint}")
+    private String edgeSchemaUri;
 
-       public SchemaServiceTranslator(SchemaVersions schemaVersions) {
-               super(schemaVersions);
-       }
+    @Autowired
+    private RestClient restClient;
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.onap.aai.setup.ConfigTranslator#getNodeFiles()
-        */
+    public SchemaServiceTranslator(SchemaVersions schemaVersions) {
+        super(schemaVersions);
+    }
 
-       @Override
-       public List<InputStream> getVersionNodeStream(SchemaVersion version) throws IOException {
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.onap.aai.setup.ConfigTranslator#getNodeFiles()
+     */
 
-               List<InputStream> inputStreams = new ArrayList<>();
-               String content = "";
-               String uri = nodeSchemaUri + version.toString();
-               Map<String, String> headersMap = new HashMap<>();
+    @Override
+    public List<InputStream> getVersionNodeStream(SchemaVersion version) throws IOException {
 
-               headersMap.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML.toString());
+        final Map<String, String> headersMap = new HashMap<>();
+        headersMap.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML.toString());
         headersMap.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML.toString());
-               RestClient restClient = restClientFactory.getRestClient(SchemaServiceClientType);
-               ResponseEntity<Resource> schemaResponse = restClient.getGetResource(content, uri,
-                               headersMap);
-               LOGGER.debug("SchemaResponse Status code" + schemaResponse.getStatusCode());
-               inputStreams.add(schemaResponse.getBody().getInputStream());
-               return inputStreams;
-       }
-
-       @Override
-       public List<String> getJsonPayload(SchemaVersion version) throws IOException {
-               /*
-                * Call Schema MS to get versions using RestTemplate
-                */
-               List<String> inputStreams = new ArrayList<>();
-               String content = "";
-               String uri = edgeSchemaUri + version.toString();
-               Map<String, String> headersMap = new HashMap<>();
-
-               RestClient restClient = restClientFactory.getRestClient(SchemaServiceClientType);
-
-        ResponseEntity<String> schemaResponse = restClient.getGetRequest(content, uri,
-                               headersMap);
-               LOGGER.debug("SchemaResponse Status code" + schemaResponse.getStatusCode());
-               inputStreams.add(schemaResponse.getBody());
-               return inputStreams;
-
-       }
+        final String content = "";
+        final String uri = nodeSchemaUri + version.toString();
+        ResponseEntity<Resource> schemaResponse = restClient.getGetResource(content, uri, headersMap);
+
+        verifySchemaServiceResponse(schemaResponse.getStatusCode());
+        LOGGER.debug("SchemaResponse Status code" + schemaResponse.getStatusCode());
+        
+        Resource resultBody = schemaResponse.getBody();
+        return resultBody != null
+            ? Collections.singletonList(resultBody.getInputStream())
+            : Collections.emptyList();
+    }
+
+    @Override
+    public List<String> getJsonPayload(SchemaVersion version) throws IOException {
+        /*
+         * Call Schema MS to get versions using RestTemplate
+         */
+        final String content = "";
+        final String uri = edgeSchemaUri + version.toString();
+        final Map<String, String> headersMap = new HashMap<>();
+
+        ResponseEntity<String> schemaResponse = restClient.getGetRequest(content, uri, headersMap);
+        verifySchemaServiceResponse(schemaResponse.getStatusCode());
+        LOGGER.debug("SchemaResponse Status code" + schemaResponse.getStatusCode());
+        return Collections.singletonList(schemaResponse.getBody());
+
+    }
+
+    private void verifySchemaServiceResponse(HttpStatus statusCode) throws IOException {
+        if (statusCode != HttpStatus.OK) {
+            LOGGER.error("Please check the Schema Service. It returned with the status code {}", statusCode);
+            throw new IOException("SchemaService is not available");
+        }
+    }
 
 }