Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.util;

import in.shop2020.metamodel.core.Bullet;
import in.shop2020.metamodel.core.BulletDataObject;
import in.shop2020.metamodel.core.Entity;
import in.shop2020.metamodel.core.EntityState;
import in.shop2020.metamodel.core.EnumDataObject;
import in.shop2020.metamodel.core.Feature;
import in.shop2020.metamodel.core.FreeformContent;
import in.shop2020.metamodel.core.PrimitiveDataObject;
import in.shop2020.metamodel.core.Slide;
import in.shop2020.metamodel.definitions.BulletDefinition;
import in.shop2020.metamodel.definitions.Catalog;
import in.shop2020.metamodel.definitions.Category;
import in.shop2020.metamodel.definitions.CategorySlideDefinition;
import in.shop2020.metamodel.definitions.DefinitionsContainer;
import in.shop2020.metamodel.definitions.FeatureDefinition;
import in.shop2020.metamodel.definitions.SlideDefinition;
import in.shop2020.metamodel.definitions.SlideFeatureDefinition;
import in.shop2020.metamodel.util.CreationUtils;
import in.shop2020.metamodel.util.ExpandedBullet;
import in.shop2020.metamodel.util.ExpandedEntity;
import in.shop2020.model.v1.catalog.InventoryService.Client;
import in.shop2020.model.v1.catalog.Item;
import in.shop2020.model.v1.catalog.status;
import in.shop2020.thrift.clients.CatalogClient;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/*
 * @author rajveer 
 * 
 *
 */

public class ContentMigrator {
        private String sourceDbPath;
        private String destinationDbPath;
        public static void main(String[] args) throws Exception {
                String usage = "Usage: ContentMigrator {source db path}{destination db path}";
                
                String sourceDbPath = null, destinationDbPath = null; String dryRun = null;
//              if(args.length < 2) {
//                      System.out.println(usage);
//                      System.exit(-1);
//              }else{
//                      sourceDbPath = args[0];
//                      destinationDbPath = args[1];
//                      dryRun = args[2];
//              }
//              
                ContentMigrator contentmigrator = new ContentMigrator(sourceDbPath, destinationDbPath);
                contentmigrator.migrateWarrantyType();
//      CreationUtils.storeComparisonStats(null);
//              contentmigrator.migrateMedia();
                
                
                //contentmigrator.populateHelpdocEntityIds();
                //contentmigrator.migrateDataBack();
                //contentmigrator.migrateBrandModel(dryRun);
                //contentmigrator.migrateData();
                //contentmigrator.migrateRemoveBorrowedCategoryIdFromSlide();
                //contentmigrator.migrateModel1();
                //contentmigrator.changeEntityState();
                //contentmigrator.removeBrowserBullets();
                //contentmigrator.migrateModel2();
                //contentmigrator.printDataModel();
                //contentmigrator.makeEntitiesObject();
                //contentmigrator.printSlides();
                /*
                DefinitionsContainer dfc = Catalog.getInstance().getDefinitionsContainer();
                for(Long fid: dfc.getCategoryFacetDefinitions().keySet()){
                        for(FacetDefinition facetDef: dfc.getCategoryFacetDefinitions().get(fid).getFacetDefinitions()){
                                System.out.println("***" + fid + " *** " + facetDef.getID() + facetDef.getTarget() );
                        }
                        
                }*/
                
                //System.out.println("**********" + dfc.getCategoryFacetDefinitions());
                //System.out.println("**********" + dfc.getSlideFacetDefinitions());
                
                /*
                for(Long defID : dfc.getSlideFacetDefinitions().keySet()){
                        for(FacetDefinition facetDef: dfc.getSlideFacetDefinitions().get(defID)){
                                System.out.println(defID + "****" + facetDef.getID() + facetDef.getDescription());      
                        }
                        
                }
                */
                
                /*
                System.out.println(OldCreationUtils.getSlideSequence(1000194));
                List<Slide> slides =  OldCreationUtils.getEntity(1000194).getSlides();
                for(Slide slide: slides){
                        System.out.println(slide.getSlideDefinitionID());
                }
                */
                
                //ContentMigrator contentmigrator = new ContentMigrator(sourceDbPath, destinationDbPath);
                //boolean result = contentmigrator.migrate();
                //System.out.println("Content migration status:  "+ result);
                
                
        }


        public ContentMigrator(String sourceDbPath, String destinationDbPath) {
                this.sourceDbPath      = sourceDbPath;
                this.destinationDbPath = destinationDbPath;
        }

        public void migrateWarrantyType() throws Exception {
            Map<Long, Entity> map = CreationUtils.getEntities();
            for (Long entityId : map.keySet()) {
            Entity entity = map.get(entityId);
            if (entity == null || entity.getSlides() == null) {
                continue;
            }
            for (Slide slide : entity.getSlides()) {
                if (slide.getSlideDefinitionID() == 130054) {
                    Slide warrantySlide = new Slide(130105);
                    warrantySlide.setFeatures(new ArrayList<Feature>());

                    Feature feature = new Feature(120219);
                    feature.setBullets(Collections.singletonList(new Bullet(new EnumDataObject(110299))));
                    warrantySlide.getFeatures().add(feature);

                    Feature existingWarrantyFeature = null;
                    for (Feature summaryFeature : slide.getFeatures()) {
                        if (summaryFeature.getFeatureDefinitionID() == 120125) {
                            existingWarrantyFeature = summaryFeature;
                            warrantySlide.getFeatures().add(summaryFeature);
                            break;
                        }
                    }
                    
                    slide.getFeatures().remove(existingWarrantyFeature);
                    slide.addChild(warrantySlide);
                    break;
                }
                
            }

            CreationUtils.updateEntity(entity);
            }
        }

