001    /**
002     * CriticalUserChoice.java
003     * jCOLIBRI2 framework. 
004     * @author Juan A. Recio-García.
005     * GAIA - Group for Artificial Intelligence Applications
006     * http://gaia.fdi.ucm.es
007     * 31/10/2007
008     */
009    package jcolibri.extensions.recommendation.navigationByProposing;
010    
011    import java.util.ArrayList;
012    import java.util.Collection;
013    
014    import jcolibri.cbrcore.CBRCase;
015    import jcolibri.extensions.recommendation.casesDisplay.UserChoice;
016    import jcolibri.method.retrieve.FilterBasedRetrieval.FilterConfig;
017    
018    /**
019     * Extends the UserChoice object to store critiques (CritiqueOptions) about the 
020     * selected case (that in the next converstaion cycle is the query).
021     * 
022     * @author Juan A. Recio-Garcia
023     * @author Developed at University College Cork (Ireland) in collaboration with Derek Bridge.
024     * @version 1.0
025     * @see jcolibri.extensions.recommendation.navigationByProposing.CriticalUserChoice
026     */
027    public class CriticalUserChoice extends UserChoice
028    {
029        
030        private Collection<CritiqueOption> critiques = null;
031        
032        public CriticalUserChoice()
033        {
034            super(UserChoice.REFINE_QUERY, null);
035            critiques = new ArrayList<CritiqueOption>();
036        }
037        
038        /**
039         * Creates an object with the user choice, critiques
040         * @param choice contains a value from UserChoice: QUIT, BUY or REFINE_QUERY.
041         * If the value is REFINE_QUERY, the critiquedCase parameter contains the new query
042         * to edit.
043         * @param critiques to the new query
044         * @param critiquedCase is the new query/case thas was critiqued. This parameter is only
045         * used if the "choice" parameter contains REFINE_QUERY.
046         */
047        public CriticalUserChoice(int choice, Collection<CritiqueOption> critiques, CBRCase critiquedCase)
048        {
049            super(choice, critiquedCase);
050            this.critiques = critiques;
051        }
052        
053        /**
054         * Returns the critiques
055         */
056        public Collection<CritiqueOption> getCritiques()
057        {
058            return this.critiques;
059        }
060        
061        /**
062         * Gets the FilterConfig object used by the FilterBasedRetrieval method that
063         * is obtained from the critiques.
064         */
065        public FilterConfig getFilterConfig()
066        {
067            FilterConfig fc = new FilterConfig();
068            for(CritiqueOption critique: critiques)
069                fc.addPredicate(critique.getAttribute(), critique.getPredicate());
070            return fc;
071        }
072    
073    }