001    package net.sf.cpsolver.ifs.model;
002    
003    /**
004     * IFS model listener.
005     *
006     * @see Model
007     *
008     * @version
009     * IFS 1.1 (Iterative Forward Search)<br>
010     * Copyright (C) 2006 Tomáš Müller<br>
011     * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
012     * Lazenska 391, 76314 Zlin, Czech Republic<br>
013     * <br>
014     * This library is free software; you can redistribute it and/or
015     * modify it under the terms of the GNU Lesser General Public
016     * License as published by the Free Software Foundation; either
017     * version 2.1 of the License, or (at your option) any later version.
018     * <br><br>
019     * This library is distributed in the hope that it will be useful,
020     * but WITHOUT ANY WARRANTY; without even the implied warranty of
021     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
022     * Lesser General Public License for more details.
023     * <br><br>
024     * You should have received a copy of the GNU Lesser General Public
025     * License along with this library; if not, write to the Free Software
026     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
027     */
028    public interface ModelListener {
029        /** Variable is added to the model
030         * @param variable added variable
031         */
032        public void variableAdded(Variable variable);
033        
034        /** Variable is removed from the model
035         * @param variable removed variable
036         */
037        public void variableRemoved(Variable variable);
038        
039        /** Constraint is added to the model
040         * @param constraint added constraint
041         */
042        public void constraintAdded(Constraint constraint);
043        
044        /** Constraint is removed from the model
045         * @param constraint removed constraint
046         */
047        public void constraintRemoved(Constraint constraint);
048        
049        /** Called before a value is assigned to its variable ({@link Value#variable()}). 
050         * @param iteration current iteration
051         * @param value value to be assigned
052         */
053        public void beforeAssigned(long iteration, Value value);
054    
055        /** Called before a value is unassigned from its variable ({@link Value#variable()}). 
056         * @param iteration current iteration
057         * @param value value to be unassigned
058         */
059        public void beforeUnassigned(long iteration, Value value);
060        
061        /** Called after a value is assigned to its variable ({@link Value#variable()}). 
062         * @param iteration current iteration
063         * @param value value to be assigned
064         */
065        public void afterAssigned(long iteration, Value value);
066    
067        /** Called after a value is unassigned from its variable ({@link Value#variable()}). 
068         * @param iteration current iteration
069         * @param value value to be unassigned
070         */
071        public void afterUnassigned(long iteration, Value value);
072    
073        /** Notification that the model was initialized by the solver. 
074         * @param solver IFS solver
075         */
076        public boolean init(net.sf.cpsolver.ifs.solver.Solver solver);
077    }