Blame | Last modification | View Log | RSS feed
/****/package in.shop2020.util;import in.shop2020.metamodel.core.Entity;import in.shop2020.metamodel.core.Slide;import in.shop2020.metamodel.definitions.Catalog;import in.shop2020.metamodel.definitions.DefinitionsContainer;import in.shop2020.metamodel.definitions.EntityContainer;import in.shop2020.metamodel.util.ExpandedCMPSlideRuleDefinition;import in.shop2020.metamodel.util.ExpandedSlide;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.TreeMap;/*** @author naveen**/public class CMP {/****/private long categoryID;/*** @param args* @throws Exception*/public static void main(String[] args) throws Exception {String usage = "Usage: CMP {Category ID}";if(args.length > 1) {System.out.println(usage);System.exit(-1);}long categoryID = 0L;if(args.length > 0) {try {categoryID = Long.parseLong(args[0]);}catch (NumberFormatException nfe) {System.out.println(usage);System.exit(-1);}}CMP cmp = new CMP(categoryID);// Entity ID > List(Slide ID > Score)Map<Long, Map<Long, Integer>> slideScoresByEntity =cmp.getSlideScores();String dbFile = Utils.COMPARISONS_DB_PATH + "slidescores.ser";DBUtils.store(slideScoresByEntity, dbFile);// Entity ID > Final ScoreMap<Long, Integer> finalScoreByEntityID = cmp.getFinalScores(slideScoresByEntity);dbFile = Utils.COMPARISONS_DB_PATH + "defaultentityscores.ser";DBUtils.store(finalScoreByEntityID, dbFile);}/**** @param categoryID*/public CMP(long categoryID) {this.categoryID = categoryID;}/**** @return Map<Long, Map<Long, Integer>>* @throws Exception*/private Map<Long, Map<Long, Integer>> getSlideScores() throws Exception {Map<Long, Map<Long, Integer>> slideScoresByEntityID =new TreeMap<Long, Map<Long, Integer>>();// Calculate scores based on ruleEntityContainer ents =Catalog.getInstance().getEntityContainer();Map<Long, Entity> entitiesMap = ents.getEntities();for(Long entityID : entitiesMap.keySet()) {Entity entity = entitiesMap.get(entityID);// If provided, filter by categoryif(this.categoryID != 0L &&(this.categoryID != entity.getCategoryID())) {continue;}Map<Long, Integer> slideScores = this.getSlideScores(entity);slideScoresByEntityID.put(entityID, slideScores);}return slideScoresByEntityID;}/**** @param entity* @return Map<Long, Integer>* @throws Exception*/private Map<Long, Integer> getSlideScores(Entity entity) throws Exception {Map<Long, Integer> slideScores = new HashMap<Long, Integer>();DefinitionsContainer defs =Catalog.getInstance().getDefinitionsContainer();// Python wrapper for executing rule in python scriptCMPJythonWrapper cmpJW = new CMPJythonWrapper();// Scores are required for parent slides onlyList<Slide> slides = entity.getSlides();for(Slide slide : slides) {ExpandedSlide expSlide = new ExpandedSlide(slide);cmpJW.setExpandedSlide(expSlide);long slideDefinitionID = slide.getSlideDefinitionID();ExpandedCMPSlideRuleDefinition expCMPSlideRuleDef =defs.getExpandedComparisonSlideRuleDefinition(slideDefinitionID);cmpJW.setExpandedCMPSlideRuleDefinition(expCMPSlideRuleDef);cmpJW.execCMPRule();int score = cmpJW.getScore();Utils.info("score=" + score);slideScores.put(new Long(slideDefinitionID), new Integer(score));}return slideScores;}/**** @param slideScoresByEntity* @return Map<Long, Integer>*/private Map<Long, Integer> getFinalScores(Map<Long, Map<Long, Integer>> slideScoresByEntity) {Map<Long, Integer> finalScoreByEntityID = new TreeMap<Long, Integer>();// Considering default Weights per Slide bucket// Slide buckets > List(Very Important, Regular, Not-so-Important)// Default Weights > List(70%, 20%, 10%)// TODOreturn finalScoreByEntityID;}}