org.xaloon.wicket.plugin.user.admin.panel.UsersPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.xaloon.wicket.plugin.user.admin.panel.UsersPanel.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */
package org.xaloon.wicket.plugin.user.admin.panel;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
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.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.value.ValueMap;
import org.xaloon.core.api.user.UserFacade;
import org.xaloon.core.api.user.UserSearchResult;
import org.xaloon.wicket.component.custom.ConfirmationAjaxLink;
import org.xaloon.wicket.component.navigation.DecoratedPagingNavigatorContainer;
import org.xaloon.wicket.plugin.user.admin.page.UserSecurityPage;
import org.xaloon.wicket.plugin.user.admin.page.UsersPage;
import org.xaloon.wicket.util.Link;

/**
 * @author vytautas r.
 */
public class UsersPanel extends AbstractAdministrationPanel {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private static final String QUERY_PARAM = "q";

    final ValueMap properties = new ValueMap();

    @Inject
    @Named("userFacade")
    private UserFacade userFacade;

    /**
     * Construct.
     * 
     * @param id
     * @param parameters
     */
    public UsersPanel(String id, PageParameters parameters) {
        super(id, parameters);
    }

    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();

        removeAll();

        // Add paging navigation container with navigation toolbar
        final DecoratedPagingNavigatorContainer<UserSearchResult> dataContainer = new DecoratedPagingNavigatorContainer<UserSearchResult>(
                "container", getCurrentRedirectLink());
        dataContainer.setOutputMarkupId(true);
        addOrReplace(dataContainer);

        // Add blog list data view
        final DataView<UserSearchResult> securityGroupDataView = new DataView<UserSearchResult>("security-users",
                new JpaUserDetailsDataProvider()) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(Item<UserSearchResult> item) {
                final UserSearchResult user = item.getModelObject();

                // Add link to user details
                PageParameters params = new PageParameters();
                params.add(UsersPage.PARAM_USER_ID, user.getUsername());
                BookmarkablePageLink<Void> userDetailsLink = new BookmarkablePageLink<Void>("details-link",
                        UserSecurityPage.class, params);
                item.add(userDetailsLink);

                // Add username
                userDetailsLink.add(new Label("username",
                        new Model<String>(userFacade.getFullNameForUser(user.getUsername()))));

                // Add delete user link
                item.add(new ConfirmationAjaxLink<Void>("deleteUser") {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        userFacade.deleteUser(user.getUsername());
                        target.add(dataContainer);
                    }
                });

                // Add checkbox if account enabled
                item.add(new AjaxCheckBox("accountEnabled", new Model<Boolean>(user.isEnabled())) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        userFacade.modifyAccountEnabled(user.getUsername(), getModelObject());
                        target.add(dataContainer);
                    }
                });

                // Add checkbox if account not expired
                item.add(new AjaxCheckBox("accountNonExpired", new Model<Boolean>(user.isAccountNonExpired())) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        userFacade.modifyAccountNonExpired(user.getUsername(), getModelObject());
                        target.add(dataContainer);
                    }
                });

                // Add checkbox if account not locked
                item.add(new AjaxCheckBox("accountNonLocked", new Model<Boolean>(user.isAccountNonLocked())) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        userFacade.modifyAccountNonLocked(user.getUsername(), getModelObject());
                        target.add(dataContainer);
                    }
                });

                // Add checkbox if credentials not expired
                item.add(new AjaxCheckBox("credentialsNonExpired",
                        new Model<Boolean>(user.isCredentialsNonExpired())) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        userFacade.modifyCredentialsNonExpired(user.getUsername(), getModelObject());
                        target.add(dataContainer);
                    }
                });

            }

        };
        dataContainer.addAbstractPageableView(securityGroupDataView);

        // Add query form
        Form<String> searchForm = new Form<String>("search");
        searchForm.add(new TextField<String>(QUERY_PARAM, new PropertyModel<String>(properties, QUERY_PARAM)));
        searchForm.add(new IndicatingAjaxButton("submit") {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                target.add(dataContainer);
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
            }
        });
        add(searchForm);
    }

    protected Link getCurrentRedirectLink() {
        return new Link(UsersPage.class, getPageRequestParameters());
    }

    class JpaUserDetailsDataProvider implements IDataProvider<UserSearchResult> {
        private static final long serialVersionUID = 1L;

        @Override
        public void detach() {
        }

        @Override
        public Iterator<UserSearchResult> iterator(long first, long count) {
            return userFacade.findCombinedUsers(getQueryFilter(), first, count).iterator();
        }

        private Map<String, String> getQueryFilter() {
            String userSearchProperty = properties.getString(QUERY_PARAM);
            Map<String, String> filter = new HashMap<String, String>();
            if (!StringUtils.isEmpty(userSearchProperty)) {
                filter.put(QUERY_PARAM, userSearchProperty);
            }
            return filter;
        }

        @Override
        public long size() {
            return userFacade.count(getQueryFilter());
        }

        @Override
        public IModel<UserSearchResult> model(UserSearchResult object) {
            return new Model<UserSearchResult>(object);
        }
    }
}