Шустрый

Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn
Репутация: нет Всего: нет
|
Код | public class WizardImportAction extends Action<ProductImportForm> { private Map<Integer, ActionResult> redirects = new HashMap<Integer, ActionResult>(); public WizardImportAction() { redirects.put(1, new ActionResult("first")); redirects.put(2, new ActionResult("second")); } private static final class ProductsSuccessfullyInserted extends ActionResult { public ProductsSuccessfullyInserted(String count) { super(new Message("label.import_done_prompt", count)); } @Override public boolean isError() { return false; } } @Override public ActionResult perform(ProductImportForm importForm, HttpServletRequest request) { ProductSession pSession = ManagerFactoryLocator.getManagerFactory().getPersister().getProductSession(); FormErrors errors = new FormErrors(); getController().setErrors(request, "productImport", errors); int insertedValues = 0; for (int page = 1; page < importForm.getNextPage(); page++) { errors.addAll(importForm.validate(page)); if (! errors.isEmpty()) { return redirects.get(page); } } if(importForm.getNextPage() <= ProductImportForm.PAGES) { return redirects.get(importForm.getNextPage()); } for(int i = 1; i < importForm.getRecords().length; i++){ if(importForm.getRecords()[i].length == ProductImportForm.PRODUCT_PROPERTIES_COUNT && importForm.getRecords()[i][1] != null && !importForm.getRecords()[i][1].equals("") && importForm.getRecords()[i][4] != null && !importForm.getRecords()[i][4].equals("")) { Product product = pSession.loadProductByItemCode(importForm.getRecords()[i][1]); if(importForm.getPage() == 3 && (importForm.getRecords()[i][1] != null || !importForm.getRecords()[i][1].equals(""))) { if(product == null) { productInsert(importForm, pSession, i); insertedValues++; } else if(product != null) { productUpdate(importForm, pSession, product, i); insertedValues++; } } else if(importForm.getPage() == 4 && importForm.getLink().equals("1")) { productInsert(importForm, pSession, i); insertedValues++; } else if(importForm.getPage() == 4 && importForm.getLink().equals("2")) { productUpdate(importForm, pSession, product, i); insertedValues++; } } } MultiPartRequestFactory.delTmpDir(request); getController().removeForm(request, "productImport"); return new ProductsSuccessfullyInserted(Integer.toString(insertedValues)); } private VatCategory getVatCategory(String vatCategoryName) { ProductManager manager = ManagerFactoryLocator.getManagerFactory().getProductManager(); VatCategory vatCategory = manager.getVatCategory(vatCategoryName); if (vatCategory == null) { vatCategory = manager.createVatCategory(vatCategoryName); manager.save(vatCategory); } return vatCategory; } public void productUpdate(ProductImportForm importForm, ProductSession pSession, Product product, int i) { String[] pathes = Utils.split(importForm.getRecords()[i][0], '@', '\\'); productCSVImport(product, importForm, pSession, i); String vatCategoryName = importForm.getRecords()[i][4]; if(vatCategoryName != null && vatCategoryName.trim().length() > 0) { product.setVatCategory(getVatCategory(vatCategoryName)); } try { if(importForm.getRecords()[i][92] != null) { Vector<ProductOption> vector = new Vector<ProductOption>(); List options = product.getOptions(); Iterator iter = options.iterator(); while(iter.hasNext()) { ProductOption productOpt = (ProductOption) iter.next(); vector.addElement(productOpt); }
while(!vector.isEmpty()) { ProductOption productOpt = vector.firstElement(); vector.remove(0); vector.trimToSize(); productOpt.delete(); } addOptions(importForm.getRecords()[i][92], product); } if(importForm.getRecords()[i][100] != null){ product.getQuantityPricingRules().clear(); addQuantityPriceRule(importForm.getRecords()[i][100], product); } if(importForm.getRootGroup() != null && importForm.getRecords()[i][0] != null) { Set<ProductGroup> oldParents = product.getParents(); for(int y = 0; y < pathes.length; y++) { String path = pSession.loadGroup(importForm.getRootGroup()).getName() + "/" + pathes[y]; ProductGroup group = pSession.createGroupByPath(path); if(!oldParents.remove(group)) group.addProduct(product); } for(Iterator iterator = oldParents.iterator(); iterator.hasNext();) { ProductGroup oldGroup = (ProductGroup) iterator.next(); oldGroup.removeProduct(product); } } else if(importForm.getRootGroup() == null && importForm.getRecords()[i][0] != null) { Set<ProductGroup> oldParents = product.getParents(); for(int y = 0; y < pathes.length; y++) { String path = pathes[y]; ProductGroup group = pSession.createGroupByPath(path); if(!oldParents.remove(group)) group.addProduct(product); } // Remove the old group associations that were not renewed. for(Iterator iterator = oldParents.iterator(); iterator.hasNext();) { ProductGroup oldGroup = (ProductGroup) iterator.next(); oldGroup.removeProduct(product); } } pSession.update(product); } catch(Exception e) { String msg = "Error: "; logger.error(msg, e); throw new RuntimeException(msg, e); } } public void productInsert(ProductImportForm importForm, ProductSession pSession, int i) { String[] pathes = Utils.split(importForm.getRecords()[i][0], '@', '\\'); String vatCategoryName = importForm.getRecords()[i][4]; Product newProduct = new Product(getVatCategory(vatCategoryName), pSession); productCSVImport(newProduct, importForm, pSession, i); pSession.save(newProduct); try { if(importForm.getRecords()[i][92] != null) { addOptions(importForm.getRecords()[i][92], newProduct); } if(importForm.getRecords()[i][100] != null) { addQuantityPriceRule(importForm.getRecords()[i][100], newProduct); } if(importForm.getRootGroup() == null && importForm.getRecords()[i][0] != null){ for(int x = 0; x < pathes.length; x++){ String path = pathes[x]; ProductGroup group = pSession.createGroupByPath(path); group.addProduct(newProduct); } } else if(importForm.getRootGroup() != null && importForm.getRecords()[i][0] != null) { for(int x =0; x < pathes.length; x++) { String path = pSession.loadGroup(importForm.getRootGroup()).getName() + "/" + pathes[x]; ProductGroup group = pSession.createGroupByPath(path); group.addProduct(newProduct); } } } catch(Exception e) { String msg = "Error: "; logger.error(msg, e); throw new RuntimeException(msg, e); } } public void productCSVImport(Product product, ProductImportForm importForm, ProductSession pSession, int i) { InventoryStatus inventory = product.getInventory(); try {
if(importForm.getRecords()[i][1] != null && !importForm.getRecords()[i][1].equals("")) { String itemCode = importForm.getRecords()[i][1]; pSession.checkItemCodeUniqueness(itemCode, product); product.setItemCode(itemCode); } if(importForm.getRecords()[i][2] != null) { product.setName(importForm.getRecords()[i][2]); } if(importForm.getRecords()[i][3] != null) { try { product.setPrice(Double.valueOf((importForm.getRecords()[i][3]))); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][5] != null) { try { product.setUnitPrice(Utils.parseDouble(importForm.getRecords()[i][5]) .doubleValue()); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][6] != null) { product.setUnitType(importForm.getRecords()[i][6]); } if(importForm.getRecords()[i][7] != null) { try { product.setPacketSize(Integer.parseInt(importForm.getRecords()[i][7])); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][8] != null) { product.setPacketType(importForm.getRecords()[i][8]); } if(importForm.getRecords()[i][9] != null) { try { product.setDefaultAmount(Integer.parseInt(importForm.getRecords()[i][9])); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][10] != null) { try { product.setMinAmount(Integer.parseInt(importForm.getRecords()[i][10])); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][11] != null) { try { product.setMaxAmount(Integer.parseInt(importForm.getRecords()[i][11])); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][12] != null) { try { product.setPurchasePrice(Utils.parseDouble(importForm.getRecords()[i][12])); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][13] != null) { String visible = importForm.getRecords()[i][13]; if(visible.equals("1")) { product.setVisible(true); } else if(visible.equals("0")) { product.setVisible(false); } } if(importForm.getRecords()[i][14] != null) { product.setSupplierId(importForm.getRecords()[i][14]); } if(importForm.getRecords()[i][15] != null) { product.setSupplierName(importForm.getRecords()[i][15]); } if(importForm.getRecords()[i][16] != null) { product.setSupplierItemCode(importForm.getRecords()[i][16]); } if(importForm.getRecords()[i][17] != null) { product.setManufacturerId(importForm.getRecords()[i][17]); } if(importForm.getRecords()[i][18] != null) { product.setManufacturerName(importForm.getRecords()[i][18]); } if(importForm.getRecords()[i][19] != null) { product.setManufacturerItemCode(importForm.getRecords()[i][19]); } if(importForm.getRecords()[i][20] != null) { product.setTitle1(importForm.getRecords()[i][20]); } if(importForm.getRecords()[i][21] != null) { product.setTitle2(importForm.getRecords()[i][21]); } if(importForm.getRecords()[i][22] != null) { product.setTitle3(importForm.getRecords()[i][22]); } if(importForm.getRecords()[i][23] != null) { product.setTitle4(importForm.getRecords()[i][23]); } if(importForm.getRecords()[i][24] != null) { product.setSlogan1(importForm.getRecords()[i][24]); } if(importForm.getRecords()[i][25] != null) { product.setSlogan2(importForm.getRecords()[i][25]); } if(importForm.getRecords()[i][26] != null) { product.setSlogan3(importForm.getRecords()[i][26]); } if(importForm.getRecords()[i][27] != null) { product.setSlogan4(importForm.getRecords()[i][27]); } if(importForm.getRecords()[i][28] != null) { product.setTextInfo1(importForm.getRecords()[i][28]); } if(importForm.getRecords()[i][29] != null) { product.setTextInfo2(importForm.getRecords()[i][29]); } if(importForm.getRecords()[i][30] != null) { product.setTextInfo3(importForm.getRecords()[i][30]); } if(importForm.getRecords()[i][31] != null) { product.setTextInfo4(importForm.getRecords()[i][31]); } if(importForm.getRecords()[i][93] != null) { inventory.setInventoryName(importForm.getRecords()[i][93]); } if(importForm.getRecords()[i][94] != null) { inventory.setSection(importForm.getRecords()[i][94]); } if(importForm.getRecords()[i][95] != null) { inventory.setShelf(importForm.getRecords()[i][95]); } if(importForm.getRecords()[i][96] != null) { String inStockStr = importForm.getRecords()[i][96]; inventory.setAmount( inStockStr.length() == 0 ? null : new Integer(inStockStr) ); } if(importForm.getRecords()[i][97] != null) { try { inventory.setAlarmLimit(Integer.parseInt(importForm.getRecords()[i][97])); } catch(NumberFormatException ex) {} } if(importForm.getRecords()[i][98] != null) { inventory.setAlarmText(importForm.getRecords()[i][98]); } if(importForm.getRecords()[i][99] != null) { try { product.setAmountFactor(Integer.parseInt(importForm.getRecords()[i][99])); } catch(NumberFormatException ex) {} }
product.setInventory(inventory); product.setLastModified(new java.util.Date()); } catch(Exception e) { String msg = "Error: "; logger.error(msg, e); throw new RuntimeException(msg, e); } } private void addQuantityPriceRule(String ruleString, Product product) throws ParseException, NumberFormatException { List rules = product.getQuantityPricingRules(); QuantityPricingRule quantityRule = null; PriceRule rule = null; String[] rulesTable = Utils.split(ruleString, ","); for(int j = 0; j < rulesTable.length; ++j) { if(!rulesTable[j].equals("")) { rule = new PriceRule(); quantityRule = new QuantityPricingRule(); //split rule String[] tmp = Utils.split(rulesTable[j], ":"); rule.setRule(tmp[1]); quantityRule.setThreshold(Integer.parseInt(tmp[0])); quantityRule.setPriceRule(rule); if(rules == null) rules = new LinkedList(); rules.add(quantityRule); product.setQuantityPricingRules(rules); } } } private boolean addOptions(String optionString, Product product) {
Vector<ProductOption> vector = new Vector<ProductOption>(); if(optionString == null || optionString.equals("")) return false; try { ProductOption productOption = null; ProductOptionChoice productOptionChoice = null; //väri:punainen,+10,option-1,2##sininen,+12,option-2,10##$$paino:kevyt,-13,option-3,20##raskas,+13,option-4,30##$$ String[] optionsTable = Utils.split(optionString, "$$"); for(int j = 0; j < optionsTable.length; ++j) { if(!optionsTable[j].equals("")) { productOption = new ProductOption(); String[] optionValues = Utils.split(optionsTable[j], ":"); //In case : or , or ## used in name. //if product options contain encoded separator chars, decode them. productOption.setName((optionValues[0].replaceAll("õ", ":")).replaceAll( "¸", ",").replaceAll("É", "##")); String[] optionChoices = Utils.split(optionValues[1], "##"); // Go through all product option choices for(int u = 0; u < optionChoices.length; ++u) { if(!optionChoices[u].equals("")) { String[] choiceValues = Utils.split(optionChoices[u], ","); productOptionChoice = new ProductOptionChoice(); // Set value for option productOptionChoice .setValue((choiceValues[0].replaceAll("¸", ",")).replaceAll( "õ", ":").replaceAll("É", "##")); // Set pricerule for option productOptionChoice.setPriceChange(new PriceRule(choiceValues[1])); // Set itemcode for option productOptionChoice.setItemCodeChange((choiceValues[2].replaceAll( "¸", ",")).replaceAll("õ", ":").replaceAll("É", "##")); // Set amount if included into csv-file setOptionChoiceAmount(choiceValues, productOptionChoice); productOption.addChoice(productOptionChoice); }
} vector.addElement(productOption); }
}
} catch(Exception e) { return false; } while(!vector.isEmpty()) { Object object = vector.firstElement(); product.addOption((ProductOption) object); vector.remove(object); }
return true; } private void setOptionChoiceAmount(String[] choiceValues, ProductOptionChoice productOptionChoice) { // If amount of product option choice set in csv file if(choiceValues.length == 4){ try{ int amount = Integer.valueOf(choiceValues[3]).intValue(); productOptionChoice.setOptionAmount(amount); }catch(NumberFormatException nfe) { logger.error("ProductOptionChoice amount found in csv-file is not correct integer value.", nfe); } } } }
|
|