@Override
  public Map<TipoProducto, ArrayList<LinkedHashMap<Marca, Long>>>
      getTiposProductoAndMarcasAndProductoCount() {
    List<Object[]> resultList = tipoProductoDao.getTiposProductoAndMarcasAndProductoCount();

    Map<TipoProducto, ArrayList<LinkedHashMap<Marca, Long>>> resultMap =
        new LinkedHashMap<TipoProducto, ArrayList<LinkedHashMap<Marca, Long>>>();
    for (Object[] resultObject : resultList) {
      TipoProducto tipoProducto = (TipoProducto) resultObject[0];
      Marca marca = (Marca) resultObject[1];
      Long productoCount = (Long) resultObject[2];

      ArrayList<LinkedHashMap<Marca, Long>> arrayList;
      if (!resultMap.containsKey(tipoProducto)) {
        arrayList = new ArrayList<LinkedHashMap<Marca, Long>>();
      } else {
        arrayList = resultMap.get(tipoProducto);
      }

      LinkedHashMap<Marca, Long> hashMap = new LinkedHashMap<Marca, Long>();
      hashMap.put(marca, productoCount);
      arrayList.add(hashMap);

      if (!resultMap.containsKey(tipoProducto)) {
        resultMap.put(tipoProducto, arrayList);
      }
    }
    return resultMap;
  }
  @Override
  public void updateTipoProducto(Integer tipoProductoId, String nombre, boolean presentable) {
    Assert.notNull(tipoProductoId, "tipoProductoId cannot be null");
    Assert.notNull(nombre, "Nombre cannot be null");

    TipoProducto tipoProducto = getTipoProductoById(tipoProductoId);
    if (!StringUtils.equals(nombre, tipoProducto.getNombre())) {
      tipoProducto.setNombre(nombre);
    }
    tipoProducto.setPresentable(presentable);
    tipoProductoDao.edit(tipoProducto);
  }
 @Override
 public List<TipoProducto> getRootsTipoProducto() {
   return tipoProductoDao.query("Childless");
 }
 @Override
 public List<TipoProducto> getAllTipoProducto() {
   return tipoProductoDao.findAll();
 }
 @Override
 public TipoProducto getTipoProductoByNombre(String nombre) throws NoResultException {
   return tipoProductoDao.findBy("Nombre", "nombre", nombre);
 }
 @Override
 public TipoProducto getTipoProductoById(Integer tipoProductoId) {
   return tipoProductoDao.find(tipoProductoId);
 }
 @Override
 public void deleteTipoProducto(Integer tipoProductoId) {
   TipoProducto tipoProducto = getTipoProductoById(tipoProductoId);
   tipoProductoDao.destroy(tipoProducto);
 }
 @Override
 public void createNewTipoProducto(String nombre, boolean presentable) {
   Assert.notNull(nombre, "Nombre cannot be null");
   TipoProducto tipoProducto = new TipoProducto(nombre, presentable);
   tipoProductoDao.create(tipoProducto);
 }