001/*
002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Nicolas Chapurlat <nchapurlat@nuxeo.com>
016 */
017
018package org.nuxeo.ecm.core.api.validation;
019
020import org.nuxeo.ecm.core.api.NuxeoException;
021
022/**
023 * Exception thrown when some process failed due to {@link ConstraintViolation}.
024 *
025 * @since 7.1
026 */
027public class DocumentValidationException extends NuxeoException {
028
029    private static final String MESSAGE_SINGLE = "Constraint violation thrown: '%s'";
030
031    private static final String MESSAGE = "%s constraint violation(s) thrown. First one is: '%s', call "
032            + DocumentValidationException.class.getSimpleName() + ".getViolations() to get the others";
033
034    private static final long serialVersionUID = 1L;
035
036    private DocumentValidationReport report;
037
038    public DocumentValidationException(DocumentValidationReport report) {
039        super();
040        this.report = report;
041    }
042
043    public DocumentValidationReport getReport() {
044        return report;
045    }
046
047    @Override
048    public String getMessage() {
049        if (report.hasError()) {
050            int num = report.numberOfErrors();
051            String violationMessage = report.asList().get(0).getMessage(null);
052            if (num > 1) {
053                return String.format(MESSAGE, report.numberOfErrors(), violationMessage);
054            } else {
055                return String.format(MESSAGE_SINGLE, violationMessage);
056            }
057        } else {
058            return super.getMessage();
059        }
060    }
061
062}