        public void migrateMedia() throws Exception {
            Map<Long, Entity> map = CreationUtils.getEntities();
            for (Long entityId : map.keySet()) {
                Entity entity = map.get(entityId);
                if (entity == null || entity.getSlides() == null) {
                    continue;
                }
                for (Slide slide : entity.getSlides()) {
                    FreeformContent ffc = slide.getFreeformContent();

//                  if (ffc == null || ffc.getMediasNew() == null) {
//                    continue;
//                }
//
//                Map<String, Media> newMap = new LinkedHashMap<String, Media>();
//                Media media = null;
//                for (String label : ffc.getMediasNew().keySet()) {
//                    MediaNew m = ffc.getMediasNew().get(label);
//                    media = new Media(m.getLabel(), Media.Type.valueOf(m
//                            .getType().name()), m.getLocation());
//                    media.setTitle(m.getTitle());
//                    media.setFileName(m.getFileName());
//                    newMap.put(label, media);
//                }
//                ffc.setMedias(newMap);
//                ffc.setMediasNew(null);


//                   if (ffc == null || ffc.getMedias() == null) {
//                       continue;
//                   }
//                Map<String, MediaNew> newMap = new LinkedHashMap<String, MediaNew>();
//                MediaNew mediaNew = null;
//                for (String label : ffc.getMedias().keySet()) {
//                    Media m = ffc.getMedias().get(label);
//                    if (m.getType().equalsIgnoreCase("image")) {
//                        mediaNew = new MediaNew(m.getLabel(),
//                                MediaNew.Type.IMAGE, m.getLocation());
//                        mediaNew.setFileName(m.getFileName());
//                    } else if (m.getType().equalsIgnoreCase("youtube")) {
//                        if (m.getVideoType().equalsIgnoreCase("withskin")) {
//                            mediaNew = new MediaNew(m.getLabel(),
//                                    MediaNew.Type.VIDEO_WITH_SKIN,
//                                    m.getLocation());
//                        } else {
//                            mediaNew = new MediaNew(m.getLabel(),
//                                    MediaNew.Type.VIDEO_WITHOUT_SKIN,
//                                    m.getLocation());
//                        }
//                    }
//
//                    if (mediaNew != null) {
//                        mediaNew.setTitle(m.getTitle());
//                        newMap.put(label, mediaNew);
//                    }
//                }
//                ffc.setMediasNew(newMap);
//                ffc.setMedias(null);
                }
                CreationUtils.updateEntity(entity);
            }
        }

        public boolean populateHelpdocEntityIds() throws Exception{
                for(Entity entity: CreationUtils.getEntities().values()){
                        CreationUtils.updateEntity(entity);
                }
                return true;
        }

        public boolean migrateBrandModel(String dryRun) throws Exception{
                CatalogClient catalogServiceClient = new CatalogClient();
                Client client = catalogServiceClient.getClient();
                List<Item> items = client.getAllItemsByStatus(status.ACTIVE);
                items.addAll(client.getAllItemsByStatus(status.PAUSED));
                items.addAll(client.getAllItemsByStatus(status.CONTENT_COMPLETE));
                Map<Long, Entity> entities = CreationUtils.getEntities();
                long count = 0;
                StringBuffer sb = new StringBuffer();
                for(Item item:items){
                        long entityId = item.getCatalogItemId();
                        Entity entity = entities.get(entityId);
                        if(entity==null){
                                continue;
                        }
                        String itemBrand = item.getBrand().trim();
                        String itemModelName = item.getModelName();
                        if(itemModelName!=null){
                                itemModelName = itemModelName.trim();
                        }
                        String itemModelNumber = item.getModelNumber().trim();
                        String entityBrand = entity.getBrand().trim();
                        String entityModelName = entity.getModelName().trim();
                        if(entityModelName!=null){
                                entityModelName = entityModelName.trim();
                        }
                        String entityModelNumber = entity.getModelNumber().trim();
                        
                        if(itemBrand.equals(entityBrand) && itemModelNumber.equals(entityModelNumber)){
                                if(itemModelName!=null && entityModelName !=null &&  itemModelName.equals(entityModelName)){
                                        continue;       
                                }else if(itemModelName==null && entityModelName ==null){
                                        continue;
                                }
                                
                        }
                        count++;
                        sb.append(count + ") Item:   " + itemBrand + "\t" + itemModelName + "\t" + itemModelNumber+ "\t"+ item.getId() + "\n");
                        sb.append(count + ") Entity: " + entityBrand + "\t" + entityModelName + "\t" + entityModelNumber+ "\t" + entity.getID() + "\n");
                        
                        if(dryRun.equals("false")){
                                item.setBrand(entityBrand);
                                item.setModelName(entityModelName);
                                item.setModelNumber(entityModelNumber);
                                client.updateItem(item);                                
                        }
                }
                System.out.println(sb.toString());
                return true;
        }

        /**
         * this function will read source definition and source entities, and will convert
         * source entities to destination entities according to destination definitions.  
         * 
         * @return boolean
         * @throws Exception 
         */

        public void printSlides() throws Exception{
                DefinitionsContainer defc = Catalog.getInstance().getDefinitionsContainer();
                for(Category category: defc.getCategories().values()){
                        if(category.getChildrenCategory()!=null)continue;
                        System.out.println(category.getID() + "\t" +category.getLabel());
                        for(CategorySlideDefinition defs: defc.getCategorySlideDefinitions(category.getID())){
                                System.out.println(defs.getSlideDefintionID() + "\t" + defs.getEditorialImportance() + "\t" +  defc.getSlideDefinition(defs.getSlideDefintionID()).getLabel()+"\t"+defc.getSlideDefinition(defs.getSlideDefintionID()).getChildrenSlideDefinitionIDs());
                        }
                }
        }
        
        public void removeBrowserBullets() throws Exception{
                Map<Long, List<ExpandedBullet>> learnedBullets =  CreationUtils.getLearnedBullets();
                learnedBullets.get(new Long(120076));
                learnedBullets.remove(new Long(120076));
                CreationUtils.storeLearnedBullets(learnedBullets);
                
        }
        
        public boolean changeEntityState() throws Exception{
                Map<Long, EntityState> entitiesState = CreationUtils.getEntitiesState();
                for(Long entityId: entitiesState.keySet()){
                        EntityState state = entitiesState.get(entityId);
                        if(state.getCategoryID() == 10002 || state.getCategoryID() == 10003 || state.getCategoryID() == 10004 || state.getCategoryID() == 10005){
                                state.setCompletedBy("");
                                state.setMerkedReadyBy("");
                                //state.setStatus(EntityStatus.ASSIGNED);
                                //CreationUtils.updateEntityState(state);
                                System.out.println(entityId + ":" + state.getStatus());
                        }
                        CreationUtils.updateEntityState(state);
                }
                return true;
        }
        

           public boolean migrateDataBack() throws Exception{
                Map<Long, Entity> entities = CreationUtils.getEntities();
                for(Entity entity: entities.values()){
                        if(entity==null){
                                continue;
                        }
                    List<Slide> slides = entity.getSlides();
                    if(slides!=null){
                        for(Slide slide: slides){
                            if(slide.getSlideDefinitionID() == 130054){
                                List<Feature> features = slide.getFeatures();
                                int length = features.size();
                                features.remove(length-1);
                                features.remove(length-2);
                                features.remove(length-3);
                                /*
                                boolean a = false,b=false,c=false;
                                for(Feature feature: features){
                                        switch ((int)feature.getFeatureDefinitionID()) {
                                                                case 120132:
                                                                        if(a){
                                                                                
                                                                        }else{
                                                                                a=true;
                                                                        }
                                                                        break;
                                                                case 120133:
                                                                        break;
                                                                case 120134:
                                                                        break;
                                                                default:
                                                                        break;
                                                                }
                                }
                                */                              
                                CreationUtils.updateEntity(entity);
                            }
                        }
                    }
                }
            return true;
            }
           

           public boolean migrateData() throws Exception{
                Map<Long, Entity> entities = CreationUtils.getEntities();
                for(Entity entity: entities.values()){
                    ExpandedEntity expEntity = new ExpandedEntity(entity);
                    List<Slide> slides = entity.getSlides();
                    if(slides!=null){
                        for(Slide slide: slides){
                            if(slide.getSlideDefinitionID() == 130054){
                                List<Feature> features = slide.getFeatures();
                                String title = expEntity.getBrand() + " " + expEntity.getModelName()+ " " 
                                + expEntity.getModelNumber();
                            if(expEntity.getCategory().getParentCategory().getID() == 10001) {
                                title +=  " | " + expEntity.getBrand() + " Mobile Phones";
                            }
                            if(expEntity.getCategory().getParentCategory().getID() == 10011) {
                                title += " " + expEntity.getCategory().getLabel()
                                    + " | " + expEntity.getBrand() + " Mobile Phone Accessories";
                            }
                            title += " | Saholic.com";
                            
                                //Add page title
                                Feature feature1 = new Feature(120132);
                                PrimitiveDataObject pdo1 = new PrimitiveDataObject(title);
                                List<Bullet> bullets1 = new ArrayList<Bullet>();
                                Bullet bullet1 = new Bullet(pdo1);
                                bullets1.add(bullet1);
                                feature1.setBullets(bullets1);
                                features.add(feature1);
                                
                                
                                String description = "Best Price " + expEntity.getBrand() + " " + expEntity.getModelName() 
                                + " " + expEntity.getModelNumber() + " ";
                            
                            if(expEntity.getCategory().getParentCategory().getID() == 10011) {
                                description += expEntity.getCategory().getLabel() + " in India.";
                            }
                            else {
                                description += ".";
                            }
                            description += " Experience n' buy online. FREE Next Day delivery."
                                + " Original product - Full manufacturer warranty. Comprehensive reviews.";
                            
                            description = description.replaceAll("--", "-");
                            
                                //Add meta description
                                Feature feature2 = new Feature(120133);
                           PrimitiveDataObject pdo2 = new PrimitiveDataObject(description);
                           List<Bullet> bullets2 = new ArrayList<Bullet>();
                           Bullet bullet2 = new Bullet(pdo2);
                           bullets2.add(bullet2);
                           feature2.setBullets(bullets2);        
                           
                           features.add(feature2);
                           
                           
                           String keywords = expEntity.getBrand() + " " + expEntity.getModelName() + " " + expEntity.getModelNumber() + ", ";
                           if(expEntity.getCategory().getParentCategory().getID() == 10001) {
                               keywords += expEntity.getBrand() + " mobile phones, ";
                           }
                           if(expEntity.getCategory().getParentCategory().getID() == 10011) {
                               keywords += "phone accessories, ";
                           }
                           keywords += expEntity.getBrand() + " " + expEntity.getModelName() + " " + expEntity.getModelNumber() + " Price, ";
                           keywords += expEntity.getBrand() + " " + expEntity.getModelName() + " " + expEntity.getModelNumber() + " India, ";
                           if(expEntity.getCategory().getParentCategory().getID() == 10001) {
                               keywords += expEntity.getBrand() + " " + expEntity.getModelName() + " " + expEntity.getModelNumber() + " Review, ";
                           }
                           //Add meta keyborad
                                Feature feature3 = new Feature(120134);
                                PrimitiveDataObject pdo3 = new PrimitiveDataObject(keywords);
                                List<Bullet> bullets3 = new ArrayList<Bullet>();
                                Bullet bullet3 = new Bullet(pdo3);
                                bullets3.add(bullet3);
                                feature3.setBullets(bullets3);
                                
                                features.add(feature3);
                                
                                CreationUtils.updateEntity(entity);
                            }
                        }
                    }
                }
            return true;
            }
           

