/** * @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; }