eu.uqasar.web.pages.admin.settings.panels.LdapGroupListPanel.java Source code

Java tutorial

Introduction

Here is the source code for eu.uqasar.web.pages.admin.settings.panels.LdapGroupListPanel.java

Source

/*
 */
package eu.uqasar.web.pages.admin.settings.panels;

/*
 * #%L
 * U-QASAR
 * %%
 * Copyright (C) 2012 - 2015 U-QASAR Consortium
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import eu.uqasar.service.user.TeamService;
import eu.uqasar.util.ldap.LdapGroup;
import eu.uqasar.util.ldap.LdapManager;
import eu.uqasar.util.ldap.LdapUser;
import eu.uqasar.web.provider.ldap.LdapGroupProvider;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
import javax.naming.NamingException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Check;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;
import org.jboss.solder.logging.Logger;

/**
 *
 *
 */
public class LdapGroupListPanel extends LdapEntityListPanel<LdapGroup> {

    private static final Logger logger = Logger.getLogger(LdapGroupListPanel.class);

    @Inject
    TeamService teamService;

    public LdapGroupListPanel(String id, LdapManager manager) {
        super(id, new LdapGroupProvider(manager, Integer.MAX_VALUE));
    }

    private WebMarkupContainer newGroupMembersContainer(final String id, LdapGroup group) {
        WebMarkupContainer container = new WebMarkupContainer(id);
        DataView<LdapUser> membersList = newGroupMembersListView(group);
        container.add(membersList);
        return container;
    }

    private DataView<LdapUser> newGroupMembersListView(LdapGroup group) {
        List<LdapUser> users;
        try {
            users = group.getMembers();
        } catch (NamingException e) {
            logger.warn(e.getMessage(), e);
            users = new ArrayList<>(0);
        }
        DataView<LdapUser> members = new DataView<LdapUser>("membersList", new LdapGroupUsersProvider(users)) {

            @Override
            protected void populateItem(Item<LdapUser> item) {
                LdapUser user = item.getModelObject();
                WebMarkupContainer container = new WebMarkupContainer("member");
                ExternalLink mail = new ExternalLink("mail", Model.of("mailto:" + user.getMail()),
                        new PropertyModel(user, "mail"));
                Label userName = new Label("username", new PropertyModel(user, "userName"));
                final String fullName = user.getFullName();
                Label fullNameLabel = new Label("fullname", Model.of(fullName));
                fullNameLabel.setVisible(fullName != null);
                container.add(mail);
                container.add(userName);
                container.add(fullNameLabel);
                item.add(container);
            }
        };
        members.setOutputMarkupId(true);
        return members;
    }

    @Override
    public void populateItem(Item<LdapGroup> item, Check<LdapGroup> check) {
        LdapGroup group = item.getModelObject();
        item.add(new Label("name", new PropertyModel(group, "name")));
        item.add(new Label("description", new PropertyModel(group, "description")));
        item.add(newGroupMembersContainer("members", group));

        if (isSelectionEnabled()) {
            if (teamService.ldapBasedGroupExists(group)) {
                check.setVisible(false);
                item.add(new AttributeAppender("class", Model.of("warning")));
                item.add(new AttributeAppender("title",
                        new StringResourceModel("table.team.warning.exists", this, null)));
            } else {
                item.add(new AttributeAppender("class", Model.of("success")));
            }
        }
    }

    @Override
    public void selectionChanged(AjaxRequestTarget target) {
        System.out.println("group selection changed");
    }

    private static class LdapGroupUsersProvider implements IDataProvider<LdapUser> {

        private final List<LdapUser> users;

        public LdapGroupUsersProvider(List<LdapUser> users) {
            this.users = users;
        }

        @Override
        public Iterator<? extends LdapUser> iterator(long first, long count) {
            return users.subList((int) first, (int) Math.min(first + count, size())).iterator();
        }

        @Override
        public long size() {
            return users.size();
        }

        @Override
        public IModel<LdapUser> model(LdapUser object) {
            return Model.of(object);
        }

        @Override
        public void detach() {
        }

    }
}