/** * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * Copyright © 2017 Amdocs * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License 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. * ============LICENSE_END========================================================= * * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ package org.onap.aai.sparky.sync; import java.io.IOException; import org.onap.aai.sparky.dal.exception.ElasticSearchOperationException; import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; import org.onap.aai.sparky.util.ConfigHelper; import org.onap.aai.sparky.viewandinspect.config.TierSupportUiConstants; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; public class ElasticSearchSchemaFactory { private static final String SETTINGS = "settings"; private static final String MAPPINGS = "mappings"; private static ObjectMapper mapper = new ObjectMapper(); protected static String getConfigAsString(String configItem, String configFileName) throws ElasticSearchOperationException { String indexConfig = null; try { indexConfig = ConfigHelper.getFileContents(configFileName); } catch (IOException exc) { throw new ElasticSearchOperationException( "Failed to read index " + configItem + " from file = " + configFileName + ".", exc); } if (indexConfig == null) { throw new ElasticSearchOperationException( "Failed to load index " + configItem + " with filename = " + configFileName + "."); } return indexConfig; } public static String getIndexSchema(ElasticSearchSchemaConfig schemaConfig) throws ElasticSearchOperationException { JsonNode esSettingsNode = null; JsonNode esMappingsNodes = null; try { if (schemaConfig.getIndexSettingsFileName() != null) { esSettingsNode = mapper.readTree(getConfigAsString(SETTINGS, TierSupportUiConstants.getConfigPath(schemaConfig.getIndexSettingsFileName()))); } if (schemaConfig.getIndexMappingsFileName() != null) { esMappingsNodes = mapper.readTree(getConfigAsString(MAPPINGS, TierSupportUiConstants.getConfigPath(schemaConfig.getIndexMappingsFileName()))); } } catch (IOException e1) { throw new ElasticSearchOperationException( "Caught an exception building initial ES index. Error: " + e1.getMessage()); } ObjectNode esConfig = null; ObjectNode mappings = (ObjectNode) mapper.createObjectNode().set(schemaConfig.getIndexDocType(), esMappingsNodes); if (esSettingsNode == null) { esConfig = (ObjectNode) mapper.createObjectNode().set(MAPPINGS, mappings); } else { esConfig = (ObjectNode) mapper.createObjectNode().set(SETTINGS, esSettingsNode); esConfig.set(MAPPINGS, mappings); } try { return mapper.writeValueAsString(esConfig); } catch (JsonProcessingException exc) { throw new ElasticSearchOperationException("Error getting object node as string", exc); } } }