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