package org.onehippo.forge.konakart.gogreen.database.helper;
import com.konakartadmin.app.AdminCategory;
import com.konakartadmin.app.AdminLanguage;
import com.konakartadmin.app.AdminProduct;
import com.konakartadmin.app.AdminProductDescription;
import com.konakartadmin.bl.AdminMgrFactory;
import com.konakartadmin.blif.AdminLanguageMgrIf;
import com.konakartadmin.blif.AdminProductMgrIf;
import org.onehippo.forge.konakart.gogreen.database.loader.ManufacturerLoader;
import org.onehippo.forge.konakart.gogreen.database.utils.LanguageUtil;
import org.onehippo.forge.konakart.gogreen.database.vo.ProductDescriptionVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.util.*;
public class ProductHelper {
public static final Logger log = LoggerFactory.getLogger(ProductHelper.class);
public static Map<String, Integer> productsMapping = new HashMap<String, Integer>();
private static int defaultTaxClassId;
private static AdminProductMgrIf productMgrIf;
private static AdminLanguage[] adminLanguages;
private String name;
private List<Integer> categories;
private double price;
private Calendar creationDate;
private Calendar lastModificationDate;
private Calendar publicationDate;
private List<String> images = new ArrayList<String>();
private List<ProductDescriptionVo> descriptionVos = new ArrayList<ProductDescriptionVo>();
private String summary;
public ProductHelper() throws Exception {
}
public static void setAdminMgrFactory(AdminMgrFactory adminMgrFactory) throws Exception {
defaultTaxClassId = TaxClassesHelper.defaultTaxClassId;
productMgrIf = adminMgrFactory.getAdminProdMgr(true);
AdminLanguageMgrIf adminLanguageMgr = adminMgrFactory.getAdminLanguageMgr(true);
adminLanguages = adminLanguageMgr.getAllLanguages();
}
public int process() throws Exception {
AdminProduct adminProduct = new AdminProduct();
// Set mandatory fields
adminProduct.setType(0);
adminProduct.setQuantity(100);
adminProduct.setTaxClassId(defaultTaxClassId);
adminProduct.setWeight(new BigDecimal(0));
adminProduct.setStatus((byte) 1);
adminProduct.setImage("none.png");
adminProduct.setDateAdded(creationDate.getTime());
adminProduct.setDateAvailable(publicationDate.getTime());
adminProduct.setDateLastModified(lastModificationDate.getTime());
// Brand
adminProduct.setManufacturerId(ManufacturerLoader.defaultManufacturerId);
// Product Name
adminProduct.setName(name);
// Product code
String uuid = UUID.randomUUID().toString();
adminProduct.setModel(uuid);
// Associate to the "physical product type" category
List<AdminCategory> allAdminCategories = new ArrayList<AdminCategory>();
for (int catId : categories) {
AdminCategory adminCategory = new AdminCategory();
adminCategory.setId(catId);
allAdminCategories.add(adminCategory);
}
adminProduct.setCategories(allAdminCategories.toArray(new AdminCategory[allAdminCategories.size()]));
adminProduct.setPriceExTax(new BigDecimal(price));
// Set the reseller price
adminProduct.setPrice1(new BigDecimal(price * 0.9));
AdminProductDescription[] descriptions = new AdminProductDescription[descriptionVos.size()];
int i = 0;
for (ProductDescriptionVo descriptionVo : descriptionVos) {
// Set the product adminProductDescription
AdminProductDescription adminProductDescription = new AdminProductDescription();
adminProductDescription.setLanguageId(LanguageUtil.getLanguageId(descriptionVo.getLocale(), adminLanguages));
adminProductDescription.setName(descriptionVo.getTitle());
// Add summary
String description = descriptionVo.getSummary();
// Add separator
description += "-------";
// Add description
description += descriptionVo.getDescription();
adminProductDescription.setDescription(description);
descriptions[i] = adminProductDescription;
i = i + 1;
}
adminProduct.setDescriptions(descriptions);
Iterator<String> imagesIterator = images.iterator();
if (imagesIterator.hasNext()) {
adminProduct.setImage(imagesIterator.next());
}
if (imagesIterator.hasNext()) {
adminProduct.setImage2(imagesIterator.next());
}
if (imagesIterator.hasNext()) {
adminProduct.setImage3(imagesIterator.next());
}
if (imagesIterator.hasNext()) {
adminProduct.setImage4(imagesIterator.next());
}
int productId = productMgrIf.insertProduct(adminProduct);
log.info("The product named " + name + " has been added.");
return productId;
}
public void setName(String name) {
this.name = name;
}
public void setCategories(List<Integer> categories) {
this.categories = categories;
}
public void setPrice(double price) {
this.price = price;
}
public void setCreationDate(Calendar creationDate) {
this.creationDate = creationDate;
}
public void setLastModificationDate(Calendar lastModificationDate) {
this.lastModificationDate = lastModificationDate;
}
public void setPublicationDate(Calendar publicationDate) {
this.publicationDate = publicationDate;
}
public void addImage(String image) {
images.add(image);
}
public void addDescription(ProductDescriptionVo descriptionVo) {
descriptionVos.add(descriptionVo);
}
public void setSummary(String summary) {
this.summary = summary;
}
}