
br.com.jarch.faces.controller.ItemMenuFactory Maven / Gradle / Ivy
package br.com.jarch.faces.controller;
import br.com.jarch.core.annotation.*;
import br.com.jarch.core.model.ItemMenuArch;
import br.com.jarch.core.model.type.ActionCrudType;
import br.com.jarch.core.util.BundleUtils;
import br.com.jarch.util.LogUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class ItemMenuFactory {
public static > List createMenuFromListAction(A listaAction) {
JArchListController listActionConfiguration = null;
if (listaAction != null) {
listActionConfiguration = listaAction.getClass().getAnnotation(JArchListController.class);
}
List menuActions = new ArrayList<>();
addMenuInsert(listActionConfiguration, menuActions);
addMenuClone(listActionConfiguration, menuActions);
addMenuChange(listActionConfiguration, menuActions);
addMenuConsult(listActionConfiguration, menuActions);
addMenuDelete(listActionConfiguration, menuActions);
addMenuPrint(listActionConfiguration, menuActions);
if (listaAction != null) {
addMenusDynamicAction(listaAction, menuActions);
addMenusDynamicDownload(listaAction, menuActions);
}
return menuActions;
}
private static void addMenuInsert(JArchListController anotacao, List menuActions) {
if (anotacao != null
&& !anotacao.allowInsert()) {
return;
}
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle("label.incluir"));
item.setId(ActionCrudType.INSERT.getId());
item.setIcon("fa fa-plus-circle");
item.setAction("callInsert");
item.setInsert(true);
item.setDisabled(false);
item.setRendered(true);
menuActions.add(item);
}
private static void addMenuClone(JArchListController anotacao, List menuActions) {
if (anotacao != null && !anotacao.allowClone()) {
return;
}
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle("label.clonar"));
item.setOrder(-4);
item.setId(ActionCrudType.CLONE.getId());
item.setIcon("fa fa-copy");
item.setAction("callClone");
item.setClone(true);
item.setDisabled(false);
item.setRendered(true);
menuActions.add(item);
}
private static void addMenuChange(JArchListController anotacao, List menuActions) {
if (anotacao != null && !anotacao.allowChange()) {
return;
}
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle("label.alterar"));
item.setOrder(-3);
item.setId(ActionCrudType.CHANGE.getId());
item.setIcon("fa fa-pencil-square-o");
item.setAction("callChange");
item.setChange(true);
item.setDisabled(false);
item.setRendered(true);
menuActions.add(item);
}
private static void addMenuConsult(JArchListController anotacao, List menuActions) {
if (anotacao != null && !anotacao.allowConsult()) {
return;
}
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle("label.consultar"));
item.setOrder(-2);
item.setId(ActionCrudType.CONSULT.getId());
item.setIcon("fa fa-search-plus");
item.setAction("callConsult");
item.setConsult(true);
item.setDisabled(false);
item.setRendered(true);
menuActions.add(item);
}
private static void addMenuDelete(JArchListController anotacao, List menuActions) {
if (anotacao != null && !anotacao.allowDelete()) {
return;
}
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle("label.excluir"));
item.setOrder(-1);
item.setId(ActionCrudType.DELETE.getId());
item.setIcon("fa fa-trash-o");
item.setAction("callDelete");
item.setDelete(true);
item.setDisabled(false);
item.setRendered(true);
menuActions.add(item);
}
private static void addMenuPrint(JArchListController anotacao, List menuActions) {
if (anotacao != null
&& !anotacao.allowPrint()) {
return;
}
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle("label.imprimir"));
item.setId(ActionCrudType.PRINT.getId());
item.setIcon("fa fa-print");
item.setAction("exportPdf");
item.setPrint(true);
item.setDisabled(false);
item.setRendered(true);
menuActions.add(item);
}
private static > void addMenusDynamicAction(A listaAction, List menuAcoes) {
Arrays
.stream(listaAction.getClass().getAnnotationsByType(JArchDynamicShowDataController.class))
.forEach(a -> menuAcoes.add(addMenusDynamicShowDataAction(a)));
Arrays
.stream(listaAction.getClass().getMethods())
.filter(m -> m.getAnnotation(JArchDynamicDirectController.class) != null)
.forEach(m -> menuAcoes.add(addMenusDynamicDirectAction(m.getAnnotation(JArchDynamicDirectController.class), m.getName())));
}
private static ItemMenuArch addMenusDynamicShowDataAction(JArchDynamicShowDataController annotation) {
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle(annotation.labelMenu()));
item.setValueDontSaveTask(annotation.labelButtonDontEndTask());
item.setOrder(annotation.order());
item.setId(annotation.id());
item.setIcon(annotation.icon());
item.setAction("callActionDynamic");
item.setDynamicWithData(true);
item.setRendered(true);
item.setDisabled(false);
item.setElRendered(annotation.elRendered());
item.setElDisabled(annotation.elDisabled());
item.setConfirmation(annotation.confirmation());
item.setHeaderConfirmation(BundleUtils.messageBundle(annotation.headerConfirmation()));
item.setMessageConfirmation(BundleUtils.messageBundle(annotation.messageConfirmation()));
addInstanceEvaluateRenderedDisabled(item, annotation.evaluateRendered(), annotation.evaluateDisabled());
return item;
}
private static ItemMenuArch addMenusDynamicDirectAction(JArchDynamicDirectController annotation, String nameMethod) {
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle(annotation.labelMenu()));
item.setOrder(annotation.order());
item.setId(annotation.id());
item.setIcon(annotation.icon());
item.setAction(nameMethod);
item.setDynamicNoData(true);
item.setRendered(true);
item.setDisabled(false);
item.setElRendered(annotation.elRendered());
item.setElDisabled(annotation.elDisabled());
item.setConfirmation(annotation.confirmation());
item.setHeaderConfirmation(BundleUtils.messageBundle(annotation.headerConfirmation()));
item.setMessageConfirmation(BundleUtils.messageBundle(annotation.messageConfirmation()));
item.setShowMessageSuccess(annotation.showMessageSuccess());
addInstanceEvaluateRenderedDisabled(item, annotation.evaluateRendered(), annotation.evaluateDisabled());
return item;
}
private static List listItemMenuFromAnnotationDataDetail(Field f) {
List listMenu = Arrays
.stream(f.getAnnotationsByType(JArchDynamicDetailShowDataController.class))
.map(a -> {
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle(a.labelMenu()));
item.setOrder(a.order());
item.setId(a.id());
item.setIcon(a.icon());
item.setAction(a.methodName());
item.setDynamicWithData(true);
item.setRendered(true);
item.setDisabled(false);
item.setElRendered(a.elRendered());
item.setElDisabled(a.elDisabled());
addInstanceEvaluateRenderedDisabled(item, a.evaluateRendered(), a.evaluateDisabled());
return item;
})
.collect(Collectors.toList());
listMenu.addAll(
Arrays
.stream(f.getAnnotationsByType(JArchDynamicDetailDirectController.class))
.map(a -> {
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle(a.labelMenu()));
item.setOrder(a.order());
item.setId(a.id());
item.setIcon(a.icon());
item.setAction(a.methodName());
item.setDynamicNoData(true);
item.setRendered(true);
item.setDisabled(false);
item.setElRendered(a.elRendered());
item.setElDisabled(a.elDisabled());
addInstanceEvaluateRenderedDisabled(item, a.evaluateRendered(), a.evaluateDisabled());
return item;
})
.collect(Collectors.toList()));
listMenu.addAll(
Arrays
.stream(f.getAnnotationsByType(JArchDynamicDetailDownload.class))
.map(a -> {
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle(a.labelMenu()));
item.setOrder(a.order());
item.setId(a.id());
item.setIcon(a.icon());
item.setAction(a.methodName());
item.setDynamicDownload(true);
item.setRendered(true);
item.setDisabled(false);
item.setElRendered(a.elRendered());
item.setElDisabled(a.elDisabled());
addInstanceEvaluateRenderedDisabled(item, a.evaluateRendered(), a.evaluateDisabled());
return item;
})
.collect(Collectors.toList()));
return listMenu;
}
private static void addMenusDynamicDownload(T listAction, List menuAcoes) {
Arrays
.stream(listAction.getClass().getMethods())
.filter(m -> m.getAnnotation(JArchDynamicDownload.class) != null)
.forEach(m -> menuAcoes.add(addMenuDynamicDownload(m)));
}
private static ItemMenuArch addMenuDynamicDownload(Method m) {
JArchDynamicDownload annotation = m.getAnnotation(JArchDynamicDownload.class);
ItemMenuArch item = new ItemMenuArch(BundleUtils.messageBundle(annotation.labelMenu()));
item.setOrder(annotation.order());
item.setId(annotation.id());
item.setIcon(annotation.icon());
item.setAction(m.getName());
item.setDynamicDownload(true);
item.setRendered(true);
item.setDisabled(false);
item.setElRendered(annotation.elRendered());
item.setElDisabled(annotation.elDisabled());
addInstanceEvaluateRenderedDisabled(item, annotation.evaluateRendered(), annotation.evaluateDisabled());
return item;
}
private static void addInstanceEvaluateRenderedDisabled(ItemMenuArch itemMenuArch, Class extends Predicate> evaluationRendered, Class extends Predicate> evaluationDisabled) {
try {
if (!evaluationRendered.isInterface()) {
itemMenuArch.setEvaluationRendered(evaluationRendered.getDeclaredConstructor().newInstance());
}
} catch (Exception ex) {
LogUtils.generate(ex);
}
try {
if (!evaluationDisabled.isInterface()) {
itemMenuArch.setEvaluationDisabled(evaluationDisabled.getDeclaredConstructor().newInstance());
}
} catch (Exception ex) {
LogUtils.generate(ex);
}
}
public static List createMenuFromField(Field field) {
return listItemMenuFromAnnotationDataDetail(field);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy