Subversion Repositories SmartDukaan

Rev

Rev 8510 | Rev 8798 | 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.Entity;
import in.shop2020.metamodel.core.EntityState;
import in.shop2020.metamodel.core.EntityStatus;
import in.shop2020.metamodel.core.EnumDataObject;
import in.shop2020.metamodel.core.ExpertReview;
import in.shop2020.metamodel.core.Feature;
import in.shop2020.metamodel.core.FreeformContent;
import in.shop2020.metamodel.core.Media;
import in.shop2020.metamodel.core.Media.Type;
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.CatalogService.Client;
import in.shop2020.model.v1.catalog.Item;
import in.shop2020.model.v1.catalog.status;
import in.shop2020.thrift.clients.CatalogClient;
import in.shop2020.utils.Logger;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

/*
 * @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);
                /*List<Long> entityId = Arrays.asList(1001674l,1002575l,1005331l,1005165l,1005164l,1005111l,1005109l,1004952l,1004940l,1004871l,1004701l,1004429l,1004197l,1006174l,1006077l,1005901l,1005757l,1005754l,1005724l,1005704l,1005598l,1005576l,1005558l,1007394l,1007230l,1007226l,1007218l,1007089l,1006925l,1006822l,1006814l,1006175l);
                for (Long eId : entityId){
                }*/
                //contentmigrator.reorderPhones();
                //System.out.println(contentmigrator.getItems().size());
                /*contentmigrator.touchEntityState(1008423l);
                contentmigrator.touchEntityState(1008424l);
                contentmigrator.touchEntityState(1008427l);
                contentmigrator.touchEntityState(1008428l);*/

                contentmigrator.changeEntityState();
        }
        
        private void updateSources() throws Exception{
                Map<Long,List<ExpertReview>> erMap = CreationUtils.getExpertReviews();
                for(Map.Entry<Long, List<ExpertReview>> erEntry : erMap.entrySet()){
                        List<ExpertReview> erList = erEntry.getValue();
                        Iterator<ExpertReview> iter = erList.iterator();
                        while (iter.hasNext()){
                                ExpertReview er = iter.next();
                                if (er.getSource().equals("iGyan")){
                                        er.setSource("iGyaan");
                                        System.out.println("changed to iGyaan in entity : " + erEntry.getKey());
                                }else if(er.getSource().equals("TheMobileIndian")){
                                        er.setSource("The Mobile Indian");
                                        System.out.println("changed to The Mobile Indian in entity : " + erEntry.getKey());
                                }
                        }
                        CreationUtils.storeExpertReview(erEntry.getKey(), erList);
                }
        }
        private void touchEntityState(Long eId) throws Exception {
                EntityState es = CreationUtils.getEntityState(eId);
                es.setMerkedReadyOn(new Date());
                CreationUtils.updateEntityState(es);
                //System.out.println("Entity touched:" + eId);
        }
        private void updateModelForBBQ10() throws Exception{
                Long entityId = 1007315l;
                EntityState e1 = CreationUtils.getEntityState(entityId);
                Entity e2 = CreationUtils.getEntity(entityId);
                e1.setModelName("Blackkberry Q10");
                e2.setModelName("Blackberry Q10");
                CreationUtils.updateEntity(e2);
                CreationUtils.updateEntityState(e1);
        }

        private void migrateWarrantyForCategory(Long catgoryId) throws Exception {
                Collection<Entity> entities = CreationUtils.getEntities(catgoryId);
                int count = 0;
                for (Entity entity : entities) {
                        Slide slide = entity.getSlide(130054l);
                        if(slide!=null){
                                List<Slide> childrenSlide = slide.getChildrenSlides();
                                if(childrenSlide != null){
                                        Iterator<Slide> it = childrenSlide.iterator();
                                        while (it.hasNext()){
                                                Slide sl = it.next();
                                                if (130105l == sl.getSlideDefinitionID()){
                                                        it.remove();
                                                        System.out.println("Removed warranty slide from entity:" + entity.getID());
                                                        break;
                                                }
                                        }
                                        CreationUtils.updateEntity(entity);
                                }
                        }
                }
        }

        private void checkYouTube() throws Exception {
                // TODO Auto-generated method stub
                Collection<Entity> entities = CreationUtils.getEntities().values();
                //entities = (List<Entity>)this.clone(entities);
                for (Entity entity : entities) {
                        long entityId = entity.getID();
                        try {
                                List<Slide> entitySlides = entity.getSlides();
                                if (entity == null || entitySlides == null) {
                                        continue;
                                }
                                Slide summarySlide = null;
                                FreeformContent ffc = null;
                                 
                                List<Slide> newEntitySlides = new ArrayList<Slide>(); 
                                Slide connectivitySlide = new Slide(130129);
                                Slide looknfeelSlide = new Slide(130128);
                                for (Slide slide : entitySlides) {
                                                ffc = slide.getFreeformContent();
                                                if(ffc != null){
                                                        Map<String, Media> mediaMap = ffc.getMedias();
                                                        if(mediaMap!=null){
                                                                for(Media media : mediaMap.values()){
                                                                        if(media.getType().equals(Type.VIDEO_WITHOUT_SKIN) || media.getType().equals(Type.VIDEO_WITH_SKIN)){
                                                                                if(media.getYoutubeId().contains("&"))
                                                                                System.out.println(entityId + " : " + media.getLabel() + ":" + media.getYoutubeId());
                                                                        }
                                                                }
                                                        }
                                                }
                                }
                                                
                        }catch(Exception e){
                                System.out.println("Could not migrate " + entityId);
                        }
                }

                
        }

        private void renameTitles() 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;
                        }
                        Slide summarySlide = entity.getSlide(130054);
                        if(summarySlide != null){
                                boolean isupdated = false;
                                for(Feature f : summarySlide.getFeatures()){
                                        if(f.getFeatureDefinitionID()==120132l){
                                                if(f.getBullets() == null){
                                                        f.setBullets(new ArrayList<Bullet>());
                                                }else {
                                                        f.getBullets().clear();
                                                }
                                                Bullet titleBullet = new Bullet(new PrimitiveDataObject(getTitle(entity)));
                                                f.getBullets().add(titleBullet);
                                                isupdated = true;
                                                continue;
                                        }
                                        if(f.getFeatureDefinitionID()==120133l){
                                                if(f.getBullets() == null){
                                                        f.setBullets(new ArrayList<Bullet>());
                                                }else {
                                                        f.getBullets().clear();
                                                }
                                                Bullet metaDescBullet = new Bullet(new PrimitiveDataObject(getMetaDescription(new ExpandedEntity(entity))));
                                                f.getBullets().add(metaDescBullet);
                                                isupdated = true;
                                                continue;
                                        }
                                }
                                if(isupdated){ 
                                        CreationUtils.updateEntity(entity);
                                        System.out.println("Updated entity : " + entity.getID());
                                }
                        }
                }
        }

        private void migrateNetwork() 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() == 130095) {
                                        List<Slide> slides = slide.getChildrenSlides();
                                        for(Slide slide1  : slides){
                                                if(slide1.getSlideDefinitionID() == 130096){                                                    
                                                        List<Feature> features = slide1.getFeatures();
                                                        for (Feature f : features) {
                                                                if (f.getFeatureDefinitionID() == 120175) {
                                                                        List<Bullet> bs = f.getBullets();
                                                                        for (Bullet b : bs) {
                                                                                Long enumValueId = ((EnumDataObject) b
                                                                                                .getDataObject()).getEnumValueID();
                                                                                String value = Catalog.getInstance().getDefinitionsContainer().getEnumValue(enumValueId).getValue(); 
                                                                                if (value.trim().equals("")) {
                                                                                        continue;
                                                                                }
                                                                                System.out.println(value);
                                                                                
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }

                        }

                        CreationUtils.updateEntity(entity);
                }
        }
        private void migrateHeadSet() throws Exception {
                
                //Starting entity id for new Category with 10000
                long newCounter = 77777000;
                Collection<Entity> entities = CreationUtils.getEntities(10015);
                
                //entities = (List<Entity>)this.clone(entities);
                for (Entity entity : entities) {
                        long entityId = entity.getID();
                        try {
                                List<Slide> entitySlides = entity.getSlides();
                                if (entity == null || entitySlides == null) {
                                        continue;
                                }
                                Slide summarySlide = null;
                                FreeformContent ffc = null;
                                 
                                List<Slide> newEntitySlides = new ArrayList<Slide>(); 
                                Slide connectivitySlide = new Slide(130129);
                                Slide looknfeelSlide = new Slide(130128);
                                for (Slide slide : entitySlides) {
                                        slide=(Slide)this.clone(slide);
                                        if (slide.getSlideDefinitionID() == 130068) {
                                                List<Feature> connectivityFeatures = new ArrayList<Feature>();
                                                List<Feature> looknfeelFeatures = new ArrayList<Feature>();
                                                List<Feature> features = slide.getFeatures();
                                                for (Feature f : features) {
                                                        if (f.getFeatureDefinitionID() == 120105) {
                                                                connectivityFeatures.add(f);
                                                        }
                                                        if (f.getFeatureDefinitionID() == 120106) {
                                                                looknfeelFeatures.add(f);
                                                        }
                                                }
                                                ffc = slide.getFreeformContent();
                                                if(ffc != null){
                                                        Map<String, Media> mediaMap = ffc.getMedias();
                                                        if(mediaMap!=null){
                                                                for(Media media : mediaMap.values()){
                                                                        if(media.getType().equals(Type.IMAGE) || media.getType().equals(Type.DOCUMENT)){
                                                                                copyMedia(String.valueOf(newCounter), String.valueOf(entityId),media);
                                                                        }
                                                                }
                                                        }
                                                }
                                                connectivitySlide.setFeatures(connectivityFeatures);
                                                looknfeelSlide.setFeatures(looknfeelFeatures);
                                                looknfeelSlide.setFreeformContent(ffc);
                                        } 
                                        //Summary slide
                                        if(slide.getSlideDefinitionID() == 130054) {
                                                summarySlide = slide; 
                                                FreeformContent ffc1 = slide.getFreeformContent();
                                                if(ffc1 != null){
                                                        Map<String, Media> mediaMap = ffc1.getMedias();
                                                        if(mediaMap==null){
                                                                continue;
                                                        }
                                                        for(Media media : mediaMap.values()){
                                                                if(media.getType().equals(Type.IMAGE) || media.getType().equals(Type.DOCUMENT)){
                                                                        copyMedia(String.valueOf(newCounter), String.valueOf(entityId),media);
                                                                }
                                                        }
                                                }
                                        }
                                        
                                }
                                
                                Entity newEntity = new Entity(newCounter, 10099);
                                List<Long> newSlideSequence = new ArrayList<Long>();
                                newSlideSequence.add(130128L);
                                newSlideSequence.add(130129L);
                                newSlideSequence.add(130054L);
                                newEntity.setSlideSequence(newSlideSequence);
                                newEntity.setBrand(entity.getBrand());
                                newEntity.setModelName(entity.getModelName());
                                newEntity.setModelNumber(entity.getModelNumber());
                                //entitySlides.remove(featureSlide);
                                newEntitySlides.add(connectivitySlide);
                                newEntitySlides.add(looknfeelSlide);
                                newEntitySlides.add(summarySlide);
                                newEntity.setSlides(newEntitySlides);
                                EntityState es = new EntityState(newCounter, 10099, "admin");
                                es.setBrand(entity.getBrand());
                                es.setModelName(entity.getModelName());
                                es.setModelNumber(entity.getModelNumber());
                                CreationUtils.createEntity(newEntity, es);
                                System.out.println("New entity : " + newCounter + " created using : " + entityId);
                                System.out.println(CreationUtils.getEntity(newCounter));
                                newCounter++;
                        }catch(Exception e){
                                System.out.println("Could not migrate " + entityId);
                        }
                }
                
        }

        private long getEnumValueForNetwork(String value, Long entityLong) {
                value = value.toLowerCase().replaceAll(" ", "");
                Map<String, Long> map = new HashMap<String, Long>();
                map.put("quadband(gsm850/900/1800/1900)", 110382L);
                map.put("quadband(gsm850/900/1800/1900)-sim1", 110383l);
                map.put("quadband(gsm850/900/1800/1900)-sim2", 110384l);
                map.put("triband(gsm900/1800/1900)", 110385l);
                map.put("triband(gsm900/1800/1900)-sim1", 110386l);
                map.put("triband(gsm900/1800/1900)-sim2", 110387l);
                map.put("dualband(gsm900/1800)", 110388l);
                map.put("dualband(gsm900/1800)-sim1", 110389l);
                map.put("dualband(gsm900/1800)-sim2", 110390l);
                map.put("cdma800", 110391l); // CDMA 800
                map.put("cdma800-sim2", 110392l); // CDMA 800-SIM 2
                map.put("cdma800-sim3", 110393l); // CDMA 800-SIM 3

                if (!StringUtils.contains(value, "sim")
                                && StringUtils.contains(value, "850/900/1800/1900")) {
                        return map.get("quadband(gsm850/900/1800/1900)");
                }
                if (StringUtils.contains(value, "sim1")
                                && StringUtils.contains(value, "850/900/1800/1900")) {
                        return map.get("quadband(gsm850/900/1800/1900)-sim1");
                }
                if (StringUtils.contains(value, "sim2")
                                && StringUtils.contains(value, "850/900/1800/1900")) {
                        return map.get("quadband(gsm850/900/1800/1900)-sim2");
                }
                if (!StringUtils.contains(value, "sim")
                                && StringUtils.contains(value, "900/1800/1900")) {
                        return map.get("triband(gsm900/1800/1900)");
                }
                if (StringUtils.contains(value, "sim1")
                                && StringUtils.contains(value, "900/1800/1900")) {
                        return map.get("triband(gsm900/1800/1900)-sim1");
                }
                if (StringUtils.contains(value, "sim2")
                                && StringUtils.contains(value, "900/1800/1900")) {
                        return map.get("triband(gsm900/1800/1900)-sim2");
                }
                if (!StringUtils.contains(value, "sim")
                                && StringUtils.contains(value, "900/1800")) {
                        return map.get("dualband(gsm900/1800)");
                }
                if (StringUtils.contains(value, "sim1")
                                && StringUtils.contains(value, "900/1800")) {
                        return map.get("dualband(gsm900/1800)-sim1");
                }
                if (StringUtils.contains(value, "sim2")
                                && StringUtils.contains(value, "900/1800")) {
                        return map.get("dualband(gsm900/1800)-sim2");
                }
                if (StringUtils.contains(value, "cdma")) {
                        if (StringUtils.contains(value, "sim2")) {
                                return map.get("cdma800-sim2");
                        }
                        if (StringUtils.contains(value, "sim3")) {
                                return map.get("cdma800-sim3");
                        }
                        return map.get("cdma800");
                } else {
                        System.out.println("Unknown networks: " + value + " : "
                                        + entityLong);
                        return 0;
                }
        }

        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();
                Entity entity;
                for (Long entityId : entitiesState.keySet()) {
                        EntityState state = entitiesState.get(entityId);
                        entity = CreationUtils.getEntity(entityId);
                        if (state.getCategoryID() == 10006) {
                                //state.setCategoryID(10006);
                                entity.setCategoryID(10006);
                                //CreationUtils.updateEntityState(state);
                                CreationUtils.updateEntity(entity);
                                touchEntityState(entityId);
                        }
                }
                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;
        }

        public boolean migrateOS() 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() == 130020) {
                                        List<Feature> features = slide.getFeatures();
                                        for (Feature f : features) {
                                                if (f.getFeatureDefinitionID() == 120043) {
                                                        Bullet b = f.getBullets().get(0);
                                                        String value = ((PrimitiveDataObject) b
                                                                        .getDataObject()).getValue();
                                                        long enumValueID = getEnumValueForOS(value);
                                                        if (enumValueID == 110371L) {
                                                                Logger.log("Set entity:" + entityId
                                                                                + " as proprietary software", entity);
                                                        }
                                                        b.setDataObject(new EnumDataObject(enumValueID));
                                                }
                                        }
                                }

                        }

                        CreationUtils.updateEntity(entity);
                }
                return true;
        }

        private long getEnumValueForOS(String value) {
                value = value.toLowerCase();
                Map<String, Long> map = getOSEnumMap();
                String os = "Proprietary software";
                if (value.contains("android")) {
                        if (value.contains("1.5")) {
                                os = "Android v1.5 (Cupcake)";
                        }
                        if (value.contains("1.6")) {
                                os = "Android v1.6 (Donut)";
                        }
                        if (value.contains("2.1")) {
                                os = "Android v2.1 (Eclair)";
                        }
                        if (value.contains("2.2")) {
                                os = "Android v2.2 (Froyo)";
                        }
                        if (value.contains("2.3")) {
                                os = "Android v2.3 (Gingerbread)";
                        }
                        if (value.contains("3.0")) {
                                os = "Android v3.0 (Honeycomb)";
                        }
                        if (value.contains("3.1")) {
                                os = "Android v3.1 (Honeycomb)";
                        }
                        if (value.contains("3.2")) {
                                os = "Android v3.2 (Honeycomb)";
                        }
                }
                if (value.contains("blackberry")) {
                        if (value.contains("os")) {
                                os = "BlackBerry OS";
                        }
                        if (value.contains("5.0")) {
                                os = "BlackBerry OS 5.0";
                        }
                        if (value.contains("6.0")) {
                                os = "BlackBerry OS 6.0";
                        }
                        if (value.contains("7.0")) {
                                os = "BlackBerry OS 7.0";
                        }
                        if (value.contains("tablet os")) {
                                os = "BlackBerry Tablet OS";
                        }
                }
                if (value.contains("brew mobile platform")) {
                        os = "Brew Mobile Platform";
                }
                if (value.contains("maemo 5")) {
                        os = "Maemo 5";
                }
                if (value.contains("windows phone 7")) {
                        os = "Windows Phone 7";
                }
                if (value.contains("windows phone 7.5 mango")) {
                        os = "Windows Phone 7.5 Mango";
                }
                if (value.contains("proprietary")) {
                        if (value.contains("lg"))
                                os = "Proprietary LG software";
                        else if (value.contains("micromax")) {
                                os = "Proprietary Micromax software";
                        } else if (value.contains("samsung")) {
                                os = "Proprietary Samsung software";
                        } else if (value.contains("sony ericsson")) {
                                os = "Proprietary Sony Ericsson software";
                        } else if (value.contains("spice")) {
                                os = "Proprietary Spice software";
                        } else if (value.contains("lava")) {
                                os = "Proprietary Lava software";
                        } else if (value.contains("alcatel")) {
                                os = "Proprietary Alcatel software";
                        } else if (value.contains("motorola")) {
                                os = "Proprietary Motorola software";
                        } else if (value.contains("karbonn")) {
                                os = "Proprietary Karbonn software";
                        } else {
                                os = "Proprietary software";
                        }
                }
                if (value.contains("mmp")) {
                        os = "Proprietary Samsung software";
                }
                if (value.contains("samsung")) {
                        if (value.contains("bada")) {
                                os = "Samsung bada";
                        }
                        if (value.contains("bada 1.2")) {
                                os = "Samsung bada 1.2";
                        }
                }
                if (value.contains("sony ericsson java platform 8")) {
                        os = "Proprietary Sony Ericsson software";
                }
                if (value.contains("s60")) {
                        os = "Symbian 60";
                }
                if (value.contains("symbian")) {
                        if (value.contains("40")) {
                                os = "Symbian 40";
                        }
                        if (value.contains("60")) {
                                os = "Symbian 60";
                        }
                        if (value.contains("^3")) {
                                os = "Symbian^3";
                        }
                        if (value.contains("anna")) {
                                os = "Symbian Anna";
                        }
                        if (value.contains("belle")) {
                                os = "Symbian Belle";
                        }
                }
                if (value.contains("ios 4")) {
                        os = "iOS 4";
                }
                if (value.contains("ios 5")) {
                        os = "iOS 5";
                }
                return map.get(os);
        }

        private Map<String, Long> getOSEnumMap() {
                Map<String, Long> map = new HashMap<String, Long>();
                map.put("Android v1.5 (Cupcake)", 110335L);
                map.put("Android v1.6 (Donut)", 110336L);
                map.put("Android v2.1 (Eclair)", 110337L);
                map.put("Android v2.2 (Froyo)", 110338L);
                map.put("Android v2.3 (Gingerbread)", 110339L);
                map.put("Android v3.0 (Honeycomb)", 110340L);
                map.put("Android v3.1 (Honeycomb)", 110341L);
                map.put("Android v3.2 (Honeycomb)", 110342L);
                map.put("BlackBerry OS", 110343L);
                map.put("BlackBerry OS 5.0", 110344L);
                map.put("BlackBerry OS 6.0", 110345L);
                map.put("BlackBerry OS 7.0", 110346L);
                map.put("BlackBerry Tablet OS", 110347L);
                map.put("Brew Mobile Platform", 110348L);
                map.put("Maemo 5", 110349L);
                map.put("Windows Phone 7", 110350L);
                map.put("Windows Phone 7.5 Mango", 110351L);
                map.put("Proprietary LG software", 110352L);
                map.put("Proprietary Micromax software", 110353L);
                map.put("Proprietary Samsung software", 110354L);
                map.put("Proprietary Sony Ericsson software", 110355L);
                map.put("Proprietary Spice software", 110356L);
                map.put("Proprietary Lava software", 110367L);
                map.put("Proprietary Karbonn software", 110368L);
                map.put("Proprietary Motorola software", 110369L);
                map.put("Proprietary Alcatel software", 110370L);
                map.put("Proprietary software", 110371L);
                map.put("Samsung bada", 110357L);
                map.put("Samsung bada 1.2", 110358L);
                map.put("Symbian 40", 110360L);
                map.put("Symbian 60", 110361L);
                map.put("Symbian^3", 110362L);
                map.put("Symbian Anna", 110363L);
                map.put("Symbian Belle", 110364L);
                map.put("iOS 4", 110365L);
                map.put("iOS 5", 110366L);

                return map;

        }
        
        private Object clone(Object object) throws Exception{
                // Serializing and deserializing to clone the slide
                // serialize
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                ObjectOutputStream out = new ObjectOutputStream(bos);
                out.writeObject(object);

                // De-serialization
                ByteArrayInputStream bis = new ByteArrayInputStream(
                                bos.toByteArray());
                ObjectInputStream in = new ObjectInputStream(bis);
                return in.readObject();
                
        }
        
        /**
         * 
         * @throws Exception
         */
        private void copyMedia(String newEntityId, String oldEntityId, Media media) throws Exception {
                String mediaDirPath = Utils.CONTENT_DB_PATH + "media" + File.separator + newEntityId;
                File mediaDir = new File(mediaDirPath);
                if(!mediaDir.exists()) {
                        mediaDir.mkdir();
                } 

                String mediaFilePath = mediaDirPath + File.separator + media.getFileName();
                String oldMediaFilePath = media.getLocation();

                File mediaFile = new File(mediaFilePath);
                mediaFile.createNewFile();

                File oldMediaFile = new File(oldMediaFilePath);

                InputStream in = new FileInputStream(oldMediaFile);
                
                // appending output stream
                // @rajveer : replacing the existing file 
                OutputStream out = new FileOutputStream(mediaFile); 
                
                try {
                        IOUtils.copy(in, out);
                }
                finally {
                        IOUtils.closeQuietly(in);
                        IOUtils.closeQuietly(out);
                }
                media.setLocation(mediaFilePath);
        }
        
        private void migrateHeadSetBack() throws Exception {
                Map<Long, Long>migratorMap = new HashMap<Long, Long>();
                migratorMap.put(77777000L,1000291L);
                migratorMap.put(77777001L,1000292L);
                migratorMap.put(77777002L,1000293L);
                migratorMap.put(77777003L,1000294L);
                migratorMap.put(77777004L,1000295L);
                migratorMap.put(77777005L,1000296L);
                migratorMap.put(77777006L,1000297L);
                migratorMap.put(77777007L,1000298L);
                migratorMap.put(77777008L,1000299L);
                migratorMap.put(77777009L,1000300L);
                migratorMap.put(77777010L,1000301L);
                migratorMap.put(77777011L,1000302L);
                migratorMap.put(77777012L,1000303L);
                migratorMap.put(77777013L,1000304L);
                migratorMap.put(77777014L,1000305L);
                migratorMap.put(77777015L,1000306L);
                migratorMap.put(77777016L,1000351L);
                migratorMap.put(77777017L,1000352L);
                migratorMap.put(77777018L,1000353L);
                migratorMap.put(77777019L,1000363L);
                migratorMap.put(77777020L,1000364L);
                migratorMap.put(77777021L,1000365L);
                migratorMap.put(77777022L,1000425L);
                migratorMap.put(77777023L,1000426L);
                migratorMap.put(77777024L,1000430L);
                migratorMap.put(77777025L,1000434L);
                migratorMap.put(77777026L,1000435L);
                migratorMap.put(77777027L,1000436L);
                migratorMap.put(77777028L,1000437L);
                migratorMap.put(77777029L,1000438L);
                migratorMap.put(77777030L,1000439L);
                migratorMap.put(77777031L,1000440L);
                migratorMap.put(77777032L,1000441L);
                migratorMap.put(77777033L,1000442L);
                migratorMap.put(77777034L,1000443L);
                migratorMap.put(77777035L,1000444L);
                migratorMap.put(77777036L,1000445L);
                migratorMap.put(77777037L,1000446L);
                migratorMap.put(77777038L,1000447L);
                migratorMap.put(77777039L,1000449L);
                migratorMap.put(77777040L,1000450L);
                migratorMap.put(77777041L,1000451L);
                migratorMap.put(77777042L,1000452L);
                migratorMap.put(77777043L,1000453L);
                migratorMap.put(77777044L,1000454L);
                migratorMap.put(77777045L,1000455L);
                migratorMap.put(77777046L,1000518L);
                migratorMap.put(77777047L,1000521L);
                migratorMap.put(77777048L,1000572L);
                migratorMap.put(77777049L,1000575L);
                migratorMap.put(77777050L,1000623L);
                migratorMap.put(77777051L,1000625L);
                migratorMap.put(77777052L,1000626L);
                migratorMap.put(77777053L,1000627L);
                migratorMap.put(77777054L,1000628L);
                migratorMap.put(77777055L,1000874L);
                migratorMap.put(77777056L,1001200L);
                migratorMap.put(77777057L,1001375L);
                migratorMap.put(77777058L,1001376L);
                migratorMap.put(77777059L,1001378L);
                migratorMap.put(77777060L,1001382L);
                migratorMap.put(77777061L,1001808L);
                migratorMap.put(77777062L,1001809L);
                migratorMap.put(77777063L,1001810L);
                migratorMap.put(77777064L,1001811L);
                migratorMap.put(77777065L,1001812L);
                migratorMap.put(77777066L,1001814L);
                migratorMap.put(77777067L,1001815L);
                migratorMap.put(77777068L,1001816L);
                migratorMap.put(77777069L,1001817L);
                migratorMap.put(77777070L,1001818L);
                migratorMap.put(77777071L,1001819L);
                migratorMap.put(77777072L,1001820L);
                migratorMap.put(77777073L,1001821L);
                migratorMap.put(77777074L,1001822L);
                migratorMap.put(77777075L,1001823L);
                migratorMap.put(77777076L,1001824L);
                migratorMap.put(77777077L,1001825L);
                migratorMap.put(77777078L,1002318L);
                migratorMap.put(77777079L,1002320L);
                migratorMap.put(77777080L,1003852L);
                migratorMap.put(77777081L,1003853L);
                migratorMap.put(77777082L,1003854L);
                migratorMap.put(77777083L,1003855L);
                migratorMap.put(77777084L,1003856L);
                migratorMap.put(77777085L,1003857L);
                migratorMap.put(77777086L,1003916L);
                migratorMap.put(77777087L,1003917L);
                migratorMap.put(77777088L,1003918L);
                migratorMap.put(77777089L,1003919L);
                migratorMap.put(77777090L,1003920L);
                migratorMap.put(77777091L,1003921L);
                migratorMap.put(77777092L,1003922L);
                migratorMap.put(77777093L,1003923L);
                migratorMap.put(77777094L,1003924L);
                migratorMap.put(77777095L,1003925L);
                migratorMap.put(77777096L,1003926L);
                migratorMap.put(77777097L,1003927L);
                migratorMap.put(77777098L,1004087L);
                migratorMap.put(77777099L,1004088L);
                migratorMap.put(77777100L,1004089L);
                migratorMap.put(77777101L,1004134L);
                migratorMap.put(77777102L,1004135L);
                migratorMap.put(77777103L,1004139L);
                
                for(Map.Entry<Long, Long> entry : migratorMap.entrySet()) {
                        Long newId  = entry.getKey();
                        Long validId  = entry.getValue();
                        Entity entity  = CreationUtils.getEntity(newId);
                        EntityState es = CreationUtils.getEntityState(newId);
                        Slide sl = entity.getSlide(130130);
                        /*entity.setID(validId);
                        es.setID(validId);*/
                        
                        

                        CreationUtils.updateEntity(entity);
                        CreationUtils.updateEntityState(es);
                        CreationUtils.deleteEntity(newId);
                        System.out.println(validId + " : " + es.getCategoryID() + ", removed entity id:" + newId);
                        
                }
                
        }

        private void migrateTabletsBack() throws Exception {
                //This entity is created after migration have to be deleted. Vrinda have to rmk it
                CreationUtils.deleteEntity(1006812);
                Date now = new Date();
                Collection<Entity> entities = CreationUtils.getEntities(20010);
                //entities = (List<Entity>)this.clone(entities);
                for (Entity entity : entities) {
                        long entityId = entity.getID();
                        if(entityId>9999999){
                                long oldEntityId = entityId%10000000;
                                System.out.println(oldEntityId);
                                EntityState es = CreationUtils.getEntityState(entityId);
                                if(es != null) {
                                        if (es.getStatus().equals(EntityStatus.READY) || es.getStatus().equals(EntityStatus.COMPLETE)){
                                                es.setStatus(EntityStatus.READY);
                                                es.setMerkedReadyOn(now);
                                        }
                                        es.setID(oldEntityId);
                                        entity.setID(oldEntityId);
                                        entity.setCategoryID(10010);
                                        es.setCategoryID(10010);
                                        CreationUtils.updateEntity(entity);
                                        CreationUtils.updateEntityState(es);
                                        CreationUtils.deleteEntity(entityId);
                                        System.out.println(entityId + " moved back");

                                } else {
                                        CreationUtils.deleteEntity(entityId);
                                        System.out.println("Deleted " + entityId + " due to incomplete tablets");
                                }
                        }else {
                                entity.setCategoryID(10010);
                                EntityState es = CreationUtils.getEntityState(entityId);
                                es.setCategoryID(10010);
                                CreationUtils.updateEntity(entity);
                                CreationUtils.updateEntityState(es);
                        }
                        
                        
                }
                
        }
        
    public String getTitle(Entity entity){
        String brand = entity.getBrand();
        String modelName = entity.getModelName();
        String modelNumber = entity.getModelNumber();
        String titleString = "";
        if(StringUtils.isEmpty(modelName)){
                titleString = brand + " " + modelNumber + " Price in India | Specifications, Features and Reviews";
        }else {
                titleString = brand + " " + modelName + " Price in India | " + modelNumber + " Specifications, Features and Reviews";
        }
        return titleString;
    }
    
    public String getMetaDescription(ExpandedEntity expEntity){
        Category parentCategory= expEntity.getCategory().getParentCategory();
        String categoryName = parentCategory.getLabel();
        if (parentCategory.getID()== Utils.MOBILE_ACCESSORIES_CATEGORY){
                categoryName = expEntity.getCategory().getLabel();
        }
        String template = "Buy {0} {1} {2} at $minPriceItem.getSellingPrice(). All {3} are 100% Original and carry full Manufacturers Warranty since we procure directly from the Brand. Free Next Day Delivery.";
        return MessageFormat.format(template, expEntity.getBrand(), expEntity.getModelName(), expEntity.getModelNumber(), categoryName.toLowerCase());
    }
    