           public boolean migrateModel2() throws Exception{
                Map<Long, Entity> entities = CreationUtils.getEntities();
                for(Entity entity: entities.values()){
                        List<Slide> slides = entity.getSlides();
                        if(slides!=null){
                                for(Slide slide: slides){
                                        if(slide.getSlideDefinitionID() == 130011){
                                                for(Feature feature: slide.getFeatures()){
                                                        if(feature.getFeatureDefinitionID() == 120054){
                //                                              feature.setFeatureDefinitionID(120030);
                                                                System.out.println("* " + entity.getID() + ":" + entity.getCategoryID());
                                                        }
                                                }
                                        }
                                        
                                        if(slide.getSlideDefinitionID() == 130029){
                                                //System.out.println("** " + entity.getID() + ":" + entity.getCategoryID());
                                                if(entity.getCategoryID() == 10002){
                                                        Feature feature = new Feature(120051);
                                                        slide.getFeatures().add(feature);
                                                        System.out.println("** " + entity.getID() + ":" + entity.getCategoryID());
                                                }
                                        }

                                }
                        }
                        CreationUtils.updateEntity(entity);
                }
        return true;
        }
        /*
        public boolean migrateModel1() throws Exception{
                //DefinitionsContainer oldDfc = new DefinitionsContainer(Utils.CONTENT_DB_PATH + "olddefinitions" + File.separator);
                //DefinitionsContainer newDfc = new DefinitionsContainer(Utils.CONTENT_DB_PATH + "olddefinitions" + File.separator);
                
                Map<Long, Entity> entities = CreationUtils.getEntities();
                for(Entity entity: entities.values()){
                        List<Long> slideSequence = entity.getSlideSequence();
                        Map<Long,Long> removeMap = new HashMap<Long, Long>();
                        List<Slide> slides = entity.getSlides();
                        if(slides!=null){
                                for(Slide slide: slides){
                                        List<Feature> features;
                                        Slide childSlide;
                                        switch ((int)slide.getSlideDefinitionID()) {
                                        
                                        //Keyboard
                                        case 130004:
                                        case 130026:
                                        case 130027:
                                        case 130057:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130026);      
                                                slide.setSlideDefinitionID(130026);
                                                break;
                                        
                                        //Voice Calling
                                        case 130005:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130005);
                                                slide.setSlideDefinitionID(130005);
                                                features = new ArrayList<Feature>();
                                                features.addAll(slide.getFeatures());
                                                childSlide = slide.getChildrenSlides().get(0);
                                                features.addAll(childSlide.getFeatures());
                                                if(childSlide.getFreeformContent()!=null){
                                                        System.out.println("Voice Calling : HAS FFC : " + childSlide.getFreeformContent().getFreeformText() + childSlide.getFreeformContent().getMedias());
                                                }
                                                slide.setChildrenSlides(null);
                                                slide.setFeatures(features);
                                                break;
                                        case 130035:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130005);
                                                slide.setSlideDefinitionID(130005);
                                                for(Feature feata: slide.getFeatures()){
                                                        if(feata.getFeatureDefinitionID()==120055){
                                                                feata.setFeatureDefinitionID(120012);
                                                        }
                                                }
                                                break;
                                        
                                        //Data Connectivity
                                        case 130007:
                                        case 130028:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130007);
                                                slide.setSlideDefinitionID(130007);
                                                break;
                                                
                                        //Music
                                        case 130029:
                                        case 130030:
                                        case 130008:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130029);
                                                slide.setSlideDefinitionID(130029);
                                                break;
                                                
                                        //Video
                                        case 130031:
                                        case 130009:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130031);
                                                slide.setSlideDefinitionID(130031);
                                                break;
                                                
                                        //Camera
                                        case 130010:
                                        case 130036:
                                        case 130037:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130010);
                                                slide.setSlideDefinitionID(130010);
                                                break;
                                        case 130060:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130010);
                                                slide.setSlideDefinitionID(130010);
                                                
                                                features =  slide.getFeatures();
                                                // Just to add camera feature in basic phones
                                                Feature feature = new Feature(120056);
                                                List<Bullet> bullets =  new ArrayList<Bullet>();
                                                PrimitiveDataObject pdo = new PrimitiveDataObject("1");
                                                Bullet bullet = new Bullet(pdo);
                                                bullets.add(bullet);
                                                feature.setBullets(bullets);
                                                features.add(feature);
                                                //Created new feature
                                                break;
                                                
                                        //Memory
                                        case 130011:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130011);
                                                slide.setSlideDefinitionID(130011);
                                                break;
                                        case 130032:
                                        case 130061:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130011);
                                                slide.setSlideDefinitionID(130011);
                                                features =  slide.getFeatures();
                                                for(Feature feat: features){
                                                        if(feat.getFeatureDefinitionID() == 120054){
                                                                feat.setFeatureDefinitionID(120030);
                                                        }
                                                }
                                                break;
                                                
                                        //Battery
                                        case 130044:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130043);
                                                slide.setSlideDefinitionID(130043);
                                                if(slide.getChildrenSlides().get(0).getSlideDefinitionID() == 130047){
                                                        slide.getChildrenSlides().get(0).setSlideDefinitionID(130046);
                                                }
                                                break;
                                                
                                        case 130042:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130043);
                                                slide.setSlideDefinitionID(130043);
                                                childSlide = slide.getChildrenSlides().get(0);
                                                if(childSlide.getSlideDefinitionID() == 130045){
                                                        childSlide.setSlideDefinitionID(130046);
                                                }
                                                
                                                List<Feature> childFeatures1 = new ArrayList<Feature>();
                                                List<Feature> childFeatures2 = new ArrayList<Feature>();
                                                Slide childChildSlide1 = new Slide(130048);
                                                Slide childChildSlide2 = new Slide(130049);
                                                
                                                childChildSlide1.setFeatures(childFeatures1);
                                                childChildSlide2.setFeatures(childFeatures2);
                                                
                                                childSlide.addChild(childChildSlide1);
                                                childSlide.addChild(childChildSlide2);

                                                
                                                for(Feature f: childSlide.getFeatures()){
                                                        if(f.getFeatureDefinitionID() == 120063){
                                                                f.setFeatureDefinitionID(120068);
                                                                childFeatures1.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120064){
                                                                f.setFeatureDefinitionID(120069);
                                                                childFeatures2.add(f);
                                                        }
                                                }
                                                
                                                childSlide.setFeatures(null);
                                                
                                                break;
                                                
                                        case 130062:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130043);
                                                slide.setSlideDefinitionID(130043);
                                                
                                                childSlide = new Slide(130046);
                                                features = new ArrayList<Feature>();
                                                
                                                slide.addChild(childSlide);
                                                
                                                List<Feature> childFeatures11 = new ArrayList<Feature>();
                                                List<Feature> childFeatures21 = new ArrayList<Feature>();
                                                Slide childChildSlide11 = new Slide(130048);
                                                Slide childChildSlide21 = new Slide(130049);
                                                
                                                childChildSlide11.setFeatures(childFeatures11);
                                                childChildSlide21.setFeatures(childFeatures21);
                                                
                                                childSlide.addChild(childChildSlide11);
                                                childSlide.addChild(childChildSlide21);
                                                for(Feature f: slide.getFeatures()){
                                                        if(f.getFeatureDefinitionID() == 120072){
                                                                features.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120073){
                                                                features.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120063){
                                                                f.setFeatureDefinitionID(120068);
                                                                childFeatures11.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120064){
                                                                f.setFeatureDefinitionID(120069);
                                                                childFeatures21.add(f);
                                                        }
                                                }
                                                slide.setFeatures(features);
                                                break;
                                                
                                                
                                        //Mail n Msg
                                        case 130041:
                                        case 130063:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130039);
                                                slide.setSlideDefinitionID(130039);
                                                break;
                                        case 130039:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130039);
                                                slide.setSlideDefinitionID(130039);
                                                
                                                childSlide = slide.getChildrenSlides().get(0);
                                                slide.setFeatures(childSlide.getFeatures());
                                                if(childSlide.getFreeformContent()!=null){
                                                        System.out.println("Mail n Msg : HAS FFC : " + childSlide.getFreeformContent().getFreeformText() + childSlide.getFreeformContent().getMedias());
                                                }
                                                slide.setChildrenSlides(null);
                                                break;
                                                
                                        //Software
                                        case 130020:
                                        case 130034:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130020);
                                                slide.setSlideDefinitionID(130020);
                                                break;
                                                
                                        
                                        //Internet
                                        case 130050:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130050);
                                                slide.setSlideDefinitionID(130050);
                                                slide.setFeatures(slide.getChildrenSlides().get(0).getFeatures());
                                                
                                                if(slide.getChildrenSlides().get(0).getFreeformContent()!=null){
                                                        String ffc = slide.getFreeformContent().getFreeformText();
                                                        if(slide.getChildrenSlides().get(0).getFreeformContent().getFreeformText()!=null){
                                                                if(slide.getChildrenSlides().get(0).getFreeformContent().getFreeformText().trim()!=""){
                                                                        ffc = ffc + "\n *********    " + slide.getChildrenSlides().get(0).getFreeformContent().getFreeformText();
                                                                        System.out.println("**************" + slide.getChildrenSlides().get(0).getFreeformContent().getFreeformText());
                                                                }
                                                        }
                                                        
                                                        List<String> ffcs = new ArrayList<String>();
                                                        ffcs.add(ffc);
                                                        slide.getFreeformContent().setFreeformTexts(ffcs);
                                                }
                                                
                                                slide.setChildrenSlides(null);
                                                //System.out.println("Slide: 130050");
                                                //printSlideContent(slide);
                                                break;

                                        case 130052:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130050);
                                                slide.setSlideDefinitionID(130050);
                                                
                                                for(Feature f2: slide.getFeatures()){
                                                        if(f2.getFeatureDefinitionID() == 120077){
                                                                f2.setFeatureDefinitionID(120074);
//                                                              List<Bullet> newBullets = new ArrayList<Bullet>();
//                                                              for(Bullet bul: f2.getBullets()){
//                                                                      CompositeDataObject cdo =  (CompositeDataObject) bul.getDataObject();
//                                                                      for(PrimitiveDataObject pdo1: cdo.getPrimitiveDataObjects()){
//                                                                              pdo1.getValue();
//                                                                              BulletDataObject bdo2 = new EnumDataObject(enumValueID);
//                                                                              Bullet newbul = new Bullet(bdo2);
//                                                                              newBullets.add(newbul);
//                                                                      }
//                                                                      
//                                                              }
//                                                              f2.setBullets(newBullets);
                                                        }
                                                        if(f2.getFeatureDefinitionID() == 120078){
                                                                f2.setFeatureDefinitionID(120075);
                                                        }
                                                }
//                                              slide.setFeatures(slide.getChildrenSlides().get(0).getFeatures());
//                                              slide.setChildrenSlides(null);
                                                //System.out.println("Slide: 130052");
                                                
                                                //printSlideContent(slide);
                                                break;

                                        case 130051:
                                                removeMap.put(slide.getSlideDefinitionID(), (long)130050);
                                                slide.setSlideDefinitionID(130050);
//                                              System.out.println(slide);
                                                //System.out.println("Slide 130051:");
                //                              printSlideContent(slide);
                                                break;
                                                
                                        default:
                                                break;
                                        }

                                }
                                List<Long> newSequence = new ArrayList<Long>();
                                for(Long id: slideSequence){
                                        if(removeMap.containsKey(id)){
                                                newSequence.add(removeMap.get(id));
                                        }else{
                                                newSequence.add(id);
                                        }
                                }
                                entity.setSlideSequence(newSequence);
                                CreationUtils.updateEntity(entity);
                        }
                }
                        
                return true;
        }
*/
        
        
        public void printSlideContent(Slide slide){
                
                System.out.println("Slide: " + slide.getFreeformContent().getFreeformText());
                if(slide.getFeatures()!=null){
                        for(Feature feature: slide.getFeatures()){
                                if(feature.getBullets()!=null){
                                        for(Bullet bullet:feature.getBullets()){
                                                //System.out.println(bullet.getDataObject().toString());
                                                //System.out.println(bullet.getFreeformContent());
                                        }
                                }
                                if(feature.getFreeformContent()!=null){
                                        System.out.println("Feature: "+ feature.getFreeformContent().getFreeformText());
                                }
                        }
                }
                if(slide.getChildrenSlides()!=null){
                        for(Slide sl: slide.getChildrenSlides()){
                                System.out.println("Child1: ");
                                printSlideContent(sl);
                                System.out.println("Child2: ");
                        }
                }
                
        }
        /*
        public boolean migrateModel() throws Exception{
                //DefinitionsContainer oldDfc = new DefinitionsContainer(Utils.CONTENT_DB_PATH + "olddefinitions" + File.separator);
                //DefinitionsContainer newDfc = new DefinitionsContainer(Utils.CONTENT_DB_PATH + "olddefinitions" + File.separator);
                
                Map<Long, Entity> entities = CreationUtils.getEntities();
                for(Entity entity: entities.values()){
                        List<Slide> slides = entity.getSlides();
                        if(slides!=null){
                                List<Slide> newSlides = new ArrayList<Slide>();
                                for(Slide slide: slides){
                                        Slide newSlide;
                                        List<Feature> features;
                                        Slide childSlide;
                                        switch ((int)slide.getSlideDefinitionID()) {
                                        
                                        //Keyboard
                                        case 130004:
                                        case 130026:
                                        case 130027:
                                        case 130057:
                                                newSlide = new Slide(130026);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                        
                                        //Voice Calling
                                        case 130005:
                                                newSlide = new Slide(130005);
                                                newSlide.setChildrenSlides(null);
                                                features = new ArrayList<Feature>();
                                                features.addAll(slide.getFeatures());
                                                childSlide = slide.getChildrenSlides().get(0);
                                                features.addAll(childSlide.getFeatures());
                                                if(childSlide.getFreeformContent()!=null){
                                                        System.out.println("Voice Calling : HAS FFC : " + childSlide.getFreeformContent().getFreeformText() + childSlide.getFreeformContent().getMedias());
                                                }
                                                newSlide.setFeatures(features);
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);                                                
                                                break;
                                        case 130035:
                                                newSlide = new Slide(130035);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                for(Feature feata: slide.getFeatures()){
                                                        if(feata.getFeatureDefinitionID()==120055){
                                                                feata.setFeatureDefinitionID(120012);
                                                        }
                                                }
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);                                                
                                                break;
                                        
                                        //Data Connectivity
                                        case 130007:
                                        case 130028:
                                                newSlide = new Slide(130007);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        //Music
                                        case 130029:
                                        case 130030:
                                        case 130008:
                                                newSlide = new Slide(130029);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        //Video
                                        case 130031:
                                        case 130009:
                                                newSlide = new Slide(130031);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        //Camera
                                        case 130010:
                                        case 130036:
                                        case 130037:
                                                newSlide = new Slide(130010);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                        case 130060:
                                                newSlide = new Slide(130010);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                features =  slide.getFeatures();
                                                // Just to add camera feature in basic phones
                                                Feature feature = new Feature(120056);
                                                List<Bullet> bullets =  new ArrayList<Bullet>();
                                                PrimitiveDataObject pdo = new PrimitiveDataObject("1");
                                                Bullet bullet = new Bullet(pdo);
                                                bullets.add(bullet);
                                                feature.setBullets(bullets);
                                                features.add(feature);
                                                //Created new feature
                                                newSlide.setFeatures(features);
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        //Memory
                                        case 130011:
                                                newSlide = new Slide(130011);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                        case 130032:
                                        case 130061:
                                                newSlide = new Slide(130011);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                features =  slide.getFeatures();
                                                for(Feature feat: features){
                                                        if(feat.getFeatureDefinitionID() == 130054){
                                                                feat.setFeatureDefinitionID(120030);
                                                        }
                                                }
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        //Battery
                                        case 130044:
                                                newSlide = new Slide(130043);
                                                if(slide.getChildrenSlides().get(0).getSlideDefinitionID() == 130047){
                                                        slide.getChildrenSlides().get(0).setSlideDefinitionID(130046);
                                                }
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        case 130042:
                                                newSlide = new Slide(130043);
                                                childSlide = slide.getChildrenSlides().get(0);
                                                if(childSlide.getSlideDefinitionID() == 130045){
                                                        childSlide.setSlideDefinitionID(130046);
                                                }
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                
                                                List<Feature> childFeatures1 = new ArrayList<Feature>();
                                                List<Feature> childFeatures2 = new ArrayList<Feature>();
                                                Slide childChildSlide1 = new Slide(130048);
                                                Slide childChildSlide2 = new Slide(130049);
                                                
                                                childChildSlide1.setFeatures(childFeatures1);
                                                childChildSlide2.setFeatures(childFeatures2);
                                                
                                                childSlide.addChild(childChildSlide1);
                                                childSlide.addChild(childChildSlide2);

                                                
                                                for(Feature f: childSlide.getFeatures()){
                                                        if(f.getFeatureDefinitionID() == 120063){
                                                                f.setFeatureDefinitionID(120068);
                                                                childFeatures1.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120064){
                                                                f.setFeatureDefinitionID(120069);
                                                                childFeatures2.add(f);
                                                        }
                                                }
                                                
                                                childSlide.setFeatures(null);
                                                
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        case 130062:
                                                newSlide = new Slide(130043);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                childSlide = new Slide(130046);
                                                features = new ArrayList<Feature>();
                                                newSlide.setFeatures(features);
                                                newSlide.addChild(childSlide);
                                                
                                                List<Feature> childFeatures11 = new ArrayList<Feature>();
                                                List<Feature> childFeatures21 = new ArrayList<Feature>();
                                                Slide childChildSlide11 = new Slide(130048);
                                                Slide childChildSlide21 = new Slide(130049);
                                                
                                                childChildSlide11.setFeatures(childFeatures11);
                                                childChildSlide21.setFeatures(childFeatures21);
                                                
                                                childSlide.addChild(childChildSlide11);
                                                childSlide.addChild(childChildSlide21);
                                                for(Feature f: slide.getFeatures()){
                                                        if(f.getFeatureDefinitionID() == 120072){
                                                                features.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120073){
                                                                features.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120063){
                                                                f.setFeatureDefinitionID(120068);
                                                                childFeatures11.add(f);
                                                        }
                                                        if(f.getFeatureDefinitionID() == 120064){
                                                                f.setFeatureDefinitionID(120069);
                                                                childFeatures21.add(f);
                                                        }
                                                }
                                                
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                                
                                        //Mail n Msg
                                        case 130041:
                                        case 130063:
                                                newSlide = new Slide(130039);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                        case 130039:
                                                newSlide = new Slide(130039);
                                                //newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                childSlide = slide.getChildrenSlides().get(0);
                                                newSlide.setFeatures(childSlide.getFeatures());
                                                if(childSlide.getFreeformContent()!=null){
                                                        System.out.println("Mail n Msg : HAS FFC : " + childSlide.getFreeformContent().getFreeformText() + childSlide.getFreeformContent().getMedias());
                                                }
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;
                                                
                                        //Software
                                        case 130020:
                                        case 130034:
                                                newSlide = new Slide(130034);
                                                newSlide.setChildrenSlides(slide.getChildrenSlides());
                                                features =  slide.getFeatures();
                                                newSlide.setFeatures(slide.getFeatures());
                                                newSlide.setFreeformContent(slide.getFreeformContent());
                                                newSlides.add(newSlide);
                                                break;

                                                
                                        default:
                                                newSlides.add(slide);
                                                break;
                                        }
                                }
                                entity.setSlides(newSlides);
                                CreationUtils.updateEntity(entity);
                        }
                }
                        
                return true;
        }
        
        */
        public boolean migrateRemoveBorrowedCategoryIdFromSlide() throws Exception{
                Map<Long, Entity> entities = CreationUtils.getEntities();
                for(Entity entity: entities.values()){
                        if(entity.getID() == 0){
                                CreationUtils.deleteEntity(entity.getID());
                        }
                        List<Slide> slides = entity.getSlides();
                        if(slides!=null){
                                List<Slide> newSlides = new ArrayList<Slide>();
                                for(Slide slide: slides){
                                        Slide newSlide = new Slide(slide.getSlideDefinitionID());
                                        newSlide.setChildrenSlides(slide.getChildrenSlides());
                                        newSlide.setFeatures(slide.getFeatures());
                                        newSlide.setFreeformContent(slide.getFreeformContent());
                                        newSlides.add(newSlide);
                                }
                                entity.setSlides(newSlides);
                                CreationUtils.updateEntity(entity);
                        }
                }
                return true;
        }
        public boolean migrate() throws Exception{
        /*       
                DefinitionsContainer sourceDefs = new DefinitionsContainer(sourceDbPath);
                DefinitionsContainer destinationDefs = new DefinitionsContainer(destinationDbPath);
                EntityContainer sourceEnts = new EntityContainer(sourceDbPath);
                EntityContainer destinationEnts = new EntityContainer(destinationDbPath);
                
                Map<Long, Entity> entities = sourceEnts.getEntities();
                
                File f = new File("/home/rajveer/Desktop/info.txt");
                FileWriter fstream = new FileWriter(f);
        BufferedWriter out = new BufferedWriter(fstream);
        StringBuilder sb = new StringBuilder();
        
        
                for(Entity entity: entities.values()){
                        List<Slide> slides = entity.getSlides();
                        
                        //List<String> vidLabels = CreationUtils.getMediaLabels(entity.getID(),"youtube");
                        //List<String> imgLabels = CreationUtils.getMediaLabels(entity.getID(),"image");
                        
                        //Map<String, Media> rawMedia = CreationUtils.getRawMedia(entity.getID());
                        
                        
//                      List<String> vidLabels = OldCreationUtils.getMediaLabels(entity.getID(),"youtube");
//                      List<String> imgLabels = OldCreationUtils.getMediaLabels(entity.getID(),"image");
                
                        Entity newEntity = new Entity(entity.getID(), entity.getCategoryID());
                        newEntity.setBrand(entity.getBrand());
                        newEntity.setModelName(entity.getModelName());
                        newEntity.setModelNumber(entity.getModelNumber());
                        
                        
                        Map<String, in.shop2020.creation.util.Media> rawMedia = OldCreationUtils.getRawMedia(entity.getID());
                        
                        Map<String, Media> newrawMedia = new HashMap<String, Media>();
                        
                        
                        int totalRawVideos = 0;
                        int totalRawImages = 0;
                        
                        if(rawMedia!=null){
                                for(String label: rawMedia.keySet()){
                                        in.shop2020.creation.util.Media media = rawMedia.get(label);
                                        
                                        label = media.getLabel();
                                        String type = media.getType();
                                        String location = media.getLocation();
                                        
                                        Media newMedia = new Media(label, type, location);
                                        
                                        newMedia.setTitle("Title");
                                        if(type.equals("image")){
                                                totalRawImages++;
                                                newMedia.setFileName(media.getFileName());
                                                newMedia.setVideoType("");
                                        }else{
                                                totalRawVideos++;
                                                newMedia.setVideoType("withoutskin");
                                                newMedia.setFileName("");
                                        }

                                        newrawMedia.put(label, newMedia);
                                        System.out.println("old " + media.toString());
        //                              System.out.println("new " + newMedia.toString());
        //                              OldCreationUtils.removeMedia(entity.getID(), label);
        //                              CreationUtils.addMedia(entity.getID(), newMedia);
                                }
                        }
                        
                        int totalVideos = 0;
                        int totalImages = 0;
                        if(rawMedia==null){
                        for(Slide slide: slides ){
                        */
                                /*
                                FreeformContent ffc = slide.getFreeformContent();
                                List<String> vidList = new ArrayList<String>();
                                List<String> imgList = new ArrayList<String>();
                                
                                if(ffc!=null){
                                        List<String> vidFfcLabels = ffc.getYoutubeRefs();
                                        if(vidFfcLabels!=null){
                                                for(String vidFfcLabel: vidFfcLabels){
                                                        StringTokenizer strTkn = new StringTokenizer(vidFfcLabel,"~!~");
                                                        String vidLabel = null;
                                                        if(strTkn.hasMoreTokens()){
                                                                vidLabel = strTkn.nextToken();
                                                                vidList.add(vidFfcLabel);
                                                                
//                                                              ffc.removeMedia("youtube", vidFfcLabel);
//                                                              ffc.addMedia("youtube", vidLabel);
                                                        }
                                                        if(vidLabel == null){
                                                                System.out.println("Something is really breaking .. bu ha ha !!!");
                                                        }
                                                        totalVideos++;
                                                }
                                        }
                                        List<String> imgFfcLabels = ffc.getImageRefs();
                                        if(imgFfcLabels!=null){
                                                for(String imgFfcLabel: imgFfcLabels){
                                                        StringTokenizer strTkn = new StringTokenizer(imgFfcLabel,"~!~");
                                                        String imgLabel = null;
                                                        if(strTkn.hasMoreTokens()){
                                                                imgLabel = strTkn.nextToken();
                                                                imgList.add(imgFfcLabel);
                                                                
//                                                              ffc.removeMedia("image", imgFfcLabel);
//                                                              ffc.addMedia("image", imgLabel);                                                        
                                                        }
                                                        if(imgLabel == null){
                                                                System.out.println("Something is really breaking .. bu ha ha !!!");
                                                        }
                                                        totalImages++;
                                                }
                                        }
                                        
                                        for(String vidlab : vidList){
                                                ffc.removeMedia("youtube", vidlab);
                                                ffc.addMedia("youtube", (new StringTokenizer(vidlab, "~!~")).nextToken());
                                        }
                                        for(String imglab : imgList){
                                                ffc.removeMedia("image",imglab);
                                                ffc.addMedia("image", (new StringTokenizer(imglab, "~!~")).nextToken());
                                        }
                                        slide.setFreeformContent(ffc);
                                        System.out.println("Slide id is " + slide.getSlideDefinitionID() + "   vid labels:  " + vidFfcLabels + "   img labels" + imgFfcLabels);
                                }
                        */
                /*
                                newEntity.addSlide(slide);
                        }
                        
//                      System.out.println("entity:"+ entity.getID() + ":trv:" + totalRawVideos + ":tri:" + totalRawImages +":tv:" + totalVideos +":ti:" + totalImages);
//                      sb.append("entity:"+ entity.getID() + ":trv:" + totalRawVideos + ":tri:" + totalRawImages +":tv:" + totalVideos +":ti:" + totalImages+ ":tr:" +(totalRawVideos+totalRawImages) + ":t:" +(totalVideos+totalImages) + ":vd:" +(totalRawVideos-totalVideos) + ":id:" +(totalRawImages-totalImages) + "\n");
                        sb.append(entity.getID() + "\n");               
                        
                        
                        destinationEnts.updateEntity(newEntity);
                        CreationUtils.storeEntity(newEntity);
                        
                        Map<Long, List<Entity>> entitiesByCategory = 
                                sourceEnts.getEntitiesbyCategory();
                        
                        Map<Long, Entity> xentities = destinationEnts.getEntities();
                        
                        CreationUtils.rewriteRepository(xentities, entitiesByCategory);
                        }
                        else{
                                sb.append("                             " + entity.getID() + "\n");
                        }
                }
                
                
                out.write(sb.toString());
                out.close();
                */
                return true;
        }
        
