/* * Copyright 2010 Google Inc. Copyright 2016 Manfred Tremmel * * 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 de.knightsoftnet.validators.client.impl; import de.knightsoftnet.validators.client.impl.metadata.BeanMetadata; import de.knightsoftnet.validators.client.impl.metadata.ValidationGroupsMetadata; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; import javax.validation.metadata.ConstraintDescriptor; import javax.validation.metadata.GroupConversionDescriptor; import javax.validation.metadata.PropertyDescriptor; /** * Describes a constrained bean property. */ public class PropertyDescriptorImpl implements PropertyDescriptor { private final boolean cascaded; private final Set<ConstraintDescriptorImpl<?>> descriptors; private final Class<?> elementClass; private final String name; private ValidationGroupsMetadata validationGroupsMetadata; private final BeanMetadata parentBeanMetadata; private final Set<GroupConversionDescriptor> groupConversions; public PropertyDescriptorImpl(final String name, final Class<?> elementClass, final boolean cascaded, final BeanMetadata parentBeanMetadata, final ConstraintDescriptorImpl<?>... descriptors) { this(name, elementClass, cascaded, parentBeanMetadata, null, descriptors); } /** * constructor. */ public PropertyDescriptorImpl(final String name, final Class<?> elementClass, final boolean cascaded, final BeanMetadata parentBeanMetadata, final ValidationGroupsMetadata validationGroupsMetadata, final ConstraintDescriptorImpl<?>... descriptors) { super(); this.elementClass = elementClass; this.cascaded = cascaded; this.name = name; this.validationGroupsMetadata = validationGroupsMetadata; this.parentBeanMetadata = parentBeanMetadata; this.descriptors = new HashSet<>(Arrays.asList(descriptors)); this.groupConversions = Collections.emptySet(); } @Override public ConstraintFinder findConstraints() { return new ConstraintFinderImpl(this.parentBeanMetadata, this.validationGroupsMetadata, this.descriptors); } @Override public Set<ConstraintDescriptor<?>> getConstraintDescriptors() { return this.findConstraints().getConstraintDescriptors(); } @Override public Class<?> getElementClass() { return this.elementClass; } @Override public String getPropertyName() { return this.name; } @Override public boolean hasConstraints() { return !this.descriptors.isEmpty(); } @Override public boolean isCascaded() { return this.cascaded; } @Override public Set<GroupConversionDescriptor> getGroupConversions() { return this.groupConversions; } public void setValidationGroupsMetadata(final ValidationGroupsMetadata validationGroupsMetadata) { // TODO(idol) Find some way to pass this via the constructor rather than after creation this.validationGroupsMetadata = validationGroupsMetadata; } /** * create a copy of this instance and return it. * * @return copy of the class */ public PropertyDescriptorImpl shallowCopy() { final ConstraintDescriptorImpl<?>[] desc = new ConstraintDescriptorImpl<?>[this.descriptors.size()]; this.descriptors.toArray(desc); return new PropertyDescriptorImpl( // this.name, // this.elementClass, // this.cascaded, // this.parentBeanMetadata, // this.validationGroupsMetadata, // desc); } }