/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * * 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. */ package org.apache.streams.elasticsearch; import org.apache.streams.core.StreamsDatum; import com.fasterxml.jackson.databind.JsonNode; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * Utility class for handling Elasticsearch Metadata maps. */ public class ElasticsearchMetadataUtil { /** * get Index to use based on supplied parameters. * * @param metadata metadata * @param config config * @return result */ public static String getIndex(Map<String, Object> metadata, ElasticsearchWriterConfiguration config) { String index = null; if ( metadata != null && metadata.containsKey("index")) { index = (String) metadata.get("index"); } if ( index == null || (config.getForceUseConfig() != null && config.getForceUseConfig())) { index = config.getIndex(); } return index; } /** * get Index to use based on supplied parameters. * * @param metadata metadata * @param config config * @return result */ public static String getIndex(Map<String, Object> metadata, ElasticsearchReaderConfiguration config) { String index = null; if ( metadata != null && metadata.containsKey("index")) { index = (String) metadata.get("index"); } if ( index == null ) { index = config.getIndexes().get(0); } return index; } /** * get Type to use based on supplied parameters. * * @param metadata metadata * @param config config * @return result */ public static String getType(Map<String, Object> metadata, ElasticsearchWriterConfiguration config) { String type = null; if ( metadata != null && metadata.containsKey("type")) { type = (String) metadata.get("type"); } if (type == null || (config.getForceUseConfig() != null && config.getForceUseConfig())) { type = config.getType(); } return type; } /** * get Type to use based on supplied parameters. * * @param metadata metadata * @param config config * @return result */ public static String getType(Map<String, Object> metadata, ElasticsearchReaderConfiguration config) { String type = null; if ( metadata != null && metadata.containsKey("type")) { type = (String) metadata.get("type"); } if (type == null) { type = config.getTypes().get(0); } return type; } /** * get id to use based on supplied parameters. * * @param datum datum * @return result */ public static String getId(StreamsDatum datum) { String id = datum.getId(); Map<String, Object> metadata = datum.getMetadata(); if ( id == null && metadata != null && metadata.containsKey("id")) { id = (String) datum.getMetadata().get("id"); } return id; } /** * get id to use based on supplied parameters. * * @param metadata metadata * @return result */ public static String getId(Map<String, Object> metadata) { return (String) metadata.get("id"); } /** * get parent id to use based on supplied parameters. * * @param datum datum * @return result */ static String getParent(StreamsDatum datum) { String parent = null; Map<String, Object> metadata = datum.getMetadata(); if (metadata != null && metadata.containsKey("parent")) { parent = (String) datum.getMetadata().get("parent"); } return parent; } /** * get routing id to use based on supplied parameters. * * @param datum datum * @return result */ static String getRouting(StreamsDatum datum) { String routing = null; Map<String, Object> metadata = datum.getMetadata(); if (metadata != null && metadata.containsKey("routing")) { routing = (String) datum.getMetadata().get("routing"); } return routing; } /** * get JsonNode as Map. * @param node node * @return result */ // TODO: move this to a utility package public static Map<String, Object> asMap(JsonNode node) { Iterator<Map.Entry<String, JsonNode>> iterator = node.fields(); Map<String, Object> ret = new HashMap<>(); Map.Entry<String, JsonNode> entry; while (iterator.hasNext()) { entry = iterator.next(); if ( entry.getValue().asText() != null ) { ret.put(entry.getKey(), entry.getValue().asText()); } } return ret; } }