Subversion Repositories SmartDukaan

Rev

Rev 1153 | Go to most recent revision | 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.ExpandedFacetDefinition;
import in.shop2020.metamodel.util.ExpandedFacetSlideDefinition;
import in.shop2020.metamodel.util.ExpandedSlideDefinition;

import java.util.ArrayList;
import java.util.List;

import org.python.core.PyObject;
import org.python.core.PyString;

/**
 * Wrapper around Jython for Meta-data related to Information Retrieval data
 * 
 * @author naveen
 *
 */
public class IRMetaDataJythonWrapper extends JythonWrapper {
        
        /**
         * Local instance of Facet Definition - Used to pick script to execute
         */
        private ExpandedFacetDefinition expandedFacetDefinition = null;
        
        /**
         * Set of possible values collected while irdata 
         */
        private List<String> possibleValues = new ArrayList<String>();
        
        /**
         * Resets current PythonInterpreter instance
         */
        public void reset() {
                super.reset();
                this.expandedFacetDefinition = null;
        }
        
        /**
         * 
         * @param expandedFacetDefinition
         */
        public void setExpandedFacetDefinition(
                        ExpandedFacetDefinition expandedFacetDefinition) {
                this.initialize();
                
                this.expandedFacetDefinition = expandedFacetDefinition;
                this.py.set("expFacetDef", expandedFacetDefinition);
        }
        
        /**
         * Executes IR Data rule from ExpandedFacetDefinition instance
         * @throws Exception 
         */
        public void executeRule() throws Exception {
                if(this.py == null || this.expandedFacetDefinition == null) {
                        throw new IllegalStateException(
                                        "Not initialized properly");
                }
                

                List<ExpandedFacetSlideDefinition> expFacetSlideDefs = expandedFacetDefinition.getExpandedFacetSlideDefinitions();
                for(ExpandedFacetSlideDefinition expFacetSlideDef: expFacetSlideDefs){
                        
                        SlideDefinition slideDef = expFacetSlideDef.getSlideDefinition();
                        
                        ExpandedSlideDefinition expSlideDef = new ExpandedSlideDefinition(slideDef);
                        
                        this.py.set("expSlideDef", expSlideDef);
                        
                        RuleDefinition ruleDef =  expFacetSlideDef.getIrMetadataRuleDefinition();
                        
                        // Feature Labels
                        //Utils.info("possibleValues=" + possibleValues);
                        this.py.set("possibleValues", possibleValues);
                        System.out.println(ruleDef);
                        String pyScript = ruleDef.getScript();
                        String scriptFullPath = Utils.JYTHON_SRC_PATH + "irmetadatarules/" + pyScript;  

                        Utils.info("ruleDef.getID()=" + ruleDef.getID());
                        Utils.info("scriptFullPath=" + scriptFullPath);
                        
                        this.exec(scriptFullPath);

                }
        }
        
//              // expFeatureDef
//              if(featureDef != null) {
//                      ExpandedFeatureDefinition expFeatureDef = 
//                              new ExpandedFeatureDefinition(featureDef);
//                      
//                      this.py.set("expFeatureDef", expFeatureDef);
//                      
//                      ExpandedBulletDefinition expBulletDef = 
//                              expFeatureDef.getExpandedBulletDefinition();
//                      
//                      // Fixed
//                      if (expBulletDef.isEnumerated()) {
//                              EnumDefinition enumDef = 
//                                      (EnumDefinition) expBulletDef.getDatatypeDefinition();
//                              
//                              List<EnumValue> enumValues = enumDef.getEnumValues();
//                              
//                              for(EnumValue enumValue : enumValues) {
//                                      possibleValues.add(enumValue.getValue());
//                              }
//
//                              //Utils.info("possibleValues=" + possibleValues);
//                              this.py.set("possibleValues", possibleValues);
//                      } 
//                      
//                      // Get values collected across entities
//                      else {
//                              
//                              long facetDefinitionID = this.expandedFacetDefinition.getID();
//                              
//                              
//                              possibleValues = CreationUtils.getFacetValues(facetDefinitionID);
//                              
//                              //Utils.info("possibleValues=" + possibleValues);
//                              this.py.set("possibleValues", possibleValues);
//                      }
//              }
//
//              // expSlideDef
//              else if(slideDef != null) {
//                      ExpandedSlideDefinition expSlideDef = 
//                              new ExpandedSlideDefinition(slideDef);
//                      
//                      this.py.set("expSlideDef", expSlideDef);
//                      
//                      List<ExpandedSlideFeatureDefinition> expSlideFeatureDefs = 
//                              expSlideDef.getExpandedSlideFeatureDefinitions();
//                      
//                      for(ExpandedSlideFeatureDefinition expSlideFeatureDef : 
//                                      expSlideFeatureDefs) {
//                              
//                              ExpandedFeatureDefinition expFeatureDef = 
//                                      expSlideFeatureDef.getExpandedFeatureDefinition();
//                              
//                              possibleValues.add(expFeatureDef.getLabel());
//                      }
//                      
//                      // Feature Labels
//                      //Utils.info("possibleValues=" + possibleValues);
//                      this.py.set("possibleValues", possibleValues);
//              }
                
        
        
        /**
         * Set the possible values set
         */
        public void setPossibleValues(List<String> possibleValues){
                this.possibleValues = possibleValues;
        }
        
        /**
         * 
         * @return
         */
        public String getXMLSnippet() {
                if(this.py == null) {
                        throw new IllegalStateException("Exec is not called yet");
                }
                
                PyObject xmlsnippet = this.py.get("xmlsnippet");
                
                return ((PyString)xmlsnippet).toString();
        }
}