Example usage for org.apache.wicket.extensions.markup.html.repeater.tree.content Folder Folder

List of usage examples for org.apache.wicket.extensions.markup.html.repeater.tree.content Folder Folder

Introduction

In this page you can find the example usage for org.apache.wicket.extensions.markup.html.repeater.tree.content Folder Folder.

Prototype

public Folder(String id, AbstractTree<T> tree, IModel<T> model) 

Source Link

Usage

From source file:com.norconex.commons.wicket.markup.html.filesystem.MultiSelectableContent.java

License:Apache License

@Override
public Component newContentComponent(String id, final AbstractTree<File> tree, IModel<File> model) {
    return new Folder<File>(id, tree, model) {
        private static final long serialVersionUID = 7296733238240749590L;

        @Override/* ww w .j a v a2s .c  om*/
        protected boolean isClickable() {
            return true;
        }

        @Override
        protected void onClick(AjaxRequestTarget target) {
            MultiSelectableContent.this.nodeClicked(getModelObject(), tree, target);
        }

        @Override
        protected boolean isSelected() {
            return MultiSelectableContent.this.isSelected(getModelObject());
        }

        @Override
        protected IModel<String> newLabelModel(IModel<File> fileModel) {
            File file = fileModel.getObject();
            if (isDrive(file)) {
                return new Model<String>(file.getAbsolutePath());
            }
            return new Model<String>(fileModel.getObject().getName());
        }

        @Override
        protected String getOtherStyleClass(File file) {
            if (file.isDirectory() || isDrive(file)) {
                return "tree-folder-closed";
            }
            return super.getOtherStyleClass(file);
        }

        @Override
        protected String getSelectedStyleClass() {
            return "nx-commons-fsnavigator-selected";
        }

        private boolean isDrive(File file) {
            return file.getAbsolutePath().matches("\\w+:\\\\");
        }
    };
}

From source file:com.norconex.commons.wicket.markup.html.filesystem.SelectableContent.java

License:Apache License

@Override
public Component newContentComponent(String id, final AbstractTree<File> tree, IModel<File> model) {
    return new Folder<File>(id, tree, model) {
        private static final long serialVersionUID = 5637975745530454903L;

        @Override//from ww  w.  j  av a 2  s .  c  om
        protected IModel<String> newLabelModel(IModel<File> lblModel) {
            File file = lblModel.getObject();
            if (isDrive(file)) {
                return new Model<String>(file.getAbsolutePath());
            }
            return new Model<String>(lblModel.getObject().getName());
        }

        @Override
        protected boolean isClickable() {
            return true;
        }

        @Override
        protected String getOtherStyleClass(File file) {
            if (file.isDirectory() || isDrive(file)) {
                return "tree-folder-closed";
            }
            return super.getOtherStyleClass(file);
        }

        @Override
        protected void onClick(AjaxRequestTarget target) {
            SelectableContent.this.nodeClicked(getModelObject(), tree, target);
        }

        @Override
        protected String getSelectedStyleClass() {
            return "nx-commons-fsnavigator-selected";
        }

        @Override
        protected boolean isSelected() {
            return SelectableContent.this.isSelected(getModelObject());
        }

        private boolean isDrive(File file) {
            return file.getAbsolutePath().matches("\\w+:\\\\");
        }
    };
}

From source file:nl.mpi.lamus.web.components.UnlinkedNodesPanel.java

License:Open Source License

