Package org.aperteworkflow.editor.ui.permission

Source Code of org.aperteworkflow.editor.ui.permission.PrivilegeNameEditor

package org.aperteworkflow.editor.ui.permission;

import com.vaadin.ui.*;
import org.aperteworkflow.editor.domain.Permission;
import org.aperteworkflow.editor.vaadin.DataHandler;
import org.aperteworkflow.util.liferay.LiferayBridge;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
* Component used to edit role names inside single privilege name
*/
public class PrivilegeNameEditor extends GridLayout implements PermissionWrapperHandler, DataHandler {
    private PermissionDefinition permissionDefinition;
    private PermissionProvider provider;

    private Label privilegeDescriptionLabel;
    private Label roleNameDescriptionLabel;
    private RoleNameComboBox roleNameComboBox;
    private Layout roleNameLayout;

    public PrivilegeNameEditor(PermissionDefinition permissionDefinition) {
        super(2, 3);
        setSpacing(true);
        this.permissionDefinition = permissionDefinition;
        initComponent();
        initLayout();
    }

    private void initComponent() {
        I18NSource messages = I18NSource.ThreadUtil.getThreadI18nSource();

        privilegeDescriptionLabel = new Label(getDescription(permissionDefinition));
        privilegeDescriptionLabel.setContentMode(Label.CONTENT_XHTML); // TODO don't use XHTML switch to style names

        roleNameDescriptionLabel = new Label(messages.getMessage("permission.editor.assigned.roles"));

        roleNameComboBox = new RoleNameComboBox();
        roleNameComboBox.setHandler(this);

        roleNameLayout = new CssLayout() {
            @Override
            protected String getCss(Component c) {
                if (c instanceof PermissionWrapperBox) {
                    String basicCss = "float: left; margin: 3px; margin-bottom: 8px; padding: 3px; display: inline; font-weight: bold; border: 2px solid ";
                    return basicCss + "#287ece; -moz-border-radius: 5px; border-radius: 5px; padding-left: 6px; padding-right: 6px;";
                }

                return super.getCss(c);
            }
        };
        roleNameLayout.setWidth("100%");
    }

    private String getDescription(PermissionDefinition definition) {
        StringBuilder builder = new StringBuilder();
        builder.append("<h2>");
        builder.append(definition.getKey());
        builder.append("</h2>");
        if (definition.getDescription() != null && !definition.getDescription().trim().isEmpty()) {
            builder.append("<i>");
            builder.append(I18NSource.ThreadUtil.getThreadI18nSource().getMessage(definition.getDescription()));
            builder.append("</i>");
        }
        return builder.toString();
    }
   
    private void initLayout() {
        setWidth("100%");
        setSpacing(true);

        addComponent(privilegeDescriptionLabel, 0, 0);
        addComponent(roleNameComboBox, 1, 0);
        addComponent(roleNameDescriptionLabel, 0, 1, 1, 1);
        addComponent(roleNameLayout, 0, 2, 1, 2);

        setComponentAlignment(privilegeDescriptionLabel, Alignment.MIDDLE_LEFT);
        setComponentAlignment(roleNameComboBox, Alignment.BOTTOM_RIGHT);
       
        setColumnExpandRatio(0, 1);
        setColumnExpandRatio(1, 0);
    }
   
    @Override
    public void addPermissionWrapper(PermissionWrapper permissionWrapper) {
        // ensure the privilege name
        permissionWrapper.setPrivilegeName(permissionDefinition.getKey());

        PermissionWrapperBox box = getPermissionWrapperBoxByRoleName(permissionWrapper.getRoleName());
        if (box == null) {
            box = new PermissionWrapperBox(permissionWrapper, this);
            roleNameLayout.addComponent(box);
        }

        if (roleNameComboBox.containsId(permissionWrapper.getRoleName())) {
            roleNameComboBox.removeItem(permissionWrapper.getRoleName());
        }
        Permission permission = new Permission();
        permission.setPrivilegeName(permissionWrapper.getPrivilegeName());
        permission.setRoleName(permissionWrapper.getRoleName());
        provider.addPermission(permission);
    }

    @Override
    public boolean removePermissionWrapper(PermissionWrapper permissionWrapper) {
        PermissionWrapperBox box = getPermissionWrapperBoxByRoleName(permissionWrapper.getRoleName());
        if (box == null) {
            // Nothing to remove
            return false;
        }

        roleNameLayout.removeComponent(box);
        roleNameLayout.requestRepaint();
        roleNameComboBox.addItem(permissionWrapper.getRoleName());
        Permission permission = new Permission();
        permission.setPrivilegeName(permissionWrapper.getPrivilegeName());
        permission.setRoleName(permissionWrapper.getRoleName());
        provider.removePermission(permission);
        return true;
    }
   
    private PermissionWrapperBox getPermissionWrapperBoxByRoleName(String roleName) {
        Iterator<Component> it = roleNameLayout.getComponentIterator();
        while (it.hasNext()) {
            Component c = it.next();
            if ((c instanceof PermissionWrapperBox)) {
                PermissionWrapperBox box = (PermissionWrapperBox) c;
                if (roleName.equals(box.getPermissionWrapper().getRoleName())) {
                    return box;
                }
            }
        }
        return null;
    }

    @Override
    public void loadData() {
        roleNameComboBox.removeAllItems();
        roleNameComboBox.addItem(".*");
    for (String roleName : LiferayBridge.getRegularRoleNames()) {
      roleNameComboBox.addItem(roleName);
    }
    roleNameLayout.removeAllComponents();
        if (provider.getPermissions() != null) {
            for (Permission permission : provider.getPermissions()) {
                addPermissionWrapper(new PermissionWrapper(permission));
            }
        }
    }

  @Override
    public void saveData() {

    }

    @Override
    public Collection<String> validateData() {
        return null;
    }

    public PermissionProvider getProvider() {
        return provider;
    }

    public void setProvider(PermissionProvider provider) {
        this.provider = provider;
    }

    public PermissionDefinition getPermissionDefinition() {
        return permissionDefinition;
    }

    public List<Permission> getPermissions() {
        List<Permission> list = new ArrayList<Permission>();

        Iterator<Component> it = roleNameLayout.getComponentIterator();
        while (it.hasNext()) {
            Component c = it.next();
            if ((c instanceof PermissionWrapperBox)) {
                PermissionWrapperBox box = (PermissionWrapperBox) c;
                list.add(box.getPermissionWrapper().toPermission());
            }
        }

        return list;
    }

}
TOP

Related Classes of org.aperteworkflow.editor.ui.permission.PrivilegeNameEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.