Rev 163 | Blame | Last modification | View Log | RSS feed
/****/package in.shop2020.ui.util;import in.shop2020.metamodel.core.Bullet;import in.shop2020.metamodel.core.Entity;import in.shop2020.metamodel.core.Feature;import in.shop2020.metamodel.core.PrimitiveDataObject;import in.shop2020.metamodel.definitions.Catalog;import in.shop2020.metamodel.definitions.DefinitionsContainer;import in.shop2020.metamodel.definitions.EntityContainer;import in.shop2020.metamodel.definitions.SlideDefinition;import in.shop2020.metamodel.util.ExpandedCategory;import in.shop2020.metamodel.util.ExpandedEntity;import in.shop2020.metamodel.util.ExpandedSlide;import in.shop2020.util.Utils;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import org.apache.commons.lang.StringUtils;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;/*** Driver class to merge Java data objects with VTL script** @author naveen**/public class VUI {/*** Usage: VUI [entity|category|category_carousal|diff] [Entity ID|Category ID|EntityID1_EntityID2] {Template file name}** @param args*/public static void main(String[] args) throws Exception {//diffAll();//System.exit(0);String[] commands = new String[] {"entity", "category","category_carousal", "diff"};String[] datatypes = new String[] {"Entity ID", "Category ID","EntityID1_EntityID2"};String usage = "Usage: VUI ["+ StringUtils.join(commands, "|") +"] ["+StringUtils.join(datatypes, "|") + "] {Template file name}";if(args.length < 3) {System.out.println(usage);System.exit(-1);}String inputCommand = args[0];String inputID = args[1];String templateFilename = args[2];long id = 0;if(inputCommand.equals("entity") || inputCommand.equals("category") ||inputCommand.equals("category_carousal")) {try {id = Long.parseLong(inputID);}catch (NumberFormatException nfe) {System.out.println("Invalid ID - " + inputID);System.exit(-1);}}// SetupVelocity.init("src/in/shop2020/ui/util/velocity.properties");VelocityContext context = new VelocityContext();String templateFile = Utils.VTL_SRC_PATH + templateFilename + ".vm";Template template = null;String exportFileName = null;DefinitionsContainer defs =Catalog.getInstance().getDefinitionsContainer();EntityContainer ents =Catalog.getInstance().getEntityContainer();// Entitiesif(inputCommand.equals("entity")) {EntityContainer entContainer =Catalog.getInstance().getEntityContainer();ExpandedEntity expEntity = entContainer.getExpandedEntity(id);Utils.logger.info("expEntity=" + expEntity);context.put("expentity", expEntity);template = Velocity.getTemplate(templateFile);exportFileName = Utils.EXPORT_ENTITIES_PATH + id + ".html";}// Category definitionselse if(inputCommand.equals("category")) {ExpandedCategory expCategory = defs.getExpandedCategory(id);Utils.info("expCategory=" + expCategory);context.put("expcategory", expCategory);template = Velocity.getTemplate(templateFile);exportFileName = Utils.EXPORT_DEFINITIONS_PATH + id + ".html";}// Category carousalelse if(inputCommand.equals("category_carousal")) {String categoryName = defs.getCategory(id).getLabel();List<Entity> entities = ents.getEntities(id);List<String[]> entitiesToShow = new ArrayList<String[]>();for(Entity entity : entities) {String snippets[] = new String[4];// Entity IDsnippets[0] = new Long(entity.getID()).toString();Feature feature = ents.getFeature(entity.getID(),Utils.SNIPPETS_FEATURE_DEFINITIONID);List<Bullet> bullets = feature.getBullets();if(bullets.size() > 0) {snippets[1] = ((PrimitiveDataObject)bullets.get(0).getDataObject()).getValue();}if(bullets.size() > 1) {snippets[2] = ((PrimitiveDataObject)bullets.get(1).getDataObject()).getValue();}if(bullets.size() > 2) {snippets[3] = ((PrimitiveDataObject)bullets.get(2).getDataObject()).getValue();}Utils.info("snippets=" + Arrays.toString(snippets));entitiesToShow.add(snippets);}Utils.info("categoryName=" + categoryName);Utils.info("entitiesToShow=" + entitiesToShow);context.put("categoryName", categoryName);context.put("entitiesToShow", entitiesToShow);template = Velocity.getTemplate(templateFile);exportFileName = Utils.EXPORT_CATEGORY_HOMES_PATH + id + ".html";}// Differenceelse if(inputCommand.equals("diff")) {String[] entityIDs = StringUtils.split(inputID, "_");if(entityIDs.length < 2) {System.out.println("Invalid IDs - " + inputID);System.exit(-1);}long entityID1 = 0L;long entityID2 = 0L;try {entityID1 = Long.parseLong(entityIDs[0]);entityID2 = Long.parseLong(entityIDs[1]);} catch(NumberFormatException nfe) {System.out.println("Invalid IDs - " + inputID);System.exit(-1);}Utils.info("entityIDs=" + Arrays.toString(entityIDs));ExpandedEntity expEntity1 = ents.getExpandedEntity(entityID1);ExpandedEntity expEntity2 = ents.getExpandedEntity(entityID2);List<ExpandedSlide[]> mergedSlides =getMergedSlides(expEntity1, expEntity2);Utils.info("mergedSlides=" + mergedSlides);Collection<String[]> mergedComparisonScores =getMergedComparisonScores(expEntity1, expEntity2);Utils.info("mergedComparisonScores=" + mergedComparisonScores);int scoreEntity1 = ents.getEntityComparisonScore(expEntity1.getID());int scoreEntity2 = ents.getEntityComparisonScore(expEntity2.getID());context.put("expEntity1", expEntity1);context.put("expEntity2", expEntity2);context.put("mergedSlides", mergedSlides);context.put("mergedComparisonScores", mergedComparisonScores);context.put("scoreEntity1", scoreEntity1);context.put("scoreEntity2", scoreEntity2);template = Velocity.getTemplate(templateFile);exportFileName = Utils.EXPORT_DIFF_PATH + entityIDs[0] + "_" +entityIDs[1] + ".html";}if(template != null) {File exportFile = new File(exportFileName);if(!exportFile.exists()) {exportFile.createNewFile();}BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exportFile)));template.merge(context, writer);writer.flush();writer.close();Utils.info("Export Complete!");}}/**** @param expEntity1* @param expEntity2* @return* @throws Exception*/private static Collection<String[]> getMergedComparisonScores(ExpandedEntity expEntity1, ExpandedEntity expEntity2)throws Exception {EntityContainer ents = Catalog.getInstance().getEntityContainer();DefinitionsContainer defs =Catalog.getInstance().getDefinitionsContainer();Map<String, String[]> mergedSlideScores =new LinkedHashMap<String, String[]>();Map<Long, Integer> cmpSlideScores1 = ents.getSlideComparisonScores(expEntity1.getID());for(Long slideID : cmpSlideScores1.keySet()) {SlideDefinition slideDef = defs.getSlideDefinition(slideID.longValue());String slideLabel = slideDef.getLabel();String[] details = new String[3];details[0] = slideLabel;Integer score = cmpSlideScores1.get(slideID);if(score != null) {details[1] = score.toString();}else {details[1] = "-1";}// To be determined in loop over 2nd entity's scoresdetails[2] = "-1";mergedSlideScores.put(slideLabel, details);}Map<Long, Integer> cmpSlideScores2 = ents.getSlideComparisonScores(expEntity2.getID());for(Long slideID : cmpSlideScores2.keySet()) {SlideDefinition slideDef = defs.getSlideDefinition(slideID.longValue());String slideLabel = slideDef.getLabel();String[] details = null;if(mergedSlideScores.containsKey(slideLabel)) {details = mergedSlideScores.get(slideLabel);}else {details = new String[3];details[0] = slideLabel;details[1] = "-1";mergedSlideScores.put(slideLabel, details);}Integer score = cmpSlideScores2.get(slideID);if(score != null) {details[2] = score.toString();}else {details[2] = "-1";}}return mergedSlideScores.values();}/**** @param expEntity1* @param expEntity2*/private static List<ExpandedSlide[]> getMergedSlides(ExpandedEntity expEntity1, ExpandedEntity expEntity2) {List<ExpandedSlide[]> mergedSlides = new ArrayList<ExpandedSlide[]>();EntityContainer ents = Catalog.getInstance().getEntityContainer();List<ExpandedSlide> expSlidesEntity1 = expEntity1.getExpandedSlides();for(ExpandedSlide expSlide1 : expSlidesEntity1) {String slideLabel = expSlide1.getSlideDefinition().getLabel();ExpandedSlide expSlide2 = ents.getParentExpandedSlide(expEntity2, slideLabel);if(expSlide2 != null) {ExpandedSlide[] comparisonSlides = new ExpandedSlide[2];comparisonSlides[0] = expSlide1;comparisonSlides[1] = expSlide2;mergedSlides.add(comparisonSlides);}}return mergedSlides;}public static void diffAll() throws Exception {long[] entityIDs = new long[] {1000001,1000002,1000003,1000004,1000005,1000006,1000007,1000008,1000009,1000010,1000011,1000012,1000013,1000014,1000015};for(int i=0;i<entityIDs.length;i++) {for(int j=0;j<entityIDs.length;j++) {diff(entityIDs[i], entityIDs[j]);}}}public static void diff(long entityID1, long entityID2) throws Exception {// SetupVelocity.init("src/in/shop2020/ui/util/velocity.properties");VelocityContext context = new VelocityContext();String templateFile = Utils.VTL_SRC_PATH + "jquery_diff_slideguide.vm";Template template = null;String exportFileName = null;EntityContainer ents = Catalog.getInstance().getEntityContainer();ExpandedEntity expEntity1 = ents.getExpandedEntity(entityID1);ExpandedEntity expEntity2 = ents.getExpandedEntity(entityID2);List<ExpandedSlide[]> mergedSlides =getMergedSlides(expEntity1, expEntity2);Utils.info("mergedSlides=" + mergedSlides);Collection<String[]> mergedComparisonScores =getMergedComparisonScores(expEntity1, expEntity2);Utils.info("mergedComparisonScores=" + mergedComparisonScores);int scoreEntity1 = ents.getEntityComparisonScore(expEntity1.getID());int scoreEntity2 = ents.getEntityComparisonScore(expEntity2.getID());context.put("expEntity1", expEntity1);context.put("expEntity2", expEntity2);context.put("mergedSlides", mergedSlides);context.put("mergedComparisonScores", mergedComparisonScores);context.put("scoreEntity1", scoreEntity1);context.put("scoreEntity2", scoreEntity2);template = Velocity.getTemplate(templateFile);exportFileName = Utils.EXPORT_DIFF_PATH + entityID1 + "_" + entityID2 +".html";File exportFile = new File(exportFileName);if(!exportFile.exists()) {exportFile.createNewFile();}BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exportFile)));template.merge(context, writer);writer.flush();writer.close();Utils.info("Export Complete!");}}