Está en la página 1de 4

User

Ayudame con el siguiente codigo, no se rehace "/*


* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to
change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this
template
*/
package co.edu.unicauca.openmarket.presentation.commands;

import co.edu.unicauca.openmarket.domain.Product;
import co.edu.unicauca.openmarket.domain.service.ProductService;
import java.util.List;

/**
*
* @author ahurtado
*/
public class OMEditProductCommand extends OMCommand {

private Product editedProduct;


private ProductService productService;
private Long productId;
private Product oldProduct;
boolean result=false;

public OMEditProductCommand(Long productId, Product editedProduct,


ProductService productService){
this.productId = productId;
this.editedProduct = editedProduct;
this.productService = productService;
}

@Override
public void make() {
oldProduct = productService.findProductById(productId);
result = productService.editProduct(productId, editedProduct);
}

@Override
public void unmake() {
result = productService.editProduct(productId, oldProduct);
}

public boolean getResult(){


return result;
}

@Override
public void remake() {
make();
}

}
"
ChatGPT
El código que compartiste es una clase llamada OMEditProductCommand que extiende de
la clase OMCommand. Esta clase se encarga de editar un producto en el sistema.
Aquí tienes una explicación del código:

La clase tiene los siguientes atributos:

editedProduct: representa el producto editado.


productService: es una instancia de la clase ProductService que se utiliza para
interactuar con la capa de servicios relacionada con los productos.
productId: es el identificador del producto que se va a editar.
oldProduct: representa el producto original antes de ser editado.
result: indica si la operación de edición se realizó con éxito.
El constructor de la clase recibe el productId, el editedProduct y el
productService como parámetros, y asigna los valores correspondientes a los
atributos de la clase.

El método make() se encarga de realizar la edición del producto. Primero, guarda el


producto original en oldProduct mediante la llamada al método findProductById() del
productService. Luego, realiza la edición del producto mediante la llamada al
método editProduct() del productService, pasando el productId y el editedProduct.
El resultado de la operación se guarda en el atributo result.

El método unmake() se encarga de deshacer la edición realizada. Para ello, llama al


método editProduct() del productService, pasando el productId y el oldProduct (el
producto original). El resultado de la operación se guarda en el atributo result.

El método remake() simplemente llama al método make(), lo cual vuelve a realizar la


edición del producto.

El método getResult() devuelve el valor del atributo result, que indica si la


operación de edición se realizó con éxito.

En resumen, esta clase representa un comando para editar un producto en el sistema.


Utiliza un servicio de productos (ProductService) para realizar la edición y
permite deshacer y rehacer la operación. El resultado de la operación se puede
obtener mediante el método getResult().

User
El remake no me guarda los estados anteriores y eso no me deja rehacer ni deshacer,
arreglalo
ChatGPT
Para que el método remake() pueda rehacer correctamente la edición del producto,
debemos asegurarnos de guardar el estado anterior (oldProduct) antes de realizar la
edición en el método make(). Aquí tienes el código actualizado con esa
modificación:

java
Copy code
public class OMEditProductCommand extends OMCommand {

private Product editedProduct;


private ProductService productService;
private Long productId;
private Product oldProduct;
private boolean result = false;

public OMEditProductCommand(Long productId, Product editedProduct,


ProductService productService) {
this.productId = productId;
this.editedProduct = editedProduct;
this.productService = productService;
}

@Override
public void make() {
oldProduct = productService.findProductById(productId); // Guardar el
estado anterior
result = productService.editProduct(productId, editedProduct);
}

@Override
public void unmake() {
result = productService.editProduct(productId, oldProduct);
}

public boolean getResult() {


return result;
}

@Override
public void remake() {
if (oldProduct != null) {
result = productService.editProduct(productId, editedProduct);
}
}
}
En el método remake(), verificamos que oldProduct no sea nulo antes de realizar la
edición del producto. Si oldProduct es nulo, significa que no se ha realizado
ninguna operación anteriormente y no hay nada que rehacer.

Con esta modificación, al llamar al método remake(), se volverá a realizar la


edición del producto utilizando el editedProduct y se actualizará el estado de
result.

User
creo que el problema esta ahi "v"
ChatGPT

3 / 3

Mis disculpas por la confusión anterior. Si el problema radica en que el método


remake() no está guardando correctamente el estado anterior,

User
El problema esta aqui "
@Override
public void unmake() {
result = productService.editProduct(productId, oldProduct);
}"
ChatGPT
Tienes razón, el problema se encuentra en el método unmake() en la línea que
mencionaste. En el código actual, se está llamando al método editProduct() del
productService pasando oldProduct como argumento. Sin embargo, esto no es correcto,
ya que el método editProduct() espera recibir un objeto Product, no un Product y el
productId.

Para corregirlo, necesitas modificar el método unmake() para pasar únicamente el


objeto oldProduct al método editProduct(). Aquí está la corrección:

java
Copy code
@Override
public void unmake() {
result = productService.editProduct(oldProduct.getId(), oldProduct);
}
En este caso, asumimos que la clase Product tiene un método getId() que devuelve el
identificador del producto.

Con esta modificación, el método unmake() utilizará el objeto oldProduct para


revertir la edición y se actualizará correctamente el estado de result.

También podría gustarte