com.userweave.pages.user.configuration.UserEditHeaderPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.userweave.pages.user.configuration.UserEditHeaderPanel.java

Source

/*******************************************************************************
 * This file is part of UserWeave.
 *
 *     UserWeave is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU Affero General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 *
 *     UserWeave is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU Affero General Public License for more details.
 *
 *     You should have received a copy of the GNU Affero General Public License
 *     along with UserWeave.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Copyright 2012 User Prompt GmbH | Psychologic IT Expertise
 *******************************************************************************/
package com.userweave.pages.user.configuration;

import org.apache.wicket.Component;
import org.apache.wicket.Page;
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.AbstractLink;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import com.userweave.application.UserWeaveSession;
import com.userweave.components.customModalWindow.CustomModalWindow;
import com.userweave.components.navigation.NavigationBorder;
import com.userweave.components.navigation.NavigationBorder.Color;
import com.userweave.domain.User;
import com.userweave.domain.service.UserService;
import com.userweave.pages.components.headerpanel.HeaderPanel;
import com.userweave.pages.components.headerpanel.LinkButtonComponent;
import com.userweave.pages.components.headerpanel.LinkComponent;
import com.userweave.pages.components.headerpanel.LinkComponentCreator;
import com.userweave.pages.configuration.study.details.AssurancePage;
import com.userweave.pages.login.SignoutPage;
import com.userweave.presentation.model.UserModel;

/**
 * @author ipavkovic
 */
public class UserEditHeaderPanel extends HeaderPanel {
    private static final long serialVersionUID = 1L;

    @SpringBean
    private UserService userService;

    public UserEditHeaderPanel(String id, UserModel model) {
        super(id, new CompoundPropertyModel(model));

        addLinks();
    }

    private User getUser() {
        return (User) getDefaultModelObject();
    }

    @Override
    protected Component createHeaderComponent(String markupId) {
        NavigationBorder nav = new NavigationBorder(markupId, new StringResourceModel("my_account", this, null),
                Color.Gray);

        nav.add(new Label("surname"));

        nav.add(new Label("forename"));

        return nav;
    }

    private void addLinks() {
        addDisableUserLink();
        addEnableUserLink();
    }

    private void addEnableUserLink() {
        addLinkComponent(new LinkComponentCreator() {

            @Override
            public LinkComponent create(String markupId) {
                return new LinkButtonComponent(markupId,
                        new StringResourceModel("reactivate", UserEditHeaderPanel.this, null)) {

                    @Override
                    protected AbstractLink createLink(String markupId) {
                        return new AjaxLink(markupId) {

                            @Override
                            public void onClick(AjaxRequestTarget target) {
                                userService.activate(getUser());
                                target.addComponent(UserEditHeaderPanel.this);
                            }

                            @Override
                            public boolean isVisible() {
                                return getUser().isDeactivated() && UserWeaveSession.get().isAdmin();
                            }
                        };
                    }
                };

            }
        });

    }

    private boolean disableUser = false;

    private void addDisableUserLink() {

        final CustomModalWindow disableUserModalWindow = addLinkModalWindow();

        disableUserModalWindow.setPageCreator(new ModalWindow.PageCreator() {
            public Page createPage() {
                return new AssurancePage(disableUserModalWindow) {
                    @Override
                    protected void onOk(AjaxRequestTarget target) {
                        disableUser = true;
                    }

                    @Override
                    protected IModel getAcceptLabel() {
                        return new StringResourceModel("end_membership", UserEditHeaderPanel.this, null);
                    }

                    @Override
                    protected IModel getSureModel() {
                        return new StringResourceModel("sure", UserEditHeaderPanel.this, null);
                    }
                };
            }
        });

        disableUserModalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
            public void onClose(AjaxRequestTarget target) {

                if (disableUser) {
                    userService.deactivate(getUser());
                    disableUser = false;
                    if (UserWeaveSession.get().isAdmin()) {
                        target.addComponent(UserEditHeaderPanel.this);
                    } else {
                        setResponsePage(SignoutPage.class);
                    }
                }
            }
        });

        disableUserModalWindow.setCloseButtonCallback(new ModalWindow.CloseButtonCallback() {
            public boolean onCloseButtonClicked(AjaxRequestTarget target) {
                return true;
            }
        });

        addLinkComponent(new LinkComponentCreator() {
            @Override
            public LinkComponent create(String markupId) {
                return new LinkButtonComponent(markupId,
                        new StringResourceModel("end_membership", UserEditHeaderPanel.this, null)) {

                    @Override
                    protected AbstractLink createLink(String markupId) {
                        return new AjaxLink(markupId) {

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

                            @Override
                            public boolean isVisible() {
                                return !getUser().isDeactivated();
                            }
                        };
                    }
                };
            }
        });

    }

}