001    /**
002     * DetailedHoldOutEvaluator.java
003     * jCOLIBRI2 framework.
004     * @author Lisa Cummins.
005     * 27/07/2007
006     */
007    package jcolibri.extensions.evaluation;
008    
009    import jcolibri.cbraplications.StandardCBRApplication;
010    import jcolibri.cbrcore.CBRCaseBase;
011    import jcolibri.evaluation.Evaluator;
012    import jcolibri.exception.ExecutionException;
013    import jcolibri.method.maintenance.AbstractCaseBaseEditMethod;
014    import jcolibri.method.retrieve.KNNretrieval.KNNConfig;
015    
016    import org.apache.commons.logging.LogFactory;
017    
018    /**
019     * This abstract class defines the common behaviour of a maintenance evaluator.
020     * 
021     * @author Lisa Cummins.
022     * @version 2.0
023     */
024    public abstract class MaintenanceEvaluator extends Evaluator 
025    {
026        protected StandardCBRApplication app;
027        protected AbstractCaseBaseEditMethod editMethod = null;
028        protected KNNConfig simConfig = null;
029    
030        public static final String PERCENT_REDUCED = "Percent reduced";
031            
032        public void init(StandardCBRApplication cbrApp) 
033        {   if(report == null || !(report instanceof DetailedEvaluationReport))
034            {       report = new DetailedEvaluationReport();
035            }
036            app = cbrApp;
037            try 
038            {       app.configure();
039            } catch (ExecutionException e) 
040            {       LogFactory.getLog(this.getClass()).error(e);
041            }
042        }
043        
044        public void init(StandardCBRApplication cbrApp, AbstractCaseBaseEditMethod editMethod,
045                    KNNConfig simConfig) 
046        {   this.init(cbrApp);
047            setEditMethod(editMethod);
048            setSimConfig(simConfig);
049        }
050    
051        public void setEditMethod(AbstractCaseBaseEditMethod editMethod)
052        {   this.editMethod = editMethod;
053        }
054            
055        public void setSimConfig(KNNConfig simConfig)
056        {   this.simConfig = simConfig;
057        }
058        
059        protected void editCaseBase(CBRCaseBase caseBase)
060        {   //Perform maintenance on this case base
061            int sizeBefore = caseBase.getCases().size();
062            LogFactory.getLog(this.getClass()).info("Editing Case-Base");
063            editMethod.edit(caseBase, simConfig);
064            LogFactory.getLog(this.getClass()).info("Finished Editing Case-Base");
065            int sizeAfter = caseBase.getCases().size();
066            double percentReduced = ((sizeBefore - sizeAfter)/(double)sizeBefore) * 100.0;
067            report.addDataToSeries(PERCENT_REDUCED, percentReduced);
068        }
069    }