private AbstractTree<WorkspaceTreeNode> createTree(String id, UnlinkedNodesModelProvider provider,
        IModel<Set<WorkspaceTreeNode>> state) {

    List<IColumn<WorkspaceTreeNode, String>> columns = createColumns();

    final TableTree<WorkspaceTreeNode, String> tree = new DefaultTableTree<WorkspaceTreeNode, String>(id,
            columns, provider, Integer.MAX_VALUE, state) {

        @Override//from   www  .ja  v  a 2 s . c om
        protected Component newContentComponent(String id, IModel<WorkspaceTreeNode> model) {

            if (model.getObject().getParent() != null) {
                return new Folder<>(id, unlinkedNodesTree, model);
            } else {
                return new CheckedFolder<WorkspaceTreeNode>(id, unlinkedNodesTree, model) {

                    private static final long serialVersionUID = 1L;

                    @Override
                    protected IModel<Boolean> newCheckBoxModel(final IModel<WorkspaceTreeNode> model) {

                        return new IModel<Boolean>() {
                            private static final long serialVersionUID = 1L;

                            @Override
                            public Boolean getObject() {
                                return isChecked(model.getObject());
                            }

                            @Override
                            public void setObject(Boolean object) {
                                check(model.getObject(), object);
                            }

                            @Override
                            public void detach() {
                            }
                        };
                    }
                };
            }
        }

        @Override
        protected Item<WorkspaceTreeNode> newRowItem(String id, int index, IModel<WorkspaceTreeNode> model) {
            return new OddEvenItem<>(id, index, model);
        }
    };

    return tree;
}

From source file:org.apache.openmeetings.web.common.tree.FileItemTree.java

License:Apache License

@Override
protected Component newContentComponent(String id, IModel<FileItem> node) {
    return new Folder<FileItem>(id, this, node) {
        private static final long serialVersionUID = 1L;

        @Override//from   www. j  a v a  2 s  .  c o m
        protected Component newLabelComponent(String id, final IModel<FileItem> lm) {
            FileItem r = lm.getObject();
            return Type.Folder == r.getType() || r.getId() == null ? new FolderPanel(id, lm, treePanel)
                    : new FileItemPanel(id, lm, treePanel);
        }

        @Override
        protected boolean isSelected() {
            FileItem f = getModelObject(), s = treePanel.getSelected();
            return (s.getId() == null && s.getId() == f.getId() && s.getHash().equals(f.getHash()))
                    || (s.getId() != null && s.getId().equals(f.getId()));
        }

        @Override
        protected boolean isClickable() {
            return true;
        }

        @Override
        protected void onClick(AjaxRequestTarget target) {
            FileItem r = getModelObject();
            treePanel.setSelected(r, target);
            if (Type.Folder == r.getType()) {
                if (getState(r) == State.COLLAPSED) {
                    super.onClick(target);
                }
            } else {
                treePanel.update(target, r);
            }
        }

        private String getItemStyle(FileItem f, String def) {
            String style;
            if (f.getId() == null) {
                style = f.getHash().indexOf("my") > -1 ? "my file om-icon" : "public file om-icon";
            } else {
                String _style, addStyle = f.exists() ? "" : "broken";
                switch (f.getType()) {
                case Folder:
                    _style = def;
                    break;
                case Image:
                    _style = "image file om-icon";
                    break;
                case PollChart:
                    _style = "chart file om-icon";
                    break;
                case WmlFile:
                    _style = "wml file om-icon";
                    break;
                case Video:
                case Recording: {
                    _style = "recording om-icon";
                    if (f instanceof Recording) {
                        Status st = ((Recording) f).getStatus();
                        if (Status.RECORDING == st || Status.CONVERTING == st) {
                            addStyle = "processing";
                        }
                    }
                }
                    break;
                case Presentation:
                    _style = "doc file om-icon";
                    break;
                default:
                    _style = "file om-icon";
                    break;
                }
                style = String.format("%s %s", addStyle, _style);
            }
            return style;
        }

        @Override
        protected String getOtherStyleClass(FileItem r) {
            return getItemStyle(r, super.getOtherStyleClass(r));
        }

        @Override
        protected String getOpenStyleClass() {
            return getItemStyle(getModelObject(), super.getOpenStyleClass());
        }

        @Override
        protected String getClosedStyleClass() {
            return getItemStyle(getModelObject(), super.getClosedStyleClass());
        }

        @Override
        protected String getSelectedStyleClass() {
            return "ui-state-active";
        }

        @Override
        protected IModel<String> newLabelModel(IModel<FileItem> model) {
            return Model.of(model.getObject().getName());
        }
    };
}

From source file:org.apache.syncope.client.console.pages.GroupSelectModalPage.java

License:Apache License