public void migrateTablets() throws Exception {
                
                //Starting entity id for new Category with 10000
                Collection<Entity> entities = CreationUtils.getEntities(10010);
                long newCounter;
                //entities = (List<Entity>)this.clone(entities);
                for (Entity entity : entities) {
                        long entityId = entity.getID();
                        newCounter = Long.parseLong("1" + String.valueOf(entityId));
                        Entity newEntity = new Entity(newCounter, 20010);
                        try {
                                List<Slide> entitySlides = entity.getSlides();
                                if (entity == null || entitySlides == null) {
                                        continue;
                                }
                                List<Slide> newEntitySlides = new ArrayList<Slide>();
                                /*Slide introSlide = entity.getSlide(130001);
                                Slide summarySlide = entity.getSlide(130054);
                                Slide packageContents = entity.getSlide(130025);*/
                                for (Slide slide : entitySlides) {
                                        if (Arrays.asList(130054L, 130025L, 130001L).contains(slide.getSlideDefinitionID())) {
                                                slide=(Slide)this.clone(slide); 
                                                newEntitySlides.add(slide);
                                        }
                                        FreeformContent ffc1 = slide.getFreeformContent();
                                        if(ffc1 != null){
                                                Map<String, Media> mediaMap = ffc1.getMedias();
                                                if(mediaMap==null){
                                                        continue;
                                                }
                                                for(Media media : mediaMap.values()){
                                                        if(media.getType().equals(Type.IMAGE) || media.getType().equals(Type.DOCUMENT)){
                                                                copyMedia(String.valueOf(newCounter), String.valueOf(entityId),media);
                                                        }
                                                }
                                        }
                                }
                                
                                List<Long> newSlideSequence = new ArrayList<Long>();
                                newSlideSequence.add(130001L);
                                newSlideSequence.add(130054L);
                                newSlideSequence.add(130172L);
                                newSlideSequence.add(130173L);
                                newSlideSequence.add(130174L);
                                newSlideSequence.add(130175L);
                                newSlideSequence.add(130176L);
                                newSlideSequence.add(130177L);
                                newSlideSequence.add(130178L);
                                newSlideSequence.add(130180L);
                                newSlideSequence.add(130183L);
                                newSlideSequence.add(130025L);
                                
                                newEntity.setSlideSequence(newSlideSequence);
                                newEntity.setBrand(entity.getBrand());
                                newEntity.setModelName(entity.getModelName());
                                newEntity.setModelNumber(entity.getModelNumber());
                                //entitySlides.remove(featureSlide);
                                newEntity.setSlides(newEntitySlides);
                                EntityState es = new EntityState(newCounter, 20010, "admin");
                                es.setBrand(entity.getBrand());
                                es.setModelName(entity.getModelName());
                                es.setModelNumber(entity.getModelNumber());
                                CreationUtils.createEntity(newEntity, es);
                                System.out.println("New entity : " + newCounter + " created using : " + entityId);
                                System.out.println(CreationUtils.getEntity(newCounter));
                                newCounter++;
                        }catch(Exception e){
                                System.out.println("Could not migrate " + entityId);
                        }
                }
                
        }

public void migrateImagesInTablets() throws Exception {
        
        //Starting entity id for new Category with 10000
        Collection<Entity> entities = CreationUtils.getEntities(10010);
        long newCounter;
        //entities = (List<Entity>)this.clone(entities);
        for (Entity entity : entities) {
                long entityId = entity.getID();
                newCounter = Long.parseLong("1" + String.valueOf(entityId));
                Entity newEntity = CreationUtils.getEntity(newCounter);
                try {
                        if (newEntity == null) {
                                continue;
                        }
                        Slide introSlide = newEntity.getSlide(130001L);
                        Slide looknfeelSlide = entity.getSlide(130002L);
                        /*
                         * Slide introSlide = entity.getSlide(130001); Slide
                         * summarySlide = entity.getSlide(130054); Slide packageContents
                         * = entity.getSlide(130025);
                         */

                        if (looknfeelSlide != null) {
                                FreeformContent ffc1 = looknfeelSlide.getFreeformContent();
                                if (ffc1 != null) {
                                        Map<String, Media> mediaMap = ffc1.getMedias();
                                        if (mediaMap == null) {
                                                continue;
                                        }
                                        FreeformContent introFfc = introSlide
                                                        .getFreeformContent();
                                        Map<String, Media> introMediaMap = new LinkedHashMap<String, Media>();
                                        introFfc.setMedias(introMediaMap);
                                        Set<String> introMediaMapKeys = introMediaMap.keySet();
                                        for (Map.Entry<String, Media> entry : mediaMap.entrySet()) {
                                                Media entryValue = entry.getValue();
                                                String entryKey = entry.getKey();
                                                if (!introMediaMapKeys.contains(entryKey)) {
                                                        introMediaMap.put(entryKey,
                                                                        (Media) clone(entryValue));
                                                        if (entryValue.getType().equals(Type.IMAGE)
                                                                        || entryValue.equals(Type.DOCUMENT)) {
                                                                try {
                                                                        copyMedia(String.valueOf(newCounter),
                                                                                        String.valueOf(entityId),
                                                                                        entryValue);
                                                                } catch (Exception e) {
                                                                        System.out
                                                                                        .println("could not copy file "
                                                                                                        + entityId);
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }

                        CreationUtils.updateEntity(newEntity);
                        System.out.println("New entity : " + newCounter
                                        + " created using : " + entityId);
                } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("Could not migrate " + entityId);
                }
        }
        
        
}
private void miscilleniousPopulate() throws Exception{
        
        DefinitionsContainer defContainer = Catalog.getInstance().getDefinitionsContainer();
        
        //Get All Enum Values of Communication facilities 70114;
        Map <Long, Entity> allEntities = CreationUtils.getEntities();
        /*Map <Long, Entity> allEntities =new HashMap<Long, Entity>();
        allEntities.put(1000069l, CreationUtils.getEntity(1000069l));*/
        for (Map.Entry<Long, Entity> entry:allEntities.entrySet()){
                Entity entity = entry.getValue();
                Long categoryId = entity.getCategoryID();
                EntityState es = CreationUtils.getEntityState(entity.getID());
                if ((categoryId == 10002 || categoryId == 10003 || categoryId == 10004 || categoryId == 10005) 
                                && (es != null && es.getStatus().equals(EntityStatus.READY))) {
                        ExpandedEntity expEntity = new ExpandedEntity(entity);
                        Slide miscSlide = expEntity.getSlide(130024l);
                        if(miscSlide != null) {
                                List<Feature> miscFeatures = miscSlide.getFeatures();
                                if(CollectionUtils.isNotEmpty(miscFeatures)){
                                        Iterator<Feature> iter = miscFeatures.iterator();
                                        while(iter.hasNext()) {
                                                Feature f =iter.next();
                                                if (f.getFeatureDefinitionID() == 120484l || f.getFeatureDefinitionID() == 120483l || f.getFeatureDefinitionID() == 1204821 || f.getFeatureDefinitionID() == 120481l){
                                                        List<Bullet> bulletList  = f.getBullets();
                                                        PrimitiveDataObject b = (PrimitiveDataObject)bulletList.get(0).getDataObject();
                                                        String bulletValue = b.getValue();
                                                        String newString = bulletValue;
                                                        if(bulletValue.startsWith(", ") || bulletValue.contains(",,") || bulletValue.contains("<li>")){
                                                                System.out.println(entity.getID());
                                                                bulletList = new ArrayList<Bullet>();
                                                                newString = bulletValue.replaceAll("<li>|</li>|<ul>|</ul>", ",").replaceAll(",,", ",").replaceAll(", ,", ", ").replaceAll(", $", "");
                                                                
                                                                System.out.println(newString);
                                                                if(newString.startsWith(", ") ){
                                                                        newString = newString.replaceFirst(", ", "");
                                                                }
                                                                bulletList.add(new Bullet(new PrimitiveDataObject(newString)));
                                                                f.setBullets(bulletList);
                                                                System.out.println(newString);
                                                        }
                                                        if ( newString.equals(" ") || newString.equals("") || newString.equals("  ") || newString.equals("   ")){
                                                                iter.remove();
                                                        }
                                                }
                                        }
                                        CreationUtils.updateEntity(entity);
                                        touchEntityState(entity.getID());
                                }
                        }
                        //touchEntityState(entity.getID());
                        }
                }
        }

        private void step2() throws Exception {
                //Get All Enum Values of Communication facilities 70114;
                //Map <Long, Entity> allEntities = CreationUtils.getEntities();
                Map <Long, Entity> allEntities =new HashMap<Long, Entity>();
                allEntities.put(1007937l, CreationUtils.getEntity(1007937l));
                allEntities.put(1007932l, CreationUtils.getEntity(1007932l));
                allEntities.put(1007930l, CreationUtils.getEntity(1007930l));
                allEntities.put(1007934l, CreationUtils.getEntity(1007934l));
                allEntities.put(1007936l, CreationUtils.getEntity(1007936l));
                allEntities.put(1007935l, CreationUtils.getEntity(1007935l));
                for (Map.Entry<Long, Entity> entry:allEntities.entrySet()){
                        Entity entity = entry.getValue();
                        Long categoryId = entity.getCategoryID();
                        EntityState es = CreationUtils.getEntityState(entity.getID());
                        if ((categoryId == 10002 || categoryId == 10003 || categoryId == 10004 || categoryId == 10005) && es != null ) {
                                List<Slide> allSlides = entity.getSlides();
                                Slide slMaps = entity.getSlide(130022l);
                                Slide slConnectivity = (categoryId == 10005 ? entity.getSlide(130058l) : entity.getSlide(130007l));
                                if(slConnectivity != null){
                                        if(slConnectivity.getSlideDefinitionID() ==130058l){
                                                Slide newSlide = new Slide(130007l);
                                                newSlide.setFeatures(slConnectivity.getFeatures());
                                                allSlides.remove(slConnectivity);
                                                allSlides.add(newSlide);
                                                slConnectivity = newSlide;
                                                
                                                List<Long> slideSequence = entity.getSlideSequence();
                                                int index =slideSequence.indexOf(130058l);
                                                slideSequence.remove(index);;
                                                slideSequence.add(index, 130007l);
                                        }
                                        if(slMaps != null) {
                                                List<Feature> mapsFeatures = slMaps.getFeatures();
                                                allSlides.remove(slMaps);
                                                if(mapsFeatures != null){
                                                        for (Feature mapsFeature : mapsFeatures){
                                                                if(mapsFeature.getFeatureDefinitionID() == 120046l){
                                                                        slConnectivity.getFeatures().add(mapsFeature);
                                                                        break;
                                                                }
                                                        }
                                                        
                                                }
                                        }
                                        
                                }
                                
                                Slide slKeyBoard = entity.getSlide(130026l);
                                Slide slDisplay = entity.getSlide(130003l);
                                Slide slSummary = entity.getSlide(130054l);
                                Slide slLookNFeel = entity.getSlide(130002l);
                                Feature hardkeysFeature = null;
                                if (slKeyBoard != null) {
                                        List<Feature> keyBoardFeatures = slKeyBoard.getFeatures();
                                        Iterator<Feature> iter = keyBoardFeatures.iterator();
                                        while(iter.hasNext()){
                                                Feature feature = iter.next();
                                                if(feature.getFeatureDefinitionID() == 120010l){
                                                        if(slSummary!=null){
                                                        slSummary.getFeatures().add(feature);
                                                        }
                                                        iter.remove();
                                                }
                                                if(feature.getFeatureDefinitionID() == 120082l){
                                                        slDisplay.getFeatures().add(feature);
                                                        iter.remove();
                                                }
                                                if(feature.getFeatureDefinitionID() == 120009l){
                                                        slLookNFeel.getFeatures().add(feature);
                                                        iter.remove();
                                                }
                                                if(feature.getFeatureDefinitionID() == 120048l ){
                                                        if(hardkeysFeature == null) {
                                                                hardkeysFeature = feature;
                                                        }else {
                                                                if(feature.getBullets() != null){
                                                                        hardkeysFeature.getBullets().addAll(feature.getBullets());
                                                                        slLookNFeel.getFeatures().add(hardkeysFeature);
                                                                }
                                                        }
                                                        iter.remove();
                                                }
                                                if(feature.getFeatureDefinitionID() == 120049l ){
                                                        if(hardkeysFeature == null){
                                                                hardkeysFeature = new Feature(120048l);
                                                                hardkeysFeature.setBullets(feature.getBullets());
                                                        } else {
                                                                if(feature.getBullets() != null){
                                                                        hardkeysFeature.getBullets().addAll(feature.getBullets());
                                                                        slLookNFeel.getFeatures().add(hardkeysFeature);
                                                                }
                                                        }
                                                        iter.remove();
                                                }
                                        }
                                        
                                        allSlides.remove(slKeyBoard);
                                }
                                CreationUtils.updateEntity(entity);
                                //touchEntityState(entity.getID());
                        }
                }
                        
        }
        
        private void step4() throws Exception {
                //Get All Enum Values of Communication facilities 70114;
                Map <Long, Entity> allEntities = CreationUtils.getEntities();
                /*Map <Long, Entity> allEntities = new HashMap<Long, Entity>();
                allEntities.put(1002529l, CreationUtils.getEntity(1002529l));
                allEntities.put(1007932l, CreationUtils.getEntity(1007932l));
                allEntities.put(1007930l, CreationUtils.getEntity(1007930l));
                allEntities.put(1007934l, CreationUtils.getEntity(1007934l));
                allEntities.put(1007936l, CreationUtils.getEntity(1007936l));
                allEntities.put(1007935l, CreationUtils.getEntity(1007935l));*/
                for (Map.Entry<Long, Entity> entry:allEntities.entrySet()){
                        Entity entity = entry.getValue();
                        Long categoryId = entity.getCategoryID();
                        EntityState es = CreationUtils.getEntityState(entity.getID());
                        if ((categoryId == 10002 || categoryId == 10003 || categoryId == 10004 || categoryId == 10005) && es != null && !es.getStatus().equals(EntityStatus.UNASSIGNED)) {
                                List<Slide> allSlides = entity.getSlides();
                                if(allSlides != null){
                                        for(Slide slide:allSlides) {
                                                if(slide!=null){
                                                        List <Feature> features = slide.getFeatures();
                                                        Iterator<Feature> fIterator = features.iterator();
                                                        while (fIterator.hasNext()){
                                                                Feature f = fIterator.next();
                                                                long fId = f.getFeatureDefinitionID();
                                                                if(fId == 120011 || fId == 120020 || fId == 120051 || fId == 120025 || fId == 120056 || fId == 120216 || fId == 120045 || fId == 120010){
                                                                        fIterator.remove();
                                                                }
                                                                if(fId==120144){
                                                                        String  value = "Adobe flash player";
                                                                        List<Bullet> flashb = f.getBullets();
                                                                        if(flashb !=null && flashb.size() > 0){
                                                                                value = ((PrimitiveDataObject)flashb.get(0).getDataObject()).getValue();
                                                                        }
                                                                        Slide miscSlide1 = entity.getSlide(130024l);
                                                                        if(miscSlide1 != null){
                                                                                List <Feature> mfeatures = miscSlide1.getFeatures();
                                                                                Iterator<Feature> mIterator = mfeatures.iterator();
                                                                                while (mIterator.hasNext()){
                                                                                        Feature mf = mIterator.next();
                                                                                        if(mf != null){
                                                                                                if(mf.getFeatureDefinitionID() == 120484l){
                                                                                                        Bullet b = mf.getBullets().get(0);
                                                                                                        String finalValue = ((PrimitiveDataObject)b.getDataObject()).getValue() + ", " + value;
                                                                                                        b.setDataObject(new PrimitiveDataObject(finalValue));
                                                                                                }
                                                                                        }
                                                                                }
                                                                        } else {
                                                                                System.out.println("no misc for entity : " + entity.getID());
                                                                        }
                                                                        fIterator.remove();
                                                                }
                                                        }
                                                }
                                        }
                                        try{
                                                CreationUtils.updateEntity(entity);
                                        }catch (Exception e){
                                                System.out.println("Could not update entity : " + entity.getID());
                                        }
                                        touchEntityState(entity.getID());
                                }
                        }
                }
        }
        private void step6() throws Exception {
                //Get All Enum Values of Communication facilities 70114;
                DefinitionsContainer defc = Catalog.getInstance().getDefinitionsContainer();
                Map <Long, Long> allEntities = getValues();
                for (Map.Entry<Long, Long> entry:allEntities.entrySet()){
                        Long entityId = entry.getKey();
                        Entity entity = CreationUtils.getEntity(entityId); 
                        Long categoryId = entity.getCategoryID();
                        boolean found = false;
                        //System.out.println("entity : " + entity.getID());
                        EntityState es = CreationUtils.getEntityState(entity.getID());
                        if(!es.getStatus().equals(EntityStatus.UNASSIGNED)) {
                                if ((categoryId == 10002 || categoryId == 10003 || categoryId == 10004 || categoryId == 10005) 
                                                && es != null) {
                                        
                                        Slide videoSlide = entity.getSlide(130031l);
                                        if(videoSlide != null){
                                                List<Feature> features = videoSlide.getFeatures();
                                                if(features != null) {
                                                        Iterator<Feature> iter = features.iterator();
                                                        while(iter.hasNext()){
                                                                Feature f = iter.next();
                                                                if(f.getFeatureDefinitionID() == 120475l){
                                                                        found = true;
                                                                        if(!entry.getValue().equals(((EnumDataObject)f.getBullets().get(0).getDataObject()).getEnumValueID())){
                                                                                f.getBullets().get(0).setDataObject(new EnumDataObject(entry.getValue()));
                                                                                try{
                                                                                        System.out.println("Recording feature updated:" + entityId);
                                                                                        CreationUtils.updateEntity(entity);
                                                                                        touchEntityState(entityId);
                                                                                }catch (Exception e){
                                                                                        System.out.println("Could not update entity : " + entity.getID());
                                                                                }
                                                                        }
                                                                        break;
                                                                }
                                                        }
                                                        
                                                        if(!found){
                                                                Feature f = new Feature(120475l);
                                                                f.setBullets(Arrays.asList(new Bullet(new EnumDataObject(entry.getValue()))));
                                                                features.add(f);
                                                                try{
                                                                        System.out.println("Recording feature created:" + entityId);
                                                                        CreationUtils.updateEntity(entity);
                                                                        touchEntityState(entityId);
                                                                }catch (Exception e){
                                                                        System.out.println("Could not update entity : " + entity.getID());
                                                                }
                                                        }
                                                }
                                        }
                                }

                        }
                }
        }
        
        private Map<Long,Long> getValues() {
                try {
                        Reader reader = new FileReader("/root/sample.json");
                        return new Gson().fromJson(reader, new TypeToken<Map<Long,Long>>() {}.getType());
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                        return new HashMap<Long, Long>();
                }
        }
        
        private void reorderPhones() throws Exception {
                DefinitionsContainer defc = Catalog.getInstance().getDefinitionsContainer();
                List<Long> slideSequence = defc.getCategorySlideSequence().get(10003l);
                Map <Long, Entity> allEntities = CreationUtils.getEntities();
                for (Map.Entry<Long, Entity> entry:allEntities.entrySet()){
                        Long entityId = entry.getKey();
                        Entity entity = entry.getValue(); 
                        Long categoryId = entity.getCategoryID();
                        //System.out.println("entity : " + entity.getID());
                        EntityState es = CreationUtils.getEntityState(entity.getID());
                        if(!es.getStatus().equals(EntityStatus.UNASSIGNED)) {
                                if ((categoryId == 10002 || categoryId == 10003 || categoryId == 10004 || categoryId == 10005) 
                                                && es != null) {
                                        entity.setSlideSequence(slideSequence);
                                        CreationUtils.updateEntity(entity);
                                        touchEntityState(entityId);
                                }
                        }
                }
        }
}