Subversion Repositories SmartDukaan

Rev

Rev 1061 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.util;

import in.shop2020.metamodel.definitions.RuleDefinition;
import in.shop2020.metamodel.definitions.SlideDefinition;
import in.shop2020.metamodel.util.ExpandedFacetSlideDefinition;
import in.shop2020.metamodel.util.ExpandedSlide;

import java.util.List;

import org.python.core.PyList;
import org.python.core.PyObject;

/**
 * Wrapper around Jython for Information Retrieval Python scripts
 * 
 * @author naveen
 *
 */
public class IRDataJythonWrapper extends JythonWrapper {
        
        /**
         * Local instance of Facet Rule Definition - Used to pick script to execute
         */
        private ExpandedFacetSlideDefinition expandedFacetSlideDefinition = null;
        
        /**
         * Resets current PythonInterpreter instance
         */
        public void reset() {
                super.reset();
                this.expandedFacetSlideDefinition = null;
        }
        
        /**
         * 
         * @param expandedFacetSlideDefinition
         */
        public void setExpandedFacetSlideDefinition(
                        ExpandedFacetSlideDefinition expandedFacetSlideDefinition) {
                this.initialize();
                
                this.expandedFacetSlideDefinition = expandedFacetSlideDefinition;
                this.py.set("expFacetRuleDef", expandedFacetSlideDefinition);
        }
        
        
        /**
         * 
         * @param itemPrice
         */
        public void setEntityPrice(double itemPrice) {
                this.initialize();
                
                this.py.set("itemPrice", itemPrice);
        }
        
        
        
        /**
         * 
         * @param slideDefinition
         */
        public void setSlideDefinition(SlideDefinition slideDefinition) {
                this.initialize();
                
                this.py.set("slideDef", slideDefinition);
        }
        
        /**
         * 
         * @param slide
         */
        public void setExpandedSlide(ExpandedSlide expSlide) {
                this.initialize();
                
                this.py.set("expSlide", expSlide);
        }
        
        /**
         * Executes IR Data rule from ExpandedFacetSlideDefinition instance
         */
        public void executeRule() {
                if(this.py == null || this.expandedFacetSlideDefinition == null) {
                        throw new IllegalStateException(
                                        "Not initialized properly");
                }
                
                RuleDefinition irdataRuleDef = this.expandedFacetSlideDefinition.getIrDataRuleDefinition();
                
                String pyScript = irdataRuleDef.getScript();
                String scriptFullPath = Utils.JYTHON_SRC_PATH + "irdatarules/" + 
                        pyScript;
                
                Utils.info("irdataRuleDef.getID()=" + irdataRuleDef.getID());
                Utils.info("scriptFullPath=" + scriptFullPath);
                
                this.exec(scriptFullPath);
        }
        
        /**
         * 
         * @return
         */
        @SuppressWarnings("unchecked")
        public List getValues() {
                if(this.py == null) {
                        throw new IllegalStateException("Exec is not called yet");
                }
                
                PyObject values = this.py.get("values");
                
                return (PyList)values;
        }
}