        private boolean makeEntitiesObject() throws Exception{
                //DefinitionsContainer sourceDefs = new DefinitionsContainer(sourceDbPath);
                //DefinitionsContainer destinationDefs = new DefinitionsContainer(destinationDbPath);
                //EntityContainer sourceEnts = new EntityContainer(sourceDbPath);
                //EntityContainer destinationEnts = new EntityContainer(destinationDbPath);
                
        /*
                Map<Long, List<Entity>> catEntities = sourceEnts.getEntitiesbyCategory();
                
                Map<Long, Entity> entities = sourceEnts.getEntities();
                for(Long catId: catEntities.keySet()){
                        List<Entity> ents = catEntities.get(catId);
                        for(Entity entity: ents){
                                entities.put(entity.getID(), entity);
                                System.out.println(entity.getID() + ":"  + entity.getCategoryID() + ":"+  entity.getBrand() + " "+ entity.getModelName() + " " + entity.getModelNumber());
                        }
                }
                
                */
                
                Map<Long, List<Entity>> catEntities = new TreeMap<Long, List<Entity>>();
                Map<Long, Entity> entities = new TreeMap<Long, Entity>();
                
            FileInputStream fstream = new FileInputStream("/home/rajveer/Desktop/1");
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            while ((strLine = br.readLine()) != null)   {
                long entityID = Long.parseLong(strLine);
                String entityDBFile = sourceDbPath + "entities" + File.separator + entityID +"/entity.ser";
                System.out.println (entityDBFile);
                Entity entity =  (Entity)DBUtils.read(entityDBFile);
                entities.put(entityID, entity);
                
                List<Entity> catent = catEntities.get(entity.getCategoryID());
                if(catent == null){
                        catent = new ArrayList<Entity>();
                }
                catent.add(entity);
                catEntities.put(entity.getCategoryID(), catent);
            }
            in.close();

                String entitiesDBFile = sourceDbPath + "entities" + File.separator + "entities.ser";
                String entitiesbycategoryDBFile = sourceDbPath + "entities" + File.separator + "entitiesbycategory.ser";

                DBUtils.delete(entitiesDBFile);
                DBUtils.store(entities, entitiesDBFile);

            // Remove existing
                DBUtils.delete(entitiesbycategoryDBFile);
                DBUtils.store(catEntities, entitiesbycategoryDBFile);

        return false;
        }

