/*******************************************************************************
 * Copyright (c) 2001, 2007 Oracle Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Oracle Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.jsf.common.sets.constraint;

import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.jst.jsf.common.sets.AxiomaticSet;

/**
 * Super-class of all axiomatic set constraints.
 * 
 * A set constraint applies one or more pre-conditions on a set
 * and returns a diagnostic that flags whether or not the set
 * satisfies that constraint or not.
 * 
 * <p><b>Provisional API - subject to change</b></p>
 * 
 * @author cbateman
 *
 */
public abstract class AbstractSetConstraint 
{
    /**
     * The following post-conditions must hold:
     * 
     * 1) if the set satisfies the constraint with no caveats, 
     * the returned diagnostic must in turn satisfy 
     * Diagnostic.getSeverity() == Diagnostic.OK
     * 
     * 2) if the set does not satisfy the constraint, the returned diagnostic
     * must satisfy Diagnostic.getSeverity() == Diagnostic.ERROR
     * 
     * 3) if the set strictly satisfies the constraint but the constraint includes
     * parameters that can only be heuristically applied, the constraint may choose
     * to return a diagnostic where Diagnostic.getSeverity() == Diagnostic.WARNING
     * 
     * The diagnostic returned should _never_ have any other severity but OK, ERROR or WARNING
     * 
     * Algorithmically:
     * 
     * Constraint is satisfied can be tested by Diagnostic.getSeverity() != ERROR
     * Constraint is not satisfied can be tested by Diagnostic.getSeverity() == ERROR
     * 
     * @param set
     * @return a diagnostic object that contains information about whether
     * or not the constraint is satisfied for set. 
     * <b>MUST NOT RETURN NULL</b>
     */
    public abstract Diagnostic isSatisfied(AxiomaticSet set);
    
    /**
     * Convenience method
     * 
     * @param set
     * @return true if the constraint is satisfied for set
     */
    public final boolean passesConstraint(AxiomaticSet set)
    {
        return isSatisfied(set).getSeverity() != Diagnostic.ERROR;
    }
    
    /**
     * Convenience method
     * 
     * @param set
     * @return true if the constraint is <b>not</b> satisfied for set
     */
    public final boolean failsConstraint(AxiomaticSet set)
    {
        return !passesConstraint(set);
    }
}