public GroupSelectModalPage(final PageReference pageRef, final ModalWindow window,
        final Class<?> payloadClass) {
    super();/*from  www.ja  va2 s . c  o  m*/

    final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeGroupProvider(groupTreeBuilder, true);
    final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel();

    tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) {

        private static final long serialVersionUID = 7137658050662575546L;

        @Override
        protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) {
            final DefaultMutableTreeNode treeNode = node.getObject();
            final GroupTO groupTO = (GroupTO) treeNode.getUserObject();

            return new Folder<DefaultMutableTreeNode>(id, GroupSelectModalPage.this.tree, node) {

                private static final long serialVersionUID = 9046323319920426493L;

                @Override
                protected boolean isClickable() {
                    return true;
                }

                @Override
                protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) {
                    return new Model<>(groupTO.getDisplayName());
                }

                @Override
                protected void onClick(final AjaxRequestTarget target) {
                    super.onClick(target);

                    try {
                        Constructor<?> constructor = payloadClass.getConstructor(Long.class);
                        Object payload = constructor.newInstance(groupTO.getKey());

                        send(pageRef.getPage(), Broadcast.BREADTH, payload);
                    } catch (Exception e) {
                        LOG.error("Could not send group select event", e);
                    }

                    window.close(target);
                }
            };
        }
    };
    tree.add(new WindowsTheme());
    tree.setOutputMarkupId(true);

    DefaultMutableTreeNodeExpansion.get().expandAll();

    this.add(tree);
}

From source file:org.apache.syncope.client.console.pages.RoleSelectModalPage.java

License:Apache License

public RoleSelectModalPage(final PageReference pageRef, final ModalWindow window, final Class<?> payloadClass) {
    super();/*from  w w  w  .  j a v  a2  s. co  m*/

    final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeRoleProvider(roleTreeBuilder, true);
    final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel();

    tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) {

        private static final long serialVersionUID = 7137658050662575546L;

        @Override
        protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) {
            final DefaultMutableTreeNode treeNode = node.getObject();
            final RoleTO roleTO = (RoleTO) treeNode.getUserObject();

            return new Folder<DefaultMutableTreeNode>(id, RoleSelectModalPage.this.tree, node) {

                private static final long serialVersionUID = 9046323319920426493L;

                @Override
                protected boolean isClickable() {
                    return true;
                }

                @Override
                protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) {
                    return new Model<>(roleTO.getDisplayName());
                }

                @Override
                protected void onClick(final AjaxRequestTarget target) {
                    super.onClick(target);

                    try {
                        Constructor<?> constructor = payloadClass.getConstructor(Long.class);
                        Object payload = constructor.newInstance(roleTO.getKey());

                        send(pageRef.getPage(), Broadcast.BREADTH, payload);
                    } catch (Exception e) {
                        LOG.error("Could not send role select event", e);
                    }

                    window.close(target);
                }
            };
        }
    };
    tree.add(new WindowsTheme());
    tree.setOutputMarkupId(true);

    DefaultMutableTreeNodeExpansion.get().expandAll();

    this.add(tree);
}

From source file:org.apache.syncope.client.console.panels.MembershipsPanel.java

License:Apache License

