sah4ez/erp_vaadin_framework

View on GitHub
core/src/main/java/com/github/sah4ez/core/elements/MenuNavigator.java

Summary

Maintainability
A
3 hrs
Test Coverage
package com.github.sah4ez.core.elements;

import com.github.sah4ez.core.permission.ModifierAccess;
import com.github.sah4ez.core.permission.PermissionAccess;
import com.github.sah4ez.core.permission.PermissionAccessUI;
import com.vaadin.server.ThemeResource;
import com.vaadin.ui.MenuBar;

/**
 * Created by aleksandr on 20.12.16.
 */
abstract public class MenuNavigator extends MenuBar implements PermissionAccessUI {

    private String identify = "";

    private ModifierAccess permissionAccess = ModifierAccess.HIDE;

    private MenuItem add;
    private MenuItem delete;
    private MenuItem print;
    private MenuItem filter;

    public static final String ENABLE_BUTTON_STYLE ="highlight";

    private Workspace parent;

    public MenuNavigator(String caption, Workspace parent, String identify) {
        this.parent = parent;
        setIdentify(identify);
        setWidth("100%");
        Command addCommand = menuItem -> add();

        Command deleteCommand = menuItem -> delete();

        Command printCommand = menuItem -> print();

        Command filterCommand = menuItem -> filter();

        add = this.addItem("add" + caption, new ThemeResource("ico16/add.png"), addCommand);
        add.setDescription("Добавить");

        delete = this.addItem("delete" + caption, new ThemeResource("ico16/delete.png"), deleteCommand);
        delete.setDescription("Удалить");

        print = this.addItem("print" + caption, new ThemeResource("ico16/printer.png"), printCommand);
        print.setDescription("Печать");

        filter = this.addItem("filter" + caption, new ThemeResource("ico16/filter.png"), filterCommand);
        filter.setDescription("Сортировать");
        this.setStyleName("v-menubar-menuitem-caption-null-size");
        this.addStyleName("menu-navigator");
    }

    protected Workspace getParentLayout(){
        return this.parent;
    }

    @Override
    public void setIdentify(String identify) {
        this.identify = identify;
    }

    @Override
    public String getIdentify() {
        return identify;
    }

    abstract public void add();

    abstract public void delete();

    abstract public void print();

    public void filter() {
        FilterPanel filterPanel = parent.getFilterPanel();
        filterPanel.loadColumns();
        if (filterPanel.isVisible()) {
            filter.setStyleName(null);
            filterPanel.hide();
        } else {
            filter.setStyleName(ENABLE_BUTTON_STYLE);
            filterPanel.show();
        }
    }

    public MenuItem getAdd() {
        return add;
    }

    public MenuItem getDelete() {
        return delete;
    }

    public MenuItem getPrint() {
        return print;
    }

    public ModifierAccess getModifierAccess() {
        return this.permissionAccess;
    }

    public void setModifierAccess(ModifierAccess permission) {
        this.permissionAccess = permission;
        switch (permission) {
            case EDIT: {
                edit();
                break;
            }
            case READ: {
                read();
                break;
            }
            case HIDE: {
                hide();
                break;
            }
        }
    }

    private void edit(){
        this.getItems().forEach(menuItem -> {
            menuItem.setEnabled(true);
            menuItem.setVisible(true);
        });
        setEditMode();
    }

    private void read(){
        this.getItems().forEach(menuItem -> {
            menuItem.setEnabled(false);
            menuItem.setVisible(true);
        });
        setReadMode();
    }

    private void hide(){
        this.getItems().forEach(menuItem -> {
            menuItem.setEnabled(false);
            menuItem.setVisible(false);
        });
        setHideMode();
    }

    public void replacePermissionAccess(ModifierAccess permissionAccess) {
        PermissionAccess.replacePermissionAccess(this, permissionAccess);
    }

    public void setReadMode(){
        this.setVisible(true);
        this.setEnabled(false);
    }

    public void setEditMode(){
        this.setVisible(true);
        this.setEnabled(true);
    }

    public void setHideMode(){
        this.setVisible(false);
        this.setEnabled(false);
    }

    public MenuItem getFilter() {
        return filter;
    }

    public void hideAdd(){
        add.setVisible(false);
    }

    public void showAdd(){
        add.setVisible(true);
    }

    public void hideDelete(){
        delete.setVisible(false);
    }

    public void showDelete(){
        delete.setVisible(true);
    }

    public void hidePrint(){
        print.setVisible(false);
    }

    public void showPrint(){
        print.setVisible(true);
    }

    public void hideFilter(){
        filter.setVisible(false);
    }

    public void showFilter(){
        filter.setVisible(true);
    }

    public void editModeOff(){
        getAdd().setStyleName(null);
    }

    public void editModeOn(){
        getAdd().setStyleName(ENABLE_BUTTON_STYLE);
    }
}