/*********************************************************************
* Copyright (c) 2019 The University of York.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.epsilon.executors.evl;

import java.io.PrintWriter;
import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.eclipse.epsilon.evl.dom.Constraint;
import org.eclipse.epsilon.evl.dom.ConstraintContext;
import org.eclipse.epsilon.evl.execute.UnsatisfiedConstraint;
import org.eclipse.epsilon.executors.EpsilonLanguageExecutor;

/**
 * The IEvlExecutor API provides additional methods to print the validation results.
 *
 */
public interface EvlExecutor extends EpsilonLanguageExecutor<Collection<UnsatisfiedConstraint>>  {
    
    /**
     * Send the unsatisfied constraints to the log, using the implementation logger
     */
    void logUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints);
    
    /**
     * Pretty print the unsatisfied constraints
     */
    void printUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints);
    
    /**
     * Pretty print the unsatisfied constraints using the specified printer
     */
    void printUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints, PrintWriter writer);
    

	List<Constraint> getConstraints();

	List<ConstraintContext> getConstraintContexts();

	ConstraintContext getConstraintContext(String name);

	Set<UnsatisfiedConstraint> getUnsatisfiedConstraints();
    
}
