Invocar metodos desde un controller

  • usados con jmoordbjsf

  • muestra todos los métodos de un controller

  • invoca un metodo de un controller que se ha pasado

  • Creamos una instancia del entity pasado como parametro

Object b = entity.getClass().newInstance();

Invocamos el metodo

userInfoSetter .accept(lcontroller, value);
            <jmoordbjsf:toolbarsave
                            rendered="#{rolController.writable and applicationMenu.rol.create}"
                            controller="#{rolController}"
                            entity="#{rolController.rol}"
                            repository="#{rolController.rolRepository}"
                            />
 default public String save() {
        Boolean saved = false;
        try {
            //Se cargan en el LoginController
            ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
            Map<String, Object> sessionMap = externalContext.getSessionMap();
            String username = (String) sessionMap.get("username");
            Repository repositoryRevisionHistory = (Repository) sessionMap.get("repositoryRevisionHistory");
            RevisionHistoryServices revisionHistoryServices = (RevisionHistoryServices) sessionMap.get("revisionHistoryServices");
            Boolean saverevision = (Boolean) sessionMap.get("saverevision");

            Boolean languaguespanish = (Boolean) sessionMap.get("languaguespanish");
            Boolean spanish = true;
            if (languaguespanish == null) {
                JmoordbUtil.warningMessage("Configure el parametro {languaguespanish} en el ExternalContext de la clase principal");
            } else {
                spanish = languaguespanish;
            }

            if (saverevision == null) {
                JmoordbUtil.warningMessage(spanish ? "Configure el parametro {saverevision} en el ExternalContext de la clase principal" : "Configure the {saverevision} parameter in the ExternalContext of the main class");
                saverevision = false;
            }

            //Los pasa el usuaario
            Repository repository = (Repository) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("repository");
            Object entity = (Object) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("entity");
            Object controller = (Object) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("controller");
//            String primarykeyvalue = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("primarykeyvalue");
            Boolean searchbyfieldsecond = (Boolean) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("searchbyfieldsecond");

            if (searchbyfieldsecond) {
                //Busca por llave secundaria
                Optional<Object> optional = repository.findBySecondaryKey(entity);
                if (optional.isPresent()) {
                    JmoordbUtil.warningMessage(spanish ? "Existe un documento con esos datos" : "There is a document with this data");
                    return "";
                }

            } else {
                //Busca por llave primaria
                Optional<Object> optional = repository.findById(entity);
                if (optional.isPresent()) {
                    JmoordbUtil.warningMessage(spanish ? "Existe un documento con esos datos" : "There is a document with this data");
                    return "";
                }
            }

            //Agregar el UserInfo al entity
              entity =repository.addUserInfoForSaveMethod(entity,username,"create");

            if (!beforeSave()) {
                return "";
            }
            if (repository.save(entity)) {
                //Devuelve el valor de la llave primaria
                String primarykeyvalue = repository.primaryKeyValue(entity);

                if (saverevision) {
                    String nameOfEntity = JmoordbUtil.nombreEntity(entity.getClass().getName());
                    if (_validRevisionHistory(repositoryRevisionHistory, revisionHistoryServices, spanish)) {
                        repositoryRevisionHistory.save(revisionHistoryServices.getRevisionHistory(primarykeyvalue, username,
                                "create", nameOfEntity, repository.toDocument(entity).toString()));
                    }

                }


                System.out.println("-----=getClass() "+entity.getClass());
//                entity = new entity.getClass();
               // Class  e2 = new entity.getClass();

                 Object b =  entity.getClass().newInstance();

                 _Controller(controller, entity,b);
                _show();
                   JmoordbUtil.successMessage(spanish ? "Guardado" : "Saved");
                reset();
            } else {
                JmoordbUtil.errorMessage(nameOfMethod()+ " "+   repository.getException().toString());
            }
            saved = true;

        } catch (Exception ex) {

            JmoordbUtil.errorMessage(nameOfMethod()+ " "+ ex.getLocalizedMessage());
        }

        afterSave(saved);

        return "";

    }// </editor-fold>
default  public void _Controller(Object lcontroller,Object entity,Object value ) {
        try {
            PropertyDescriptor userInfoProperty;
            final BeanInfo beanInfo = Introspector.getBeanInfo(lcontroller.getClass());
            final java.util.function.Function<String, PropertyDescriptor> property = name -> Stream.of(beanInfo.getPropertyDescriptors())
                    .filter(p -> name.equals(p.getName()))
                    .findFirst()
                    .orElseThrow(() -> new IllegalStateException("Not found: " + name));
            //Si tiene el userInfo
          userInfoProperty = property.apply("rol");
            Boolean found = false;
            System.out.println("------------MOSTRAR TODOS LOS METODOS DEL -CONTROLLER----------------");
            for (MethodDescriptor m : beanInfo.getMethodDescriptors()) {
                System.out.println("metodos "+m.getName());
//                if (m.getMethod().getName().contains("setUserInfo")) {
//                    found = true;
//                    break;
//                }
            }
//            if (found) {
//                //Definimos el metodo setUserInfo(List<UserInfo> userInfo)
                final MethodHandles.Lookup lookup = MethodHandles.lookup();
                final BiConsumer userInfoSetter = JmoordbLambdaMetaFactory.createSetter(lookup,
                       lookup.unreflect(userInfoProperty.getWriteMethod()));
                 userInfoSetter .accept(lcontroller, value);
//            } else {
//                JmoordbUtil.warningMessage("No contiene el metodo UserInfo");
//            }

        } catch (Exception e) {
            Logger.getLogger(Repository.class.getName() + "_Controller").log(Level.SEVERE, null, e);
            System.out.println("error "+e.getLocalizedMessage());
        }
        return ;
    }

Last updated