package org.elasticsearch.plan.a; /* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch 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. */ import java.util.List; import java.util.Map; import static org.elasticsearch.plan.a.Definition.*; public class Default { static class Standard { final Type voidType; final Type boolType; final Type byteType; final Type shortType; final Type charType; final Type intType; final Type longType; final Type floatType; final Type doubleType; final Type objectType; final Type stringType; final Type execType; final Type listType; final Type mapType; final Type smapType; Standard(final Definition definition) { validateExact(definition, "void", void.class); validateExact(definition, "bool", boolean.class); validateExact(definition, "byte", byte.class); validateExact(definition, "short", short.class); validateExact(definition, "char", char.class); validateExact(definition, "int", int.class); validateExact(definition, "long", long.class); validateExact(definition, "float", float.class); validateExact(definition, "double", double.class); validateExact(definition, "object", Object.class); validateExact(definition, "string", String.class); validateSubclass(definition, "exec", Executable.class); validateSubclass(definition, "list", List.class); validateSubclass(definition, "map", Map.class); validateSubclass(definition, "smap", Map.class); voidType = getTypeFromCanonicalName(definition, "void"); boolType = getTypeFromCanonicalName(definition, "bool"); byteType = getTypeFromCanonicalName(definition, "byte"); shortType = getTypeFromCanonicalName(definition, "short"); charType = getTypeFromCanonicalName(definition, "char"); intType = getTypeFromCanonicalName(definition, "int"); longType = getTypeFromCanonicalName(definition, "long"); floatType = getTypeFromCanonicalName(definition, "float"); doubleType = getTypeFromCanonicalName(definition, "double"); objectType = getTypeFromCanonicalName(definition, "object"); stringType = getTypeFromCanonicalName(definition, "string"); execType = getTypeFromCanonicalName(definition, "exec"); listType = getTypeFromCanonicalName(definition, "list"); mapType = getTypeFromCanonicalName(definition, "map"); smapType = getTypeFromCanonicalName(definition, "smap"); } private void validateExact(final Definition definition, final String name, final Class clazz) { final Definition.Struct struct = definition.structs.get(name); if (struct == null || !clazz.equals(struct.clazz)) { throw new IllegalArgumentException("Missing required definition of" + " struct [" + name + "] with class type of [" + clazz.getCanonicalName() + "]"); } } private void validateSubclass(final Definition definition, final String name, final Class clazz) { final Definition.Struct struct = definition.structs.get(name); if (struct == null) { throw new IllegalArgumentException("Missing required definition of" + " struct [" + name + "] with super class type of [" + clazz.getCanonicalName() + "]"); } try { struct.clazz.asSubclass(clazz); } catch (ClassCastException exception) { throw new IllegalArgumentException("Missing required definition of" + " struct [" + name + "] with super class type of [" + clazz.getCanonicalName() + "]"); } } } final static Definition DEFAULT_DEFINITION; final static Standard DEFAULT_STANDARD; final static Caster DEFAULT_CASTER; static { DEFAULT_DEFINITION = loadFromProperties(); DEFAULT_STANDARD = new Standard(DEFAULT_DEFINITION); DEFAULT_CASTER = new Caster(DEFAULT_DEFINITION, DEFAULT_STANDARD); } private Default() {} }