/* * Licensed to CRATE Technology GmbH ("Crate") under one or more contributor * license agreements. See the NOTICE file distributed with this work for * additional information regarding copyright ownership. Crate licenses * this file to you 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. * * However, if you have executed another commercial license agreement * with Crate these terms will supersede the license and you may use the * software solely pursuant to the terms of the relevant commercial agreement. */ package io.crate.metadata.doc; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import io.crate.metadata.ColumnIdent; import io.crate.types.DataType; import org.elasticsearch.common.collect.MapBuilder; import org.elasticsearch.common.collect.Tuple; import javax.annotation.Nullable; import java.util.Collection; import java.util.List; import java.util.Map; public class PartitionedByMappingExtractor { private static final Function<List<String>, Tuple<ColumnIdent, DataType>> EXTRACTOR_FUNCTION = new Function<List<String>, Tuple<ColumnIdent, DataType>>() { @Nullable @Override public Tuple<ColumnIdent, DataType> apply(List<String> partitioned) { ColumnIdent ident = ColumnIdent.fromPath(partitioned.get(0)); assert ident != null : "ident must not be null"; DataType type = DocIndexMetaData.getColumnDataType(new MapBuilder<String, Object>().put("type", partitioned.get(1)).map()); return new Tuple<>(ident, type); } }; @SuppressWarnings("unchecked") public static Iterable<Tuple<ColumnIdent, DataType>> extractPartitionedByColumns(Map<String, Object> mapping) { Map<String, Object> metaMap = (Map<String, Object>) mapping.get("_meta"); if (metaMap != null) { Object partitionedByColumnsMaybe = metaMap.get("partitioned_by"); if (partitionedByColumnsMaybe != null && partitionedByColumnsMaybe instanceof List) { List<List<String>> partitionedByColumns = (List<List<String>>) partitionedByColumnsMaybe; return extractPartitionedByColumns(partitionedByColumns); } } return ImmutableList.of(); } public static Iterable<Tuple<ColumnIdent, DataType>> extractPartitionedByColumns(Collection<List<String>> partitionedByList) { return FluentIterable.from(partitionedByList).transform(EXTRACTOR_FUNCTION); } }