public MembershipsPanel(final String id, final UserTO userTO, final Mode mode, final StatusPanel statusPanel,
        final PageReference pageRef) {

    super(id);//w ww.j  a  v a2  s.  c  om
    this.userTO = userTO;
    this.statusPanel = statusPanel;

    final WebMarkupContainer membershipsContainer = new WebMarkupContainer("membershipsContainer");
    membershipsContainer.setOutputMarkupId(true);
    add(membershipsContainer);

    final ModalWindow membWin = new ModalWindow("membershipWin");
    membWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
    membWin.setCookieName("create-membership-modal");
    add(membWin);

    final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeGroupProvider(groupTreeBuilder, true);
    final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel();

    tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) {

        private static final long serialVersionUID = 7137658050662575546L;

        @Override
        protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) {
            final DefaultMutableTreeNode treeNode = node.getObject();
            final GroupTO groupTO = (GroupTO) treeNode.getUserObject();

            return new Folder<DefaultMutableTreeNode>(id, MembershipsPanel.this.tree, node) {

                private static final long serialVersionUID = 9046323319920426493L;

                @Override
                protected boolean isClickable() {
                    return true;
                }

                @Override
                protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) {
                    return new Model<String>(groupTO.getDisplayName());
                }

                @Override
                protected void onClick(final AjaxRequestTarget target) {
                    if (groupTO.getKey() > 0) {
                        membWin.setPageCreator(new ModalWindow.PageCreator() {

                            private static final long serialVersionUID = 7661763358801821185L;

                            @Override
                            public Page createPage() {
                                PageReference pageRef = getPage().getPageReference();

                                for (MembershipTO membTO : membView.getList()) {
                                    if (membTO.getGroupKey() == groupTO.getKey()) {
                                        return new MembershipModalPage(pageRef, membWin, membTO, mode);
                                    }
                                }
                                MembershipTO membTO = new MembershipTO();
                                membTO.setGroupKey(groupTO.getKey());
                                membTO.setGroupName(groupTO.getName());

                                return new MembershipModalPage(pageRef, membWin, membTO, mode);
                            }
                        });
                        membWin.show(target);
                    }
                }
            };
        }
    };
    tree.add(new WindowsTheme());
    tree.setOutputMarkupId(true);

    DefaultMutableTreeNodeExpansion.get().expandAll();

    this.add(tree);

    membView = new ListView<MembershipTO>("memberships",
            new PropertyModel<List<? extends MembershipTO>>(userTO, "memberships")) {

        private static final long serialVersionUID = 9101744072914090143L;

        @Override
        protected void populateItem(final ListItem<MembershipTO> item) {
            final MembershipTO membershipTO = (MembershipTO) item.getDefaultModelObject();

            item.add(new Label("groupId", new Model<Long>(membershipTO.getGroupKey())));
            item.add(new Label("groupName", new Model<String>(membershipTO.getGroupName())));

            AjaxLink editLink = new ClearIndicatingAjaxLink("editLink", pageRef) {

                private static final long serialVersionUID = -7978723352517770644L;

                @Override
                protected void onClickInternal(final AjaxRequestTarget target) {
                    membWin.setPageCreator(new ModalWindow.PageCreator() {

                        private static final long serialVersionUID = -7834632442532690940L;

                        @Override
                        public Page createPage() {
                            return new MembershipModalPage(getPage().getPageReference(), membWin, membershipTO,
                                    mode);

                        }
                    });
                    membWin.show(target);
                }
            };
            item.add(editLink);

            AjaxLink deleteLink = new IndicatingOnConfirmAjaxLink("deleteLink", pageRef) {

                private static final long serialVersionUID = -7978723352517770644L;

                @Override
                protected void onClickInternal(final AjaxRequestTarget target) {
                    userTO.getMemberships().remove(membershipTO);
                    ((UserModalPage) getPage()).getUserTO().getMemberships().remove(membershipTO);
                    target.add(membershipsContainer);

                    GroupTO groupTO = groupTreeBuilder.findGroup(membershipTO.getGroupKey());
                    Set<String> resourcesToRemove = groupTO == null ? Collections.<String>emptySet()
                            : groupTO.getResources();
                    if (!resourcesToRemove.isEmpty()) {
                        Set<String> resourcesAssignedViaMembership = new HashSet<>();
                        for (MembershipTO membTO : userTO.getMemberships()) {
                            groupTO = groupTreeBuilder.findGroup(membTO.getGroupKey());
                            if (groupTO != null) {
                                resourcesAssignedViaMembership.addAll(groupTO.getResources());
                            }
                        }
                        resourcesToRemove.removeAll(resourcesAssignedViaMembership);
                        resourcesToRemove.removeAll(userTO.getResources());
                    }

                    StatusUtils.update(userTO, statusPanel, target, Collections.<String>emptySet(),
                            resourcesToRemove);
                }
            };
            item.add(deleteLink);
        }
    };

    membershipsContainer.add(membView);

    setWindowClosedCallback(membWin, membershipsContainer);
}

From source file:org.apache.syncope.client.console.wicket.markup.html.tree.TreeGroupPanel.java

License:Apache License

