/* * Copyright 2015-2017 Amazon Technologies, Inc. * * 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://aws.amazon.com/apache2.0 * * This file 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 com.amazonaws.services.dynamodbv2.datamodeling; import java.lang.reflect.Method; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import com.amazonaws.annotation.SdkInternalApi; import com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties.Bean; /** * Reflection assistant for {@link DynamoDBMapper} * * @deprecated Replaced by {@link StandardBeanProperties}/{@link StandardModelFactories} */ @Deprecated @SdkInternalApi final class DynamoDBMappingsRegistry { /** * The default instance. */ private static final DynamoDBMappingsRegistry INSTANCE = new DynamoDBMappingsRegistry(); /** * Gets the default instance. * @return The default instance. */ static final DynamoDBMappingsRegistry instance() { return INSTANCE; } /** * The cache of class to mapping definition. */ private final ConcurrentMap<Class<?>, Mappings> mappings = new ConcurrentHashMap<Class<?>, Mappings>(); /** * Gets the mapping definition for a given class. * @param clazz The class. * @return The mapping definition. */ final Mappings mappingsOf(final Class<?> clazz) { if (!mappings.containsKey(clazz)) { mappings.putIfAbsent(clazz, new Mappings(clazz)); } return mappings.get(clazz); } /** * Holds the properties for mapping an object. */ static final class Mappings { private final Map<String, Mapping> byNames = new HashMap<String, Mapping>(); private Mappings(final Class<?> clazz) { for (final Map.Entry<String,Bean<Object,Object>> bean : StandardBeanProperties.of((Class<Object>)clazz).map().entrySet()) { final Mapping mapping = new Mapping(bean.getValue()); byNames.put(mapping.getAttributeName(), mapping); } } final Collection<Mapping> getMappings() { return byNames.values(); } } /** * Holds the properties for mapping an object attribute. */ static final class Mapping { private final Bean<Object,Object> bean; private Mapping(final Bean<Object,Object> bean) { this.bean = bean; } final Method getter() { return bean.type().getter(); } final boolean isPrimaryKey() { return bean.properties().keyType() != null; } final boolean isVersion() { return bean.properties().versioned(); } final String getAttributeName() { return bean.properties().attributeName(); } } }