        private boolean printDataModel() throws Exception{
                DefinitionsContainer dfc = Catalog.getInstance().getDefinitionsContainer();
                StringBuilder sb = new StringBuilder();

                Map<Long, SlideDefinition> allSlideDefs = dfc.getSlideDefinitions();
                for(Long slideDefId: allSlideDefs.keySet()){
                        SlideDefinition slideDef = allSlideDefs.get(slideDefId);
                        sb.append(slideDefId + " - " + slideDef.getLabel() + "\n");
                        if(!slideDef.getChildrenSlideDefinitionIDs().isEmpty()){
                                sb.append("Child Slides are: \t" + slideDef.getChildrenSlideDefinitionIDs()+"\n");
                        }
                        List<SlideFeatureDefinition> featureDefs = slideDef.getSlideFeatureDefinitions();
                        for(SlideFeatureDefinition featureDef: featureDefs){
                                sb.append("\t" + featureDef.getFeatureDefintionID() + "\t" + dfc.getFeatureDefinition(featureDef.getFeatureDefintionID()).getLabel() + "\t" + featureDef.getEditorialImportance() + "\n");
                        }
                }
                System.out.println(sb.toString());
                Map<Long, Category> categories = dfc.getCategories();
                if(categories !=null){
                        return true;
                }
                for(Category category: categories.values()){
                        if(category.getChildrenCategory() != null){
                                continue;
                        }
                        sb.append(category.getLabel() + "\n");
                        List<CategorySlideDefinition> slideDefs =  dfc.getCategorySlideDefinitions(category.getID());
                        List<Long> slideSequence = dfc.getCategorySlideSequence(category.getID());
                        for(CategorySlideDefinition slideDef: slideDefs){
                                sb.append("\t"+ dfc.getSlideDefinition(slideDef.getSlideDefintionID()).getLabel() +  "\t" + slideDef.getEditorialImportance() + "\n");
                                //List<FeatureDefinition> featureDefs = dfc.getFeatureDefinitions(slideDef.getSlideDefintionID());
                                
                                List<SlideFeatureDefinition> slideFeatureDefs = dfc.getSlideDefinition(slideDef.getSlideDefintionID()).getSlideFeatureDefinitions();
                                
                                for(SlideFeatureDefinition slideFeatureDef: slideFeatureDefs){
                                        FeatureDefinition featureDef = dfc.getFeatureDefinition(slideFeatureDef.getFeatureDefintionID());
                                        BulletDefinition bulletDef = featureDef.getBulletDefinition();
                                        sb.append("\t\t\t"  + featureDef.getLabel() + "\t" + slideFeatureDef.getEditorialImportance() + "\t" +  featureDef.allowsBlank() + "\t" + bulletDef.isLearned() + "\t" + bulletDef.isMultivalue() );
                                        List<Long> units = bulletDef.getUnitIDs();
                                        if(bulletDef.getDatatypeDefinitionID()!=null){
                                                sb.append( "\t" + dfc.getDatatypeDefinition(bulletDef.getDatatypeDefinitionID()).getName());
                                                
                                        }
                                        if(units!=null){
                                                for(Long unit: units){
                                                        sb.append( "\t" + dfc.getUnit(unit).getFullForm() + "\t" + dfc.getUnit(unit).getShortForm());
                                                }
                                        }
                                        sb.append("\n");
                                }
                                
                                /*
                                for(FeatureDefinition featureDef: featureDefs){
                                        BulletDefinition bulletDef = featureDef.getBulletDefinition();
                                        System.out.println("                    " + featureDef.getLabel() + "   " +  featureDef.allowsBlank() + "       " + bulletDef.isLearned() + "   " + bulletDef.isMultivalue());
                                        List<Long> units = bulletDef.getUnitIDs();
                                        if(units!=null){
                                                for(Long unit: units){
                                                        System.out.println("                                                            "+ dfc.getUnit(unit).getFullForm() + "  "+ dfc.getUnit(unit).getShortForm());
                                                }
                                        }
                                        if(bulletDef.getDatatypeDefinitionID()!=null){
                                                System.out.println("                                                                            "  + dfc.getDatatypeDefinition(bulletDef.getDatatypeDefinitionID()).getName());
                                                
                                        }
                                }
                                */
                        }
                }
                System.out.println(sb.toString());
                return true;
        }
}