private void updateTree() {
    final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeGroupProvider(groupTreeBuilder, true);
    final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel();

    tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) {

        private static final long serialVersionUID = 7137658050662575546L;

        @Override/*from  w w w .ja v a2 s. c  o  m*/
        protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) {
            final DefaultMutableTreeNode treeNode = node.getObject();
            final GroupTO groupTO = (GroupTO) treeNode.getUserObject();

            return new Folder<DefaultMutableTreeNode>(id, TreeGroupPanel.this.tree, node) {

                private static final long serialVersionUID = 9046323319920426493L;

                @Override
                protected boolean isClickable() {
                    return true;
                }

                @Override
                protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) {
                    return new Model<>(groupTO.getDisplayName());
                }

                @Override
                protected void onClick(final AjaxRequestTarget target) {
                    super.onClick(target);

                    send(getPage(), Broadcast.BREADTH, new TreeNodeClickUpdate(target, groupTO.getKey()));
                }
            };
        }
    };
    tree.add(new WindowsTheme());
    tree.setOutputMarkupId(true);

    DefaultMutableTreeNodeExpansion.get().expandAll();

    MetaDataRoleAuthorizationStrategy.authorize(tree, ENABLE, xmlRolesReader.getEntitlement("Groups", "read"));

    treeContainer.addOrReplace(tree);
}

From source file:org.apache.syncope.client.console.wicket.markup.html.tree.TreeRolePanel.java

License:Apache License

private void updateTree() {
    final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeRoleProvider(roleTreeBuilder, true);
    final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel();

    tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) {

        private static final long serialVersionUID = 7137658050662575546L;

        @Override//from   www .  java2  s  .c  o m
        protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) {
            final DefaultMutableTreeNode treeNode = node.getObject();
            final RoleTO roleTO = (RoleTO) treeNode.getUserObject();

            return new Folder<DefaultMutableTreeNode>(id, TreeRolePanel.this.tree, node) {

                private static final long serialVersionUID = 9046323319920426493L;

                @Override
                protected boolean isClickable() {
                    return true;
                }

                @Override
                protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) {
                    return new Model<>(roleTO.getDisplayName());
                }

                @Override
                protected void onClick(final AjaxRequestTarget target) {
                    super.onClick(target);

                    send(getPage(), Broadcast.BREADTH, new TreeNodeClickUpdate(target, roleTO.getKey()));
                }
            };
        }
    };
    tree.add(new WindowsTheme());
    tree.setOutputMarkupId(true);

    DefaultMutableTreeNodeExpansion.get().expandAll();

    MetaDataRoleAuthorizationStrategy.authorize(tree, ENABLE, xmlRolesReader.getEntitlement("Roles", "read"));

    treeContainer.addOrReplace(tree);
}

From source file:org.apache.syncope.console.pages.panels.MembershipsPanel.java

License:Apache License

