Rev 5566 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.util;import in.shop2020.metamodel.core.Entity;import in.shop2020.metamodel.core.Slide;import in.shop2020.metamodel.definitions.Catalog;import in.shop2020.metamodel.definitions.Category;import in.shop2020.metamodel.definitions.DefinitionsContainer;import in.shop2020.metamodel.util.CreationUtils;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.lang.StringUtils;public class CompatibleAccessoriesIndexGenerator {private String[] indentation = {"", " ", " ", " "," "};private DefinitionsContainer defContainer = Catalog.getInstance().getDefinitionsContainer();List<Entity> entities;private Map<Long, Long> categorySlides = new HashMap<Long, Long>();private Map<Long, String> categoryLabels = new HashMap<Long, String>();private Map<Long, List<String>> categorySynonyms = new HashMap<Long, List<String>>();private Map<String, List<String>> brandSynonyms = new HashMap<String, List<String>>();public CompatibleAccessoriesIndexGenerator(List<Entity> entities) throws Exception {categorySlides.put((long) 10014, (long) 130067);categorySlides.put((long) 10018, (long) 130073);categoryLabels.put((long) 10014, "Battery");categoryLabels.put((long) 10018, "Carrying Case");Map<String, String> brSynonyms = new HashMap<String, String>();Map<String, String> catSynonyms = new HashMap<String, String>();try {brSynonyms = CreationUtils.getSynonyms().get("brand");catSynonyms = CreationUtils.getSynonyms().get("subcategory");for(String brand : brSynonyms.keySet()){List<String> brandSyns = Arrays.asList((brand + "," + StringUtils.defaultString(brSynonyms.get(brand))).split(","));brandSynonyms.put(brand, brandSyns);}} catch (Exception e) {// TODO: handle exception}catSynonyms.put("Battery", StringUtils.defaultString("Battery," + StringUtils.defaultString(catSynonyms.get("Battery"))));catSynonyms.put("Carrying Case", StringUtils.defaultString("Carrying Case," + StringUtils.defaultString(catSynonyms.get("Carrying Case"))));categorySynonyms.put((long) 10014, Arrays.asList(catSynonyms.get("Battery").split(",")));categorySynonyms.put((long) 10018, Arrays.asList(catSynonyms.get("Carrying Case").split(",")));this.entities = entities;}public void generate() {Map<String,List<List<String>>> map = new HashMap<String, List<List<String>>>();for(Entity entity: entities) {long categoryId = entity.getCategoryID();String url = getProductURL(entity);if (url != null && categorySlides.keySet().contains(categoryId)) {Slide compatibilitySlide = entity.getSlide(categorySlides.get(categoryId));try {String text = compatibilitySlide.getFreeformContent().getFreeformText();if(text.indexOf("<ul>") > -1) continue;for(String name: getHandsetNames(text)) {for(String categoryLabel : getCategorySynonyms(categoryId)){String displayName = name + " " + categoryLabel;String startsWith = displayName.substring(0,1).toLowerCase();List<List<String>> list1;if(map.containsKey(startsWith)){list1 = map.get(startsWith);}else {list1 = new ArrayList<List<String>>();map.put(startsWith, list1);}list1.add(Arrays.asList(displayName, url));}}} catch (NullPointerException e) {// TODO: handle exception}}}String alphabeticalTemplate = "Product starting with <b>{0}</b>";String levelOneTitle = "Accessories Compatibility Index";String levelTwoTitle = "";LevelHierarchy lh = new LevelHierarchy(alphabeticalTemplate, levelOneTitle, levelTwoTitle, map);lh.generatePages();}private String getProductURL(Entity entity) {Category category = defContainer.getCategory(entity.getCategoryID());try {Category parentCategory = category.getParentCategory();String url = "/" + parentCategory.getLabel().toLowerCase().replace(' ', '-') + "/";String productUrl = ((entity.getBrand() != null) ? entity.getBrand().trim() + " " : "").toLowerCase().replace(' ', '-')+ "-" + ((entity.getModelName() != null) ? entity.getModelName().trim() + " " : "").toLowerCase().replace(' ', '-')+ "-" + ((entity.getModelNumber() != null ) ? entity.getModelNumber().trim() + " ": "" ).toLowerCase().replace(' ', '-')+ "-" + entity.getID();productUrl = productUrl.replaceAll("/", "-");url = url + productUrl;url = url.replaceAll("-+", "-");return url;} catch (NullPointerException e) {return null;}}private List<String> getHandsetNames(String rawText) {List<String> names = new ArrayList<String>();for (String namesWithSameBrand: rawText.trim().split("\n")) {boolean isFirst = true;List<String> brandSynonyms = null;for(String name: namesWithSameBrand.trim().split(",")) {name = name.trim();String [] brandName;if(isFirst) {brandName = name.split(" ", 2);if(brandName.length==1){continue;}if(brandName[1].startsWith("Ericsson")) {brandName[0] = "Sony Ericsson";brandName[1] = brandName[1].substring(9);}brandSynonyms = getBrandSynonyms(brandName[0]);name = brandName[1];isFirst = false;}for(String brand : brandSynonyms){names.add(brand + " " + name);}}}return names;}private List<String> getBrandSynonyms(String brand) {if(!brandSynonyms.containsKey(brand)){List<String> list = new ArrayList<String>();list.add(brand);brandSynonyms.put(brand, list);}return brandSynonyms.get(brand);}private List<String> getCategorySynonyms(Long categoryId) {return categorySynonyms.get(categoryId);}public static void main(String[] args) {try {List<Entity> entities = new ArrayList<Entity>(CreationUtils.getEntities().values());CompatibleAccessoriesIndexGenerator generator = new CompatibleAccessoriesIndexGenerator(entities);generator.generate();} catch (Exception e) {e.printStackTrace();}}}