/** * Выполняет валидацию установки {@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()); } } }
@Override protected void validateNewToOld(Errors errors, MetaField newObject, MetaField oldObject) { super.validateNewToOld(errors, newObject, oldObject); // Восстанавливаем позицию МЕТА-поля newObject.setOrdinal(oldObject.getOrdinal()); // Восстанавливаем старое значение первичного ключа if (oldObject.isFlagEstablished(MetaField.FLAG_PRIMARY)) { newObject.establishFlags(MetaField.FLAG_PRIMARY); } // Проверяем флаги doValidateFlags(errors, newObject, oldObject); }
@Override protected void doValidateCommon(Errors errors, MetaField target) { super.doValidateCommon(errors, target); if (!errors.hasErrors()) { // Устанавливаем позицию поля относительно других int metaFieldsCount = getDocumentService() .countByCriteria( createCriteriaByIDs(MetaField.DICTIONARY_ID, target.getDictionaryId())); target.setOrdinal(metaFieldsCount); // Проверяем флаги doValidateFlags(errors, target, null); } }
/** * Выполняет валидацию установки {@link MetaField#FLAG_PRIMARY первичного флага} * * @param errors контейнер ошибок * @param newObject обновляемое МЕТА-поле * @param oldObject существущее МЕТА-поле или <code>NULL</code> */ private void doValidatePrimaryFlag(Errors errors, MetaField newObject, MetaField oldObject) { boolean illegalChange = newObject.isFlagEstablished(MetaField.FLAG_PRIMARY) && (oldObject == null || !oldObject.isFlagEstablished(MetaField.FLAG_PRIMARY)); illegalChange = illegalChange || !newObject.isFlagEstablished(MetaField.FLAG_PRIMARY) && (oldObject != null && oldObject.isFlagEstablished(MetaField.FLAG_PRIMARY)); if (illegalChange) { 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()); } } }
@Override protected MetaField findUniqueByName(MetaField target) { return getDocumentService() .findUniqueByRelativeId(target.getDictionaryId(), target.getName(), false, true); }