/** * Copyright (C) 2012 the original author or authors. * * 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. */ package co.jirm.mapper; import co.jirm.mapper.converter.DefaultParameterConverter; import co.jirm.mapper.converter.JacksonSqlObjectConverter; import co.jirm.mapper.converter.SqlObjectConverter; import co.jirm.mapper.converter.SqlParameterConverter; import co.jirm.mapper.definition.DefaultNamingStrategy; import co.jirm.mapper.definition.NamingStrategy; import co.jirm.mapper.definition.SqlObjectDefinition; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; public class SqlObjectConfig { private final NamingStrategy namingStrategy; private final SqlParameterConverter converter; private final SqlObjectConverter objectMapper; private final transient Cache<Class<?>, SqlObjectDefinition<?>> cache; private final int maximumLoadDepth = 4; protected SqlObjectConfig( NamingStrategy namingStrategy, SqlObjectConverter objectMapper, SqlParameterConverter converter, Cache<Class<?>, SqlObjectDefinition<?>> cache) { super(); this.namingStrategy = namingStrategy; this.converter = converter; this.objectMapper = objectMapper; this.cache = cache; } public NamingStrategy getNamingStrategy() { return namingStrategy; } public SqlParameterConverter getConverter() { return converter; } public SqlObjectConverter getObjectMapper() { return objectMapper; } public <T> SqlObjectDefinition<T> resolveObjectDefinition(Class<T> objectType) { return SqlObjectDefinition.fromClass(objectType, this); } public int getMaximumLoadDepth() { return maximumLoadDepth; } public Cache<Class<?>, SqlObjectDefinition<?>> getCache() { return cache; } public static SqlObjectConfig DEFAULT = new SqlObjectConfig(DefaultNamingStrategy.INSTANCE, new JacksonSqlObjectConverter(), new DefaultParameterConverter(), CacheBuilder.newBuilder() .weakKeys() .maximumSize(1000) .<Class<?>, SqlObjectDefinition<?>>build()); }