package org.apache.maven.scm.repository;

/*
 * Copyright 2001-2006 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import org.apache.maven.scm.ScmException;

import java.util.Collections;
import java.util.List;

/**
 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
 * @version $Id$
 */
public class ScmRepositoryException
    extends ScmException
{
    private List validationMessages = Collections.EMPTY_LIST;

    public ScmRepositoryException( String msg )
    {
        super( msg );
    }

    public ScmRepositoryException( String msg, Throwable cause )
    {
        super( msg, cause );
    }

    public ScmRepositoryException( String msg, List validationMessages )
    {
        super( msg );

        this.validationMessages = validationMessages;
    }

    public List getValidationMessages()
    {
        return validationMessages;
    }
}
