All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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
		);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy