All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 evaluationRendered, Class 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 - 2024 Weber Informatics LLC | Privacy Policy