001    package ifs.model;
002    
003    /**
004     * Binary constraint.
005     * <br><br>
006     * Extension of {@link Constraint} that links exactly two variables.
007     *
008     * @see Variable
009     * @see Constraint
010     * @see Model
011     *
012     * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
013     * @version 1.0
014     */
015    
016    public abstract class BinaryConstraint extends Constraint {
017        private Variable iFirst = null, iSecond = null;
018        public BinaryConstraint() {
019            super();
020        }
021        
022        public void addVariable(Variable var) {
023            if (iFirst == null)
024                iFirst = (Variable)var;
025            else
026                iSecond = (Variable)var;
027            super.addVariable(var);
028        }
029        
030        /** First variable */
031        public Variable first() {
032            return iFirst;
033        }
034        
035        /** Second variable */
036        public Variable second() {
037            return iSecond;
038        }
039        
040        /** True, id the given variable is the first one */
041        public boolean isFirst(Variable variable) {
042            return variable.equals(first());
043        }
044        
045        /** Returns the variable out of the constraints variables which is different from the given variable.*/
046        public Variable another(Variable variable) {
047            return (
048                    first() != null && variable.equals(first()) ? second() : first());
049        }
050    }