Rules para eliminar

Representan EJB, que se utilizan para validar las operaciones tales como las eliminaciones.

MongoDB no soporta el concepto de integridad referencial, por lo cual recurrimos a Rules para implementar estas validaciones.

Se usaran en los Controller en el método delete.

Como implementarlo:

  • Buscar todos los @Referenced donde se haga uso de el.

  • Injectarlo y validar si no tiene registros mediante un count()

  • Retorna true si es posible eliminarlo, no tiene ninguna colección dependiente.

En este ejemplo:

No se puede eliminar un articulo , si existe en la coleccion Inventario o Facturadetalle u Ordendetalle.

ArticuloRules.java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.avbravo.storeejb.rules;

import com.avbravo.avbravoutils.JsfUtil;
import com.avbravo.storeejb.entity.*;
import com.avbravo.storeejb.repository.FacturadetalleRepository;
import com.avbravo.storeejb.repository.InventarioRepository;
import com.avbravo.storeejb.repository.OrdendetalleRepository;
import javax.ejb.Stateless;
import javax.inject.Inject;
import org.bson.Document;

/**
 *
 * @authoravbravo
 */
@Stateless
public class ArticuloRules {

    @Inject
    FacturadetalleRepository facturadetalleRepository;
    @Inject
    InventarioRepository inventarioRepository;
    @Inject
    OrdendetalleRepository ordendetalleRepository;

    // <editor-fold defaultstate="collapsed" desc="isDeleted(Articulo articulo)">
    public Boolean isDeleted(Articulo articulo) {
        Boolean found = false;
        try {
            Integer count;
            Document doc = new Document("articulo.idarticulo", articulo.getIdarticulo());
            count = facturadetalleRepository.count(doc);
            if (count > 0) {
                return false;
            }
            count = inventarioRepository.count(doc);
            if (count > 0) {
                return false;
            }
            count = ordendetalleRepository.count(doc);
            if (count > 0) {
                return false;
            }

        } catch (Exception e) {
            JsfUtil.errorMessage("isDeleted() " + e.getLocalizedMessage());
        }
        return true;
    }
    // </editor-fold>

}

ArticuloController.java

Inyectar

 //Rules
    ArticuloRules articuloRules;

Método delete

Validar que se pueda eliminar

if (!articuloRules.isDeleted(articulo)) {
JsfUtil.warningDialog("Delete", rf.getAppMessage("waring.integridadreferencialnopermitida"));
return "";
}

Segmento de código del método delete()

@Override
    public String delete(Object item, Boolean deleteonviewpage) {
        String path = "";
        try {
            articulo = (Articulo) item;

               if (!articuloRules.isDeleted(articulo)) {
                JsfUtil.warningDialog("Delete", rf.getAppMessage("waring.integridadreferencialnopermitida"));
                return "";
            }
            articuloSelected = articulo;
            if (articuloRepository.delete("idarticulo", articulo.getIdarticulo())) {
                revisionHistoryStoreejbRepository.save(revisionHistoryServices.getRevisionHistory(articulo.getIdarticulo().toString(), loginController.getUsername(), "delete", "articulo", articuloRepository.toDocument(articulo).toString()));
                JsfUtil.successMessage(rf.getAppMessage("info.delete"));

                if (!deleteonviewpage) {
                    articuloList.remove(articulo);
                    articuloFiltered = articuloList;
                    articuloDataModel = new ArticuloDataModel(articuloList);

                    FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pagearticulo", page.toString());

                } else {
                    articulo = new Articulo();
                    articuloSelected = new Articulo();
                    writable = false;

                }

            }

        } catch (Exception e) {
            JsfUtil.errorMessage("delete() " + e.getLocalizedMessage());
        }
        // path = deleteonviewpage ? "/pages/articulo/list.xhtml" : "";
        path = "";
        return path;
    }// </editor-fold>

Nota:

Una forma rápida para localizar los entitys a incluir en Rules es usando NetBeans IDE y ejecutando una búsqueda en el proyecto:

@Referenced(documment = "Articulo"

Nos muestra los entitys que dependen de el

Last updated

Was this helpful?