/** * Выполняет валидацию установки {@link MetaField#FLAG_UNIQUE уникального флага} * * @param errors контейнер ошибок * @param newObject обновляемое МЕТА-поле * @param oldObject существущее МЕТА-поле или <code>NULL</code> */ private void doValidateUniqueFlag(Errors errors, MetaField newObject, MetaField oldObject) { if (newObject.isFlagEstablished(MetaField.FLAG_UNIQUE) && (oldObject == null || !oldObject.isFlagEstablished(MetaField.FLAG_UNIQUE))) { if (!fieldService.isFieldsUnique(newObject.getId())) { reject( errors, new NotUniqueFieldsException(ModelUtils.createMetaFieldNamedPath(newObject)), newObject.getName()); } } }
/** * Выполняет валидацию количества {@link ru.hflabs.rcd.model.document.Field значений полей} * * @param errors контейнер ошибок * @param metaField уникальное МЕТА-поле */ private void doValidateFieldCount(Errors errors, MetaField metaField) { // Если МЕТА-поле помечено как уникальное и не является первичным ключем, // то количество полей для первичного ключа должно совпадать с количеством полей текущего // МЕТА-поля // для корректного формирования записей справочника if (!metaField.isFlagEstablished(MetaField.FLAG_PRIMARY) && metaField.isFlagEstablished(MetaField.FLAG_UNIQUE)) { MetaFieldNamedPath metaFieldNamedPath = ModelUtils.createMetaFieldNamedPath(metaField); // Получаем количество значений полей по текущему полю int currentFieldsCount = fieldService.countByCriteria(createCriteriaByIDs(Field.META_FIELD_ID, metaField.getId())); // Получаем количество значений полей по первичному полю MetaField primaryMetaField = getDocumentService().findPrimaryMetaFieldByNamedPath(metaFieldNamedPath, false); int primaryFieldsCount = fieldService.countByCriteria( createCriteriaByIDs(Field.META_FIELD_ID, primaryMetaField.getId())); // Проверяем количество if (currentFieldsCount != primaryFieldsCount) { reject(errors, new NotUniqueFieldsException(metaFieldNamedPath), metaField.getName()); } } }