Subversion Repositories SmartDukaan

Rev

Rev 1050 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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

import in.shop2020.metamodel.core.Entity;
import in.shop2020.metamodel.definitions.Catalog;
import in.shop2020.metamodel.definitions.EntityContainer;
import java.util.List;
import java.util.Map;

/**
 * Utility to query data from Entities DB
 * 
 * Usage: {Slide Name1, Child Slide Name, Child's Child Slide Name...} {Feature Name}
 * @author naveen
 *
 */
public class QRY {

        /**
         * @param args
         * @throws Exception 
         */
        public static void main(String[] args) throws Exception {
                if(args.length < 1) {
                        System.out.println("Usage: {Slide Name1, Child Slide Name, " + 
                                        "Child's Child Slide Name...} {Feature Name}");
                        System.exit(-1);
                }
                
                QRY qry = new QRY(args);
                qry.exec();
        }
        
        private String[] slideNames;
        private String featureName;

        
        /**
         * Level - 4, 8, 12, 16
         */
        private String[] indentation = {"", "    ", "        ", "            ", 
                        "                ", "                    ", 
                        "                        "};
        
        /**
         * 
         * @param args
         */
        public QRY(String[] args) {
                if(args.length == 1) {
                        this.slideNames = new String[] { args[0] };
                }
                else {
                        this.featureName = args[args.length-1];
                        
                        this.slideNames = new String[args.length-1];
                        for(int i=0;i<args.length-1;i++) {
                                this.slideNames[i] = args[i];
                        }
                }
        }
        
        /**
         * @throws Exception 
         * 
         */
        public void exec() throws Exception {
                Map<Long, Entity> entities =  CreationUtils.getEntities();
                
                for(Entity entity : entities.values()) {
                        ExpandedEntity expEntity = new ExpandedEntity(entity);
                        String entityName = expEntity.getBrand() + " " + 
                                expEntity.getModelName() + " " + expEntity.getModelNumber();
                        
                        String categoryLabel = expEntity.getCategory().getLabel();
                        System.out.println(entityName + " (" + categoryLabel + ")");
                        
                        List<ExpandedSlide> expSlides = expEntity.getExpandedSlides();
                        
                        ExpandedSlide expSlide = null;
                        
                        int indent = 1;
                        int i = 0;
                        for(;i<this.slideNames.length;i++) {
                                String slideName = this.slideNames[i];
                                expSlide = this.getMatchingSlide(expSlides, slideName);
                                
                                if(expSlide == null) {
                                        break;
                                }
                                
                                String slideLabel = expSlide.getSlideDefinition().getLabel();
                                System.out.println(this.indentation[indent] + slideLabel);

                                if(!expSlide.hasChildrenSlides()) {
                                        break;
                                }
                                
                                List<ExpandedSlide> expChildrenSlides = 
                                        expSlide.getExpandedChildrenSlides();
                                
                                // For next iteration
                                expSlides = expChildrenSlides;
                                indent++;
                        }
                        
                        //  && i == this.slideNames.length-1
                        if(expSlide != null) {
                                List<ExpandedFeature> expFeatures = 
                                        expSlide.getExpandedFeatures();
                                indent = indent + 1;
                                for(ExpandedFeature expFeature : expFeatures) {
                                        if(expFeature.getFeatureDefinition().getLabel().
                                                equalsIgnoreCase(this.featureName)) {

                                                String featureLabel = 
                                                        expFeature.getFeatureDefinition().getLabel();
                                                System.out.println(this.indentation[indent] + 
                                                                featureLabel);
                                                
                                                List<ExpandedBullet> expBullets = 
                                                        expFeature.getExpandedBullets();
                                                
                                                if(expBullets == null) {
                                                        System.out.println(this.indentation[indent+1] + 
                                                                        "No bullets found");
                                                } 
                                                
                                                else {
                                                        
                                                        for(ExpandedBullet expBullet : expBullets) {
                                                                System.out.println(this.indentation[indent+1] + 
                                                                                expBullet.displayText());
                                                        }
                                                }
                                                break;
                                        }
                                }
                        }
                }
        }
        
        /**
         * 
         * @param expSlides
         * @return
         */
        private ExpandedSlide getMatchingSlide(List<ExpandedSlide> expSlides, 
                        String slideName) {
                
                for (ExpandedSlide expSlide : expSlides) {
                        if(expSlide.getSlideDefinition().getLabel().
                                        equalsIgnoreCase(slideName)) {
                                return expSlide;
                        }
                }
                
                return null;
        }
}