org.hibernate.validator.internal.metadata.provider.MetaDataProviderKeyedByClassName Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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 org.hibernate.validator.internal.metadata.provider;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.raw.BeanConfiguration;
import org.hibernate.validator.internal.metadata.raw.ConfigurationSource;
import org.hibernate.validator.internal.metadata.raw.ConstrainedElement;
import org.hibernate.validator.internal.util.Contracts;
import org.hibernate.validator.internal.util.classhierarchy.ClassHierarchyHelper;
import org.hibernate.validator.spi.group.DefaultGroupSequenceProvider;
import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList;
import static org.hibernate.validator.internal.util.CollectionHelper.newHashMap;
/**
* Base implementation for {@link MetaDataProvider}s which cache the {@code BeanConfiguration} by class name.
*
* @author Gunnar Morling
* @author Hardy Ferentschik
*/
public abstract class MetaDataProviderKeyedByClassName implements MetaDataProvider {
protected final ConstraintHelper constraintHelper;
// cached against the fqcn of a class. not a class instance itself (HV-479)
private final Map> configuredBeans;
public MetaDataProviderKeyedByClassName(ConstraintHelper constraintHelper) {
this.constraintHelper = constraintHelper;
this.configuredBeans = newHashMap();
}
@Override
public List> getBeanConfigurationForHierarchy(Class beanClass) {
List> configurations = newArrayList();
for ( Class clazz : ClassHierarchyHelper.getHierarchy( beanClass ) ) {
BeanConfiguration configuration = getBeanConfiguration( clazz );
if ( configuration != null ) {
configurations.add( configuration );
}
}
return configurations;
}
protected void addBeanConfiguration(Class beanClass, BeanConfiguration beanConfiguration) {
configuredBeans.put( beanClass.getName(), beanConfiguration );
}
@SuppressWarnings("unchecked")
protected BeanConfiguration getBeanConfiguration(Class beanClass) {
Contracts.assertNotNull( beanClass );
return (BeanConfiguration) configuredBeans.get( beanClass.getName() );
}
protected BeanConfiguration createBeanConfiguration(ConfigurationSource source,
Class beanClass,
Set constrainedElements,
List> defaultGroupSequence,
DefaultGroupSequenceProvider defaultGroupSequenceProvider) {
return new BeanConfiguration(
source,
beanClass,
constrainedElements,
defaultGroupSequence,
defaultGroupSequenceProvider
);
}
}