public MembershipsPanel(final String id, final UserTO userTO, final boolean templateMode,
        final StatusPanel statusPanel, final PageReference pageRef) {

    super(id);/*  w  w  w.  j  a  v a 2 s .  c  om*/
    this.userTO = userTO;
    this.statusPanel = statusPanel;

    final WebMarkupContainer membershipsContainer = new WebMarkupContainer("membershipsContainer");
    membershipsContainer.setOutputMarkupId(true);
    add(membershipsContainer);

    final ModalWindow membWin = new ModalWindow("membershipWin");
    membWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
    membWin.setCookieName("create-membership-modal");
    add(membWin);

    final ITreeProvider<DefaultMutableTreeNode> treeProvider = new TreeRoleProvider(roleTreeBuilder, true);
    final DefaultMutableTreeNodeExpansionModel treeModel = new DefaultMutableTreeNodeExpansionModel();

    tree = new DefaultNestedTree<DefaultMutableTreeNode>("treeTable", treeProvider, treeModel) {

        private static final long serialVersionUID = 7137658050662575546L;

        @Override
        protected Component newContentComponent(final String id, final IModel<DefaultMutableTreeNode> node) {
            final DefaultMutableTreeNode treeNode = node.getObject();
            final RoleTO roleTO = (RoleTO) treeNode.getUserObject();

            return new Folder<DefaultMutableTreeNode>(id, MembershipsPanel.this.tree, node) {

                private static final long serialVersionUID = 9046323319920426493L;

                @Override
                protected boolean isClickable() {
                    return true;
                }

                @Override
                protected IModel<?> newLabelModel(final IModel<DefaultMutableTreeNode> model) {
                    return new Model<String>(roleTO.getDisplayName());
                }

                @Override
                protected void onClick(final AjaxRequestTarget target) {
                    if (roleTO.getId() > 0) {
                        membWin.setPageCreator(new ModalWindow.PageCreator() {

                            private static final long serialVersionUID = 7661763358801821185L;

                            @Override
                            public Page createPage() {
                                PageReference pageRef = getPage().getPageReference();

                                for (MembershipTO membTO : membView.getList()) {
                                    if (membTO.getRoleId() == roleTO.getId()) {
                                        return new MembershipModalPage(pageRef, membWin, membTO, templateMode);
                                    }
                                }
                                MembershipTO membTO = new MembershipTO();
                                membTO.setRoleId(roleTO.getId());
                                membTO.setRoleName(roleTO.getName());

                                return new MembershipModalPage(pageRef, membWin, membTO, templateMode);
                            }
                        });
                        membWin.show(target);
                    }
                }
            };
        }
    };
    tree.add(new WindowsTheme());
    tree.setOutputMarkupId(true);

    DefaultMutableTreeNodeExpansion.get().expandAll();

    this.add(tree);

    membView = new ListView<MembershipTO>("memberships",
            new PropertyModel<List<? extends MembershipTO>>(userTO, "memberships")) {

        private static final long serialVersionUID = 9101744072914090143L;

        @Override
        protected void populateItem(final ListItem<MembershipTO> item) {
            final MembershipTO membershipTO = (MembershipTO) item.getDefaultModelObject();

            item.add(new Label("roleId", new Model<Long>(membershipTO.getRoleId())));
            item.add(new Label("roleName", new Model<String>(membershipTO.getRoleName())));

            AjaxLink editLink = new ClearIndicatingAjaxLink("editLink", pageRef) {

                private static final long serialVersionUID = -7978723352517770644L;

                @Override
                protected void onClickInternal(final AjaxRequestTarget target) {
                    membWin.setPageCreator(new ModalWindow.PageCreator() {

                        private static final long serialVersionUID = -7834632442532690940L;

                        @Override
                        public Page createPage() {
                            return new MembershipModalPage(getPage().getPageReference(), membWin, membershipTO,
                                    templateMode);

                        }
                    });
                    membWin.show(target);
                }
            };
            item.add(editLink);

            AjaxLink deleteLink = new IndicatingOnConfirmAjaxLink("deleteLink", pageRef) {

                private static final long serialVersionUID = -7978723352517770644L;

                @Override
                protected void onClickInternal(final AjaxRequestTarget target) {
                    userTO.getMemberships().remove(membershipTO);
                    ((UserModalPage) getPage()).getUserTO().getMemberships().remove(membershipTO);
                    target.add(membershipsContainer);

                    RoleTO roleTO = RoleUtils.findRole(roleTreeBuilder, membershipTO.getRoleId());
                    Set<String> resourcesToRemove = roleTO == null ? Collections.<String>emptySet()
                            : roleTO.getResources();
                    if (!resourcesToRemove.isEmpty()) {
                        Set<String> resourcesAssignedViaMembership = new HashSet<String>();
                        for (MembershipTO membTO : userTO.getMemberships()) {
                            roleTO = RoleUtils.findRole(roleTreeBuilder, membTO.getRoleId());
                            if (roleTO != null) {
                                resourcesAssignedViaMembership.addAll(roleTO.getResources());
                            }
                        }
                        resourcesToRemove.removeAll(resourcesAssignedViaMembership);
                        resourcesToRemove.removeAll(userTO.getResources());
                    }

                    StatusUtils.update(userTO, statusPanel, target, Collections.<String>emptySet(),
                            resourcesToRemove);
                }
            };
            item.add(deleteLink);
        }
    };

    membershipsContainer.add(membView);

    setWindowClosedCallback(membWin, membershipsContainer);
}