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

Java tutorial

Introduction

Here is the source code for org.xaloon.wicket.plugin.user.admin.panel.GroupsPanel.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.Iterator;

import javax.inject.Inject;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.basic.Label;
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.request.mapper.parameter.PageParameters;
import org.xaloon.core.api.bookmark.Bookmarkable;
import org.xaloon.core.api.security.GroupService;
import org.xaloon.core.api.security.model.SecurityGroup;
import org.xaloon.wicket.component.classifier.panel.CustomModalWindow;
import org.xaloon.wicket.component.custom.ConfirmationAjaxLink;
import org.xaloon.wicket.component.navigation.DecoratedPagingNavigatorContainer;
import org.xaloon.wicket.plugin.user.admin.page.GroupDetailPage;
import org.xaloon.wicket.plugin.user.admin.page.GroupsPage;
import org.xaloon.wicket.util.Link;

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

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

    @Inject
    private GroupService groupService;

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

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

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

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

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

                PageParameters pageParams = new PageParameters();
                pageParams.add(Bookmarkable.PARAM_PATH, group.getPath());
                BookmarkablePageLink<Void> groupLink = new BookmarkablePageLink<Void>("groupDetails",
                        GroupDetailPage.class, pageParams);
                item.add(groupLink);
                groupLink.add(new Label("name", new Model<String>(group.getName())));

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

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        groupService.delete(group);
                        target.add(dataContainer);
                    }
                });
            }

        };
        dataContainer.addAbstractPageableView(securityGroupDataView);

        // Add the modal window to create new group
        final ModalWindow addNewGroupModalWindow = new CustomModalWindow("modal-new-group", "New group") {
            private static final long serialVersionUID = 1L;

            @Override
            protected void addComponentsToRefresh(java.util.List<Component> components) {
                components.add(GroupsPanel.this);
            };
        };
        addNewGroupModalWindow.setContent(new CreateNewEntityPanel<SecurityGroup>(
                addNewGroupModalWindow.getContentId(), new Model<SecurityGroup>(groupService.newAuthority())) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onNewEntitySubmit(AjaxRequestTarget target, SecurityGroup entity) {
                groupService.save(entity);
                addNewGroupModalWindow.close(target);
            }
        });
        add(addNewGroupModalWindow);

        // add new group link
        add(new AjaxLink<Void>("add-new-group") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                addNewGroupModalWindow.show(target);
            }
        });
    }

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

    class JpaSecurityGroupDataProvider implements IDataProvider<SecurityGroup> {

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

        @Override
        public void detach() {
        }

        @Override
        public Iterator<? extends SecurityGroup> iterator(long first, long count) {
            return groupService.getAuthorities(first, count).iterator();
        }

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

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