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

org.hibernate.validator.internal.metadata.aggregated.NonContainerCascadingMetaData Maven / Gradle / Ivy

There is a newer version: 8.0.1.Final
Show newest version
/*
 * Hibernate Validator, declare and validate application constraints
 *
 * License: Apache License, Version 2.0
 * See the license.txt file in the root directory or .
 */
package org.hibernate.validator.internal.metadata.aggregated;

import java.lang.invoke.MethodHandles;
import java.lang.reflect.TypeVariable;
import java.util.Set;

import javax.validation.metadata.GroupConversionDescriptor;

import org.hibernate.validator.internal.engine.valueextraction.AnnotatedObject;
import org.hibernate.validator.internal.engine.valueextraction.ValueExtractorManager;
import org.hibernate.validator.internal.util.logging.Log;
import org.hibernate.validator.internal.util.logging.LoggerFactory;

/**
 * A simplified view of the cascading validation metadata for an element that does not contain any container element
 * cascading.
 * 

* Note that the element might be a container but doesn't have any cascading metadata on the container elements. * * @author Guillaume Smet * @author Marko Bekhta */ public class NonContainerCascadingMetaData implements CascadingMetaData { private static final Log LOG = LoggerFactory.make( MethodHandles.lookup() ); private static final NonContainerCascadingMetaData NON_CASCADING = new NonContainerCascadingMetaData( false, GroupConversionHelper.EMPTY ); private static final NonContainerCascadingMetaData CASCADING_WITHOUT_GROUP_CONVERSIONS = new NonContainerCascadingMetaData( true, GroupConversionHelper.EMPTY ); /** * If this type parameter is marked for cascading. */ private final boolean cascading; /** * The group conversions defined for this type parameter. */ private GroupConversionHelper groupConversionHelper; public static NonContainerCascadingMetaData of(CascadingMetaDataBuilder cascadingMetaDataBuilder, Object context) { if ( !cascadingMetaDataBuilder.isCascading() ) { return NON_CASCADING; } else if ( cascadingMetaDataBuilder.getGroupConversions().isEmpty() ) { return CASCADING_WITHOUT_GROUP_CONVERSIONS; } else { return new NonContainerCascadingMetaData( cascadingMetaDataBuilder ); } } private NonContainerCascadingMetaData(CascadingMetaDataBuilder cascadingMetaDataBuilder) { this( cascadingMetaDataBuilder.isCascading(), GroupConversionHelper.of( cascadingMetaDataBuilder.getGroupConversions() ) ); } private NonContainerCascadingMetaData(boolean cascading, GroupConversionHelper groupConversionHelper) { this.cascading = cascading; this.groupConversionHelper = groupConversionHelper; } @Override public TypeVariable getTypeParameter() { return AnnotatedObject.INSTANCE; } @Override public boolean isCascading() { return cascading; } @Override public boolean isMarkedForCascadingOnAnnotatedObjectOrContainerElements() { return cascading; } @Override public Class convertGroup(Class originalGroup) { return groupConversionHelper.convertGroup( originalGroup ); } @Override public Set getGroupConversionDescriptors() { return groupConversionHelper.asDescriptors(); } @Override public boolean isContainer() { return false; } @Override public CascadingMetaData addRuntimeContainerSupport(ValueExtractorManager valueExtractorManager, Class valueClass) { // do nothing, we are sure it is not a container return this; } @Override @SuppressWarnings("unchecked") public T as(Class clazz) { if ( clazz.isAssignableFrom( getClass() ) ) { return (T) this; } throw LOG.getUnableToCastException( this, clazz ); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append( getClass().getSimpleName() ); sb.append( " [" ); sb.append( "cascading=" ).append( cascading ).append( ", " ); sb.append( "groupConversions=" ).append( groupConversionHelper ).append( ", " ); sb.append( "]" ); return sb.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy