/*
 * ValueSelectionInterface.java
 *
 * Created on 17. prosinec 2000, 15:30
 * Documented 18. 7. 2001
 */

package timetable.solver.strategy.value;

import timetable.data.*;
import timetable.util.*;
/** Rozhraní pro heuristiku výběru umístění.
 * Rozvrhovací program drží v paměti jednu instanci této třídy, v každé iteraci nejdříve provede reset heuristiky s vybranou aktivitou. Dále pro každé možné umístění zavolá metodu addValue. Následně zavolá metodu select a pomocí metod selectedXXX si přečte vybrané umístění.
 *
 * @author Tomáš Müller
 * @version 1.0
 */
public interface ValueSelectionInterface {
  
    /** Nastavení aktivity, pro kterou se bude umístění hledat. Reset heuristiky.
     * @param activity vybraná aktivita
     */
    public void reset(Activity activity);
    
    /** Přidání možného umístění do výběru. 
     * @param slot počáteční slot 
     * @param selectedResources vybrané zdroje
     * @param dependences množina všech závislostí
     * @param conflictActivities množina aktivit, které jsou s daným umístěním v konfliktu - budou se muset z rozvrhu odebrat v případě zvolení tohoto umístění
     */
    public void addValue(int slot, ActivityResources selectedResources, ActivityDependenceGroup dependences, ActivityGroup conflictActivities) throws TimetableException ;
    
    /** Metoda provede výběr umístění. */
    public void select() throws TimetableException ;
    
    /** Vrací vybrané umístění.
     * @return počáteční slot (null, pokud není vybráno umístění)
     */
    public int selectedSlot();
    
    /** Vrací vybrané umístění.
     * @return vybrané zdroje (null, pokud není vybráno umístění)
     */
    public ActivityResources selectedResources();

    /** Vrací vybrané umístění.
     * @return konfliktní aktivity (null, pokud není vybráno umístění)
     */
    public ActivityGroup selectedConflictActivities();
}

