package com.constellio.model.services.records; import com.constellio.data.dao.dto.records.TransactionDTO; import com.constellio.data.dao.services.bigVault.RecordDaoException; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.frameworks.validation.ValidationErrors; @SuppressWarnings("serial") public class RecordServicesException extends Exception { public RecordServicesException(String message, Throwable cause) { super(message, cause); } public RecordServicesException(String message) { super(message); } public RecordServicesException(Throwable cause) { super(cause); } public static class PreviouslySavedContentCouldNotBeCommitted extends RecordServicesException { public PreviouslySavedContentCouldNotBeCommitted(Throwable cause) { super(cause); } } public static class OptimisticLocking extends RecordServicesException { final String id; final Long version; final TransactionDTO transactionDTO; public OptimisticLocking(TransactionDTO transactionDTO, RecordDaoException.OptimisticLocking e) { super(getMessage(e.getId(), e.getVersion()), e); this.transactionDTO = transactionDTO; this.id = e.getId(); this.version = e.getVersion(); } public OptimisticLocking(String id, TransactionDTO transactionDTO, Throwable cause) { super(getMessage(id, null), cause); this.transactionDTO = transactionDTO; this.id = id; this.version = null; } private static String getMessage(String id, Long version) { return "Optimistic locking while saving record with id '" + id + "' in version '" + version + "'"; } public String getId() { return id; } public TransactionDTO getTransactionDTO() { return transactionDTO; } public Long getVersion() { return version; } } public static class UnresolvableOptimisticLockingConflict extends RecordServicesException { public UnresolvableOptimisticLockingConflict(Exception e) { super("Unresolvable optimistic locking", e); } public UnresolvableOptimisticLockingConflict(String id) { super("Unresolvable optimistic locking caused by id " + id); } } public static class ValidationException extends RecordServicesException { private final ValidationErrors errors; public ValidationException(Transaction transaction, ValidationErrors errors) { super(newMessage(transaction, errors)); this.errors = errors; } public ValidationException(Record record, ValidationErrors errors) { super(newMessage(record, errors)); this.errors = errors; } private static String newMessage(Record record, ValidationErrors errors) { StringBuilder sb = new StringBuilder(); sb.append("Validation of record '"); sb.append(record.getId()); sb.append("' of type '"); sb.append(record.getSchemaCode()); sb.append("' failed. : \n\nValidation errors :\n"); sb.append(errors.toMultilineErrorsSummaryString()); sb.append("\n\nStack trace :"); return sb.toString(); } private static String newMessage(Transaction transaction, ValidationErrors errors) { StringBuilder sb = new StringBuilder(); sb.append("Validation of transaction failed. : \n\nValidation errors :\n"); sb.append(errors.toMultilineErrorsSummaryString()); sb.append("\n\nStack trace :"); return sb.toString(); } public ValidationErrors getErrors() { return errors; } } }