package org.onehippo.forge.konakart.gogreen.database.loader;
import com.konakartadmin.app.AdminCategory;
import com.konakartadmin.app.AdminCategoryDescription;
import com.konakartadmin.app.AdminLanguage;
import com.konakartadmin.bl.AdminMgrFactory;
import com.konakartadmin.blif.AdminCategoryMgrIf;
import com.konakartadmin.blif.AdminLanguageMgrIf;
import org.apache.commons.lang.StringUtils;
import org.onehippo.forge.konakart.gogreen.database.utils.LanguageUtil;
import java.util.HashMap;
import java.util.Map;
public class CategoryLoader extends BaseLoader {
// Map categoryName with id of the category
public static Map<String, Integer> categoryNameCategoryIdsMappings = new HashMap<String, Integer>();
public static final String DEFAULT_CAT = "Default";
private int rootCategoriesId;
private AdminLanguage[] adminLanguages;
private AdminCategoryMgrIf categoryMgr;
public CategoryLoader(final AdminMgrFactory adminMgrFactory, final String filePath, int rootCategoriesId) throws Exception {
super(adminMgrFactory, filePath);
this.rootCategoriesId = rootCategoriesId;
AdminLanguageMgrIf adminLanguageMgr = adminMgrFactory.getAdminLanguageMgr(true);
adminLanguages = adminLanguageMgr.getAllLanguages();
categoryMgr = adminMgrFactory.getAdminCatMgr(true);
}
@Override
protected void processRow(String[] csvLine) throws Exception {
createCategory(csvLine, rootCategoriesId);
}
private void createCategory(String[] csvLine, int rootCategoriesId) throws Exception {
String categoryName = csvLine[0];
AdminCategory adminCategory = new AdminCategory();
adminCategory.setName(categoryName);
adminCategory.setImage("none.png");
adminCategory.setParentId(rootCategoriesId);
AdminCategoryDescription[] descriptions = new AdminCategoryDescription[8];
descriptions[0] = new AdminCategoryDescription();
descriptions[0].setName(categoryName);
descriptions[0].setLanguageId(LanguageUtil.getLanguageId("en_US", adminLanguages));
descriptions[0].setDescription(categoryName + " Category");
categoryName = csvLine[1];
descriptions[1] = new AdminCategoryDescription();
descriptions[1].setName(categoryName);
descriptions[1].setLanguageId(LanguageUtil.getLanguageId("fr_FR", adminLanguages));
descriptions[1].setDescription(categoryName + " Category");
categoryName = csvLine[2];
descriptions[2] = new AdminCategoryDescription();
descriptions[2].setName(categoryName);
descriptions[2].setLanguageId(LanguageUtil.getLanguageId("nl_NL", adminLanguages));
descriptions[2].setDescription(categoryName + " Category");
categoryName = csvLine[3];
descriptions[3] = new AdminCategoryDescription();
descriptions[3].setName(categoryName);
descriptions[3].setLanguageId(LanguageUtil.getLanguageId("it_IT", adminLanguages));
descriptions[3].setDescription(categoryName + " Category");
categoryName = csvLine[4];
descriptions[4] = new AdminCategoryDescription();
descriptions[4].setName(categoryName);
descriptions[4].setLanguageId(LanguageUtil.getLanguageId("cn_ZH", adminLanguages));
descriptions[4].setDescription(categoryName + " Category");
categoryName = csvLine[5];
descriptions[5] = new AdminCategoryDescription();
descriptions[5].setName(categoryName);
descriptions[5].setLanguageId(LanguageUtil.getLanguageId("es_ES", adminLanguages));
descriptions[5].setDescription(categoryName + " Category");
categoryName = csvLine[6];
descriptions[6] = new AdminCategoryDescription();
descriptions[6].setName(categoryName);
descriptions[6].setLanguageId(LanguageUtil.getLanguageId("ru_RU", adminLanguages));
descriptions[6].setDescription(categoryName + " Category");
categoryName = csvLine[7];
descriptions[7] = new AdminCategoryDescription();
descriptions[7].setName(categoryName);
descriptions[7].setLanguageId(LanguageUtil.getLanguageId("de_DE", adminLanguages));
descriptions[7].setDescription(categoryName + " Category");
adminCategory.setDescriptions(descriptions);
// Check the availability of the category
String isVisible = csvLine[1].trim();
adminCategory.setInvisible(StringUtils.equalsIgnoreCase(isVisible, "true"));
int catId = categoryMgr.insertCategory(adminCategory);
System.out.println("The category named " + csvLine[0] + " has been added.");
// Check if sub category needs to be created
assignProductCodeWithCatId(csvLine[0], catId);
}
private void assignProductCodeWithCatId(String categoryName, int catId) {
categoryNameCategoryIdsMappings.put(categoryName, catId);
}
public static Integer getCategoryId(String categoryName) {
if (categoryNameCategoryIdsMappings.containsKey(categoryName)) {
return categoryNameCategoryIdsMappings.get(categoryName);
} else {
return -1;
}
}
}