001 package ifs.model;
002
003 /**
004 * IFS model listener.
005 *
006 * @see Model
007 *
008 * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
009 * @version 1.0
010 */
011 public interface ModelListener {
012 /** Variable is added to the model
013 * @param variable added variable
014 */
015 public void variableAdded(Variable variable);
016
017 /** Variable is removed from the model
018 * @param variable removed variable
019 */
020 public void variableRemoved(Variable variable);
021
022 /** Constraint is added to the model
023 * @param constraint added constraint
024 */
025 public void constraintAdded(Constraint constraint);
026
027 /** Constraint is removed from the model
028 * @param constraint removed constraint
029 */
030 public void constraintRemoved(Constraint constraint);
031
032 /** Called before a value is assigned to its variable ({@link Value#variable()}).
033 * @param iteration current iteration
034 * @param value value to be assigned
035 */
036 public void beforeAssigned(long iteration, Value value);
037
038 /** Called before a value is unassigned from its variable ({@link Value#variable()}).
039 * @param iteration current iteration
040 * @param value value to be unassigned
041 */
042 public void beforeUnassigned(long iteration, Value value);
043
044 /** Called after a value is assigned to its variable ({@link Value#variable()}).
045 * @param iteration current iteration
046 * @param value value to be assigned
047 */
048 public void afterAssigned(long iteration, Value value);
049
050 /** Called after a value is unassigned from its variable ({@link Value#variable()}).
051 * @param iteration current iteration
052 * @param value value to be unassigned
053 */
054 public void afterUnassigned(long iteration, Value value);
055
056 /** Query for info about the model. A listener can also add some its info.
057 * @param anInfo resultant table with informations (key, value).
058 */
059 public void getInfo(java.util.Hashtable anInfo);
060
061 /** Notification that the model was initialized by the solver.
062 * @param solver IFS solver
063 */
064 public boolean init(ifs.solver.Solver solver);
065 }