/** * Package private for testability * * @return translated validation exception */ MolgenisValidationException translateValueTooLongViolation() { ConstraintViolation constraintViolation = new ConstraintViolation(VALUE_TOO_LONG_MSG); return new MolgenisValidationException(singleton(constraintViolation)); }
@ExceptionHandler(MolgenisValidationException.class) @ResponseStatus(BAD_REQUEST) public ErrorMessageResponse handleMolgenisValidationException(MolgenisValidationException e) { LOG.info("", e); List<ErrorMessage> messages = Lists.newArrayList(); for (ConstraintViolation violation : e.getViolations()) { messages.add(new ErrorMessage(violation.getMessage())); } return new ErrorMessageResponse(messages); }
throw new MolgenisValidationException( new ConstraintViolation( format( if (mve.getMessage().equals(VALUE_TOO_LONG_MSG)) { mve = new MolgenisValidationException( new ConstraintViolation( format(
throw new MolgenisValidationException(violations); for (ConstraintViolation violation : e.getViolations())
private void validateEntityNotReferenced( Object entityId, EntityType entityType, Multimap<String, Attribute> defaultValueMultiMap) { if (defaultValueMultiMap.containsKey(toAttributeDefaultValue(entityId))) { Collection<Attribute> attributes = defaultValueMultiMap.get(toAttributeDefaultValue(entityId)); throw new MolgenisValidationException( new ConstraintViolation( String.format( "'%s' with id '%s' is referenced as default value by attribute(s): '%s'", entityType.getLabel(), entityId.toString(), attributes.stream().map(Attribute::getName).collect(Collectors.joining(", "))))); } }
for (ConstraintViolation violation : e.getViolations())
private FileMeta convertFile(Attribute attr, Object paramValue) { Entity entity = convertRef(attr, paramValue); if (entity == null) { return null; } if (!(entity instanceof FileMeta)) { throw new MolgenisValidationException( new ConstraintViolation( format( "Attribute [%s] value is of type [%s] instead of [%s]", attr.getName(), entity.getClass().getSimpleName(), FileMeta.class.getSimpleName()))); } return (FileMeta) entity; }
@Override public void validateEntityTypeNotReferenced(EntityType entityType) { if (!getDefaultValueMap(entityType).isEmpty()) { throw new MolgenisValidationException( new ConstraintViolation( String.format( "'%s' entities are referenced as default value by attributes", entityType.getLabel()))); } }
/** * Package private for testability * * @param pSqlException PostgreSQL exception * @return translated validation exception */ static MolgenisValidationException translateUndefinedColumnException( PSQLException pSqlException) { ServerErrorMessage serverErrorMessage = pSqlException.getServerErrorMessage(); String message = serverErrorMessage.getMessage(); // FIXME exposes internal message ConstraintViolation constraintViolation = new ConstraintViolation(message); return new MolgenisValidationException(singleton(constraintViolation)); }
private void verifyUpdate(List<? extends Entity> entitiesBatch, int[] counts, Attribute idAttr) { int nrUpdatedEntities = Arrays.stream(counts).sum(); if (nrUpdatedEntities < entitiesBatch.size()) { Set<Object> existingEntityIds = findAll( entitiesBatch.stream().map(Entity::getIdValue), new Fetch().field(idAttr.getName())) .map(Entity::getIdValue) .collect(toSet()); Object nonExistingEntityId = entitiesBatch .stream() .map(Entity::getIdValue) .filter(entityId -> !existingEntityIds.contains(entityId)) .findFirst() .orElseThrow( () -> new IllegalStateException( "Not all entities in batch were updated but all are present in the repository.")); throw new MolgenisValidationException( new ConstraintViolation( format( "Cannot update [%s] with id [%s] because it does not exist", entityType.getId(), nonExistingEntityId.toString()))); } }
/** * Package private for testability * * @param pSqlException PostgreSQL exception * @return translated validation exception */ MolgenisValidationException translateReadonlyViolation(PSQLException pSqlException) { Matcher matcher = Pattern.compile( "Updating read-only column \"?(.*?)\"? of table \"?(.*?)\"? with id \\[(.*?)] is not allowed") .matcher(pSqlException.getServerErrorMessage().getMessage()); boolean matches = matcher.matches(); if (!matches) { LOG.error(ERROR_TRANSLATING_POSTGRES_EXC_MSG, pSqlException); throw new RuntimeException(ERROR_TRANSLATING_EXCEPTION_MSG, pSqlException); } String colName = matcher.group(1); String tableName = matcher.group(2); String id = matcher.group(3); ConstraintViolation constraintViolation = new ConstraintViolation( format( "Updating read-only attribute '%s' of entity '%s' with id '%s' is not allowed.", tryGetAttributeName(tableName, colName).orElse(TOKEN_UNKNOWN), tryGetEntityTypeName(tableName).orElse(TOKEN_UNKNOWN), id)); return new MolgenisValidationException(singleton(constraintViolation)); }
booleanValue = false; } else { throw new MolgenisValidationException( new ConstraintViolation( format( throw new MolgenisValidationException( new ConstraintViolation( format(
.collect(toCollection(LinkedHashSet::new)); return new MolgenisValidationException(constraintViolations);
integerValue = Integer.valueOf((String) value); } catch (NumberFormatException e) { throw new MolgenisValidationException( new ConstraintViolation( format( integerValue = ((Number) value).intValue(); } else { throw new MolgenisValidationException( new ConstraintViolation( format(
longValue = Long.valueOf((String) value); } catch (NumberFormatException e) { throw new MolgenisValidationException( new ConstraintViolation( format( longValue = ((Number) value).longValue(); } else { throw new MolgenisValidationException( new ConstraintViolation( format(
doubleValue = Double.valueOf((String) value); } catch (NumberFormatException e) { throw new MolgenisValidationException( new ConstraintViolation( format( doubleValue = ((Number) value).doubleValue(); } else { throw new MolgenisValidationException( new ConstraintViolation( format(
/** * Validates the entity label: - Validates that the label is not an empty string - Validates that * the label does not only consist of white space * * @param entityType entity meta data * @throws MolgenisValidationException if the entity label is invalid */ static void validateEntityLabel(EntityType entityType) { String label = entityType.getLabel(); if (label != null) { if (label.isEmpty()) { throw new MolgenisValidationException( new ConstraintViolation( format("Label of EntityType [%s] is empty", entityType.getId()))); } else if (label.trim().equals("")) { throw new MolgenisValidationException( new ConstraintViolation( format("Label of EntityType [%s] contains only white space", entityType.getId()))); } } }
private static String convertEnum(Attribute attr, Object value) { if (value == null) { return null; } String stringValue; if (value instanceof String) { stringValue = (String) value; } else if (value instanceof Enum) { stringValue = value.toString(); } else { throw new MolgenisValidationException( new ConstraintViolation( format( "Attribute [%s] value is of type [%s] instead of [%s] or [%s]", attr.getName(), value.getClass().getSimpleName(), String.class.getSimpleName(), Enum.class.getSimpleName()))); } if (!attr.getEnumOptions().contains(stringValue)) { throw new MolgenisValidationException( new ConstraintViolation( format( "Attribute [%s] value [%s] is not a valid enum option", attr.getName(), stringValue))); } return stringValue; }
/** * Package private for testability * * @param pSqlException PostgreSQL exception * @return translated validation exception */ MolgenisValidationException translateCheckConstraintViolation(PSQLException pSqlException) { ServerErrorMessage serverErrorMessage = pSqlException.getServerErrorMessage(); String tableName = serverErrorMessage.getTable(); String constraintName = serverErrorMessage.getConstraint(); // constraint name: <tableName>_<columnName>_chk String columnName = constraintName.substring(tableName.length() + 1, constraintName.length() - 4); ConstraintViolation constraintViolation = new ConstraintViolation( format( "Unknown enum value for attribute '%s' of entity '%s'.", tryGetAttributeName(tableName, columnName).orElse(TOKEN_UNKNOWN), tryGetEntityTypeName(tableName).orElse(TOKEN_UNKNOWN)), null); return new MolgenisValidationException(singleton(constraintViolation)); }
private static void validateName(Attribute attr) { // validate entity name (e.g. illegal characters, length) String name = attr.getName(); if (!name.equals(ATTRIBUTE_META_DATA) && !name.equals(ENTITY_TYPE_META_DATA) && !name.equals(PACKAGE)) { try { NameValidator.validateAttributeName(attr.getName()); } catch (MolgenisDataException e) { throw new MolgenisValidationException(new ConstraintViolation(e.getMessage())); } } }