Esempio n. 1
0
  /**
   * @param productoBase
   * @param idTp
   * @return Producto
   * @throws Exception
   */
  @SuppressWarnings("rawtypes")
  public Producto crearProducto(Producto productoBase, int idTp) throws Exception {
    Set<Caracteristica> caracteristicas = productoBase.getCaracteristicas();
    Set<Caracteristica> caracteristicasCopia = new HashSet<Caracteristica>();
    Integer[] ids = new Integer[caracteristicas.size()];
    int i = 0;
    String[] codigoArr = new String[NUMERO_FILAS_CODIGO];
    String descripcion = "";
    for (Caracteristica cara : caracteristicas) {
      ids[i] = cara.getIdCaracteristica();
      caracteristicasCopia.add(cara);
      i++;
    }

    List posiciones = (new ProductoHome()).darPosicionesCreacion(idTp, ids);

    for (i = 0; i < NUMERO_FILAS_CODIGO; i++) codigoArr[i] = "0";
    for (i = 0; i < posiciones.size(); i++) {
      Object[] objPosicion = (Object[]) posiciones.get(i);
      Integer idCaraPos = (Integer) objPosicion[0];
      int posCreacion = ((Integer) objPosicion[2]).intValue() - 1;
      boolean termino = false;
      Iterator<Caracteristica> iteraCara = caracteristicasCopia.iterator();
      while (!termino && iteraCara.hasNext()) {
        Caracteristica cara = iteraCara.next();
        if (idCaraPos.intValue() == cara.getIdCaracteristica().intValue()) {
          if (cara.getNombre().equals(Caracteristica.NOMBRE_NUDOS)) {
            caracteristicasCopia.remove(cara);
            termino = true;
          } else if (cara.getNombre().equals(Caracteristica.NOMBRE_CALIBRE_PUAS)
              || cara.getNombre().equals(Caracteristica.NOMBRE_OPCION_PRODUCTO)) {
            if (posCreacion != -1) {
              String[] cantidadArr = cara.getCantidad().split("");
              for (String cantidadIndivi : cantidadArr) {
                codigoArr[posCreacion] = cantidadIndivi;
                posCreacion++;
              }

              caracteristicasCopia.remove(cara);
              termino = true;
            }
          } else {
            if (i == 0) descripcion = cara.getDescripcionCreacion() + " ";
            else if (i == posiciones.size() - 1)
              descripcion = descripcion + cara.getDescripcionCreacion();
            else descripcion = descripcion + cara.getDescripcionCreacion() + " ";

            if (posCreacion != -1) {
              String[] cantidadArr = cara.getCantidad().split("");
              for (String cantidadIndivi : cantidadArr) {
                codigoArr[posCreacion] = cantidadIndivi;
                posCreacion++;
              }
            }
            caracteristicasCopia.remove(cara);
            termino = true;
          }
        }
      }
    }
    StringBuilder builder = new StringBuilder();
    i = 0;
    for (String s : codigoArr) {
      if (i == 3 || i == 10) builder.append(s + "-");
      else builder.append(s);
      i++;
    }
    String codigo = builder.toString();
    System.out.println("Codigo: " + codigo);
    System.out.println("Descripcion: " + descripcion);
    Producto productoAgregar =
        new Producto(descripcion, codigo, productoBase.getTipoProductoNombre(), 0);

    ProductoHome productoHome = new ProductoHome();
    productoHome.persist(productoAgregar);

    productoAgregar = productoHome.darProductoPorCodigo(productoAgregar.getCodigo());

    if (productoAgregar == null) throw new Exception("No se pudo crear el producto.");
    else
      (new CaracteristicaHome())
          .cargarCaracteristicasAProductoNuevo(productoAgregar, productoBase.getCaracteristicas());

    return productoAgregar;
  }