001    package jcolibri.test.test15;
002    
003    import jcolibri.casebase.CachedLinealCaseBase;
004    import jcolibri.cbraplications.StandardCBRApplication;
005    import jcolibri.cbrcore.CBRCaseBase;
006    import jcolibri.cbrcore.CBRQuery;
007    import jcolibri.cbrcore.Connector;
008    import jcolibri.connector.PlainTextConnector;
009    import jcolibri.evaluation.Evaluator;
010    import jcolibri.exception.ExecutionException;
011    import jcolibri.extensions.maintenance_evaluation.DetailedEvaluationReport;
012    import jcolibri.method.reuse.classification.KNNClassificationConfig;
013    import jcolibri.method.revise.classification.BasicClassificationOracle;
014    import jcolibri.method.revise.classification.ClassificationOracle;
015    
016    import org.apache.commons.logging.Log;
017    
018    /**
019     * Evaluable application which performs case-based maintenance. It is a normal 
020     * StandardCBRApplication that stores its results in the DetailedEvaluationReport 
021     * object obtained from Evaluator.getEvaluationReport().
022     * @author Lisa Cummins
023     * @version 1.0
024     */
025    public class IrisMaintainedEvaluableApp implements StandardCBRApplication 
026    {
027            Connector _connector;
028            CBRCaseBase _caseBase;
029            KNNClassificationConfig irisSimConfig;
030            
031            private Log log;
032            
033            /**
034             * The name of the data series containing this application's stored results
035             */
036            public static final String DATA_SERIES_NAME = "RENN Iris Prediction Cost";
037    
038            public IrisMaintainedEvaluableApp(KNNClassificationConfig irisSimConfig)
039            {       this.irisSimConfig = irisSimConfig;
040            }
041            
042            /* (non-Javadoc)
043             * @see jcolibri.cbraplications.BasicCBRApplication#configure()
044             */
045            public void configure() throws ExecutionException
046            {       try
047                    {       _connector = new PlainTextConnector();
048                            _connector.initFromXMLfile(jcolibri.util.FileIO.findFile("jcolibri/test/test15/plaintextconfig.xml"));
049                            _caseBase  = new CachedLinealCaseBase();
050                    
051                    } catch (Exception e)
052                    {       throw new ExecutionException(e);
053                    }
054                    log = org.apache.commons.logging.LogFactory.getLog(this.getClass());
055            }
056    
057            
058            /* (non-Javadoc)
059             * @see jcolibri.cbraplications.BasicCBRApplication#preCycle()
060             */
061            public CBRCaseBase preCycle() throws ExecutionException 
062            {       _caseBase.init(_connector);             
063                    return _caseBase;
064            }
065            
066            /* (non-Javadoc)
067             * @see jcolibri.cbraplications.BasicCBRApplication#cycle()
068             */
069            public void cycle(CBRQuery query) throws ExecutionException 
070            {       log.info("Query: "+ query.getDescription());
071    
072                    ClassificationOracle oracle = new BasicClassificationOracle();
073                    double predictionCost = oracle.getPredictionCost(query, _caseBase, irisSimConfig);
074                    
075                    // Now we add the cost of the prediction to the series DATA_SERIES_NAME.
076                    ((DetailedEvaluationReport)(Evaluator.getEvaluationReport())).
077                            addDataToSeries(DATA_SERIES_NAME, query, predictionCost);
078            }
079    
080            /* (non-Javadoc)
081             * @see jcolibri.cbraplications.BasicCBRApplication#postCycle()
082             */
083            public void postCycle() throws ExecutionException 
084            {       _connector.close();
085            }
086    }