package de.flower.common.validation.unique.impl; import de.flower.common.util.Check; import de.flower.common.validation.unique.Unique; /** * Parses a @Unique constraint and translates it into a UniqueDef object. * Does some preprocessing and checking. */ public final class UniqueDefFactory { private UniqueDefFactory() {} /** * Validates the constraint annotation and translates the information into a UniqueDef object. * * @param constraint the constraint * @param columnResolver the column resolver used to translate column names to entity attribute names. * @return the unique def */ public static UniqueDef parseConstraint(final Unique constraint, final IColumnResolver columnResolver) { Check.notNull(constraint); Check.notNull(columnResolver); UniqueDef constraintDef; // check if annotation is correctly set if ("".equals(constraint.name())) { Check.isTrue(constraint.attributeNames().length != 0, "Either the name of a constraint or the attribute names must be given."); constraintDef = new UniqueDef(null, constraint.attributeNames()); } else { String[] attributeNames = constraint.attributeNames(); if (attributeNames.length == 0) { // read out column names from @UniqueConstraint annotation of entity final String[] columnNames = UniqueConstraintDetector.getColumnNames(constraint.name(), constraint.clazz()); // convert columnNames to entity attributes attributeNames = columnResolver.mapColumns2Attributes(constraint.clazz(), columnNames); } constraintDef = new UniqueDef(constraint.name(), attributeNames); } Check.isTrue(constraint.groups().length != 0, "Must set validation group in @Unique constraint."); return constraintDef; } }