/**
   * Show components selection page TODO: form validation
   *
   * @param name
   * @param mv
   * @return
   */
  @RequestMapping(value = "/components.html", method = RequestMethod.GET)
  public ModelAndView componentsManageView(@RequestParam("name") String name, ModelAndView mv) {

    Product managedProduct = new Product();
    managedProduct.setName(name);
    Collection<Component> managedProductComponents =
        productsService.getProductComponents(managedProduct);
    Map<String, Integer> componentsAmountMap = new HashMap<String, Integer>();
    for (Component component : managedProductComponents) {
      componentsAmountMap.put(component.getComponent().getName(), component.getAmount());
    }
    // According to code allProducts instance is used only here
    Collection<Product> allProducts = productsService.getAllProducts();

    ProductComponents productComponents = new ProductComponents();
    productComponents.setProductName(name);

    // Iterate through available products end initialise amount for those which are already
    // components of chosen product
    List<Component> componentsList = productComponents.getComponents();
    for (Product product : allProducts) {
      Component component = new Component();
      component.setComponent(product);
      Integer amount = componentsAmountMap.get(product.getName());
      if (amount != null) {
        component.setAmount(amount);
      } else {
        component.setAmount(0);
      }
      componentsList.add(component);
    }
    // Product name
    mv.addObject("name", name);
    mv.addObject("componentsCommand", productComponents);
    mv.setViewName("componentsManage");
    